Resolve merge conflicts with master
[nit.git] / c_src / global_compiler.sep.1.c
1 #include "global_compiler.sep.0.h"
2 /* method global_compiler#ModelBuilder#run_global_compiler for (self: ModelBuilder, MModule, RapidTypeAnalysis) */
3 void global_compiler__ModelBuilder__run_global_compiler(val* self, val* p0, val* p1) {
4 val* var_mainmodule /* var mainmodule: MModule */;
5 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
6 long var /* : Int */;
7 long var_time0 /* var time0: Int */;
8 val* var1 /* : ToolContext */;
9 static val* varonce;
10 val* var2 /* : String */;
11 char* var3 /* : NativeString */;
12 long var4 /* : Int */;
13 val* var5 /* : String */;
14 long var6 /* : Int */;
15 val* var7 /* : GlobalCompiler */;
16 val* var_compiler /* var compiler: GlobalCompiler */;
17 val* var8 /* : HashSet[MClassType] */;
18 val* var9 /* : Iterator[nullable Object] */;
19 short int var10 /* : Bool */;
20 val* var11 /* : nullable Object */;
21 val* var_t /* var t: MClassType */;
22 val* var12 /* : HashSet[MClassType] */;
23 val* var13 /* : Iterator[nullable Object] */;
24 short int var14 /* : Bool */;
25 val* var15 /* : nullable Object */;
26 val* var_t16 /* var t: MClassType */;
27 val* var17 /* : String */;
28 static val* varonce18;
29 val* var19 /* : String */;
30 char* var20 /* : NativeString */;
31 long var21 /* : Int */;
32 val* var22 /* : String */;
33 short int var23 /* : Bool */;
34 val* var25 /* : List[AbstractRuntimeFunction] */;
35 short int var26 /* : Bool */;
36 short int var27 /* : Bool */;
37 val* var28 /* : List[AbstractRuntimeFunction] */;
38 val* var29 /* : nullable Object */;
39 val* var_m /* var m: AbstractRuntimeFunction */;
40 val* var30 /* : ToolContext */;
41 static val* varonce31;
42 val* var32 /* : String */;
43 char* var33 /* : NativeString */;
44 long var34 /* : Int */;
45 val* var35 /* : String */;
46 static val* varonce36;
47 val* var37 /* : String */;
48 char* var38 /* : NativeString */;
49 long var39 /* : Int */;
50 val* var40 /* : String */;
51 val* var41 /* : HashSet[AbstractRuntimeFunction] */;
52 long var42 /* : Int */;
53 val* var43 /* : List[AbstractRuntimeFunction] */;
54 long var44 /* : Int */;
55 long var45 /* : Int */;
56 long var47 /* : Int */;
57 static val* varonce48;
58 val* var49 /* : String */;
59 char* var50 /* : NativeString */;
60 long var51 /* : Int */;
61 val* var52 /* : String */;
62 val* var53 /* : HashSet[AbstractRuntimeFunction] */;
63 long var54 /* : Int */;
64 static val* varonce55;
65 val* var56 /* : String */;
66 char* var57 /* : NativeString */;
67 long var58 /* : Int */;
68 val* var59 /* : String */;
69 val* var60 /* : Array[Object] */;
70 long var61 /* : Int */;
71 val* var62 /* : NativeArray[Object] */;
72 val* var63 /* : Object */;
73 val* var64 /* : Object */;
74 val* var65 /* : String */;
75 long var66 /* : Int */;
76 val* var68 /* : ToolContext */;
77 static val* varonce69;
78 val* var70 /* : String */;
79 char* var71 /* : NativeString */;
80 long var72 /* : Int */;
81 val* var73 /* : String */;
82 val* var74 /* : HashSet[AbstractRuntimeFunction] */;
83 long var75 /* : Int */;
84 val* var76 /* : Array[Object] */;
85 long var77 /* : Int */;
86 val* var78 /* : NativeArray[Object] */;
87 val* var79 /* : Object */;
88 val* var80 /* : String */;
89 long var81 /* : Int */;
90 long var82 /* : Int */;
91 long var_time1 /* var time1: Int */;
92 val* var83 /* : ToolContext */;
93 static val* varonce84;
94 val* var85 /* : String */;
95 char* var86 /* : NativeString */;
96 long var87 /* : Int */;
97 val* var88 /* : String */;
98 long var89 /* : Int */;
99 long var91 /* : Int */;
100 static val* varonce92;
101 val* var93 /* : String */;
102 char* var94 /* : NativeString */;
103 long var95 /* : Int */;
104 val* var96 /* : String */;
105 val* var97 /* : Array[Object] */;
106 long var98 /* : Int */;
107 val* var99 /* : NativeArray[Object] */;
108 val* var100 /* : Object */;
109 val* var101 /* : String */;
110 long var102 /* : Int */;
111 var_mainmodule = p0;
112 var_runtime_type_analysis = p1;
113 var = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
114 var_time0 = var;
115 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
116 if (varonce) {
117 var2 = varonce;
118 } else {
119 var3 = "*** GENERATING C ***";
120 var4 = 20;
121 var5 = string__NativeString__to_s_with_length(var3, var4);
122 var2 = var5;
123 varonce = var2;
124 }
125 var6 = 1;
126 ((void (*)(val*, val*, long))(var1->class->vft[COLOR_toolcontext__ToolContext__info]))(var1, var2, var6) /* info on <var1:ToolContext>*/;
127 var7 = NEW_global_compiler__GlobalCompiler(&type_global_compiler__GlobalCompiler);
128 ((void (*)(val*, val*, val*, val*))(var7->class->vft[COLOR_global_compiler__GlobalCompiler__init]))(var7, var_mainmodule, self, var_runtime_type_analysis) /* init on <var7:GlobalCompiler>*/;
129 var_compiler = var7;
130 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_header]))(var_compiler) /* compile_header on <var_compiler:GlobalCompiler>*/;
131 var8 = ((val* (*)(val*))(var_runtime_type_analysis->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var_runtime_type_analysis) /* live_types on <var_runtime_type_analysis:RapidTypeAnalysis>*/;
132 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Collection__iterator]))(var8) /* iterator on <var8:HashSet[MClassType]>*/;
133 for(;;) {
134 var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
135 if(!var10) break;
136 var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
137 var_t = var11;
138 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__declare_runtimeclass]))(var_compiler, var_t) /* declare_runtimeclass on <var_compiler:GlobalCompiler>*/;
139 CONTINUE_label: (void)0;
140 ((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
141 }
142 BREAK_label: (void)0;
143 ((void (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__compile_class_names]))(var_compiler) /* compile_class_names on <var_compiler:GlobalCompiler>*/;
144 var12 = ((val* (*)(val*))(var_runtime_type_analysis->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var_runtime_type_analysis) /* live_types on <var_runtime_type_analysis:RapidTypeAnalysis>*/;
145 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:HashSet[MClassType]>*/;
146 for(;;) {
147 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
148 if(!var14) break;
149 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
150 var_t16 = var15;
151 var17 = ((val* (*)(val*))(var_t16->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t16) /* ctype on <var_t16:MClassType>*/;
152 if (varonce18) {
153 var19 = varonce18;
154 } else {
155 var20 = "val*";
156 var21 = 4;
157 var22 = string__NativeString__to_s_with_length(var20, var21);
158 var19 = var22;
159 varonce18 = var19;
160 }
161 var23 = ((short int (*)(val*, val*))(var17->class->vft[COLOR_kernel__Object___61d_61d]))(var17, var19) /* == on <var17:String>*/;
162 if (var23){
163 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__generate_init_instance]))(var_compiler, var_t16) /* generate_init_instance on <var_compiler:GlobalCompiler>*/;
164 } else {
165 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__generate_box_instance]))(var_compiler, var_t16) /* generate_box_instance on <var_compiler:GlobalCompiler>*/;
166 }
167 CONTINUE_label24: (void)0;
168 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
169 }
170 BREAK_label24: (void)0;
171 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_main_function]))(var_compiler) /* compile_main_function on <var_compiler:GlobalCompiler>*/;
172 for(;;) {
173 var25 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__todos]))(var_compiler) /* todos on <var_compiler:GlobalCompiler>*/;
174 var26 = ((short int (*)(val*))(var25->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var25) /* is_empty on <var25:List[AbstractRuntimeFunction]>*/;
175 var27 = !var26;
176 if (!var27) break;
177 var28 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__todos]))(var_compiler) /* todos on <var_compiler:GlobalCompiler>*/;
178 var29 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Sequence__shift]))(var28) /* shift on <var28:List[AbstractRuntimeFunction]>*/;
179 var_m = var29;
180 var30 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
181 if (varonce31) {
182 var32 = varonce31;
183 } else {
184 var33 = "Compile ";
185 var34 = 8;
186 var35 = string__NativeString__to_s_with_length(var33, var34);
187 var32 = var35;
188 varonce31 = var32;
189 }
190 if (varonce36) {
191 var37 = varonce36;
192 } else {
193 var38 = " (";
194 var39 = 2;
195 var40 = string__NativeString__to_s_with_length(var38, var39);
196 var37 = var40;
197 varonce36 = var37;
198 }
199 var41 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(var_compiler) /* seen on <var_compiler:GlobalCompiler>*/;
200 var42 = ((long (*)(val*))(var41->class->vft[COLOR_abstract_collection__Collection__length]))(var41) /* length on <var41:HashSet[AbstractRuntimeFunction]>*/;
201 var43 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__todos]))(var_compiler) /* todos on <var_compiler:GlobalCompiler>*/;
202 var44 = ((long (*)(val*))(var43->class->vft[COLOR_abstract_collection__Collection__length]))(var43) /* length on <var43:List[AbstractRuntimeFunction]>*/;
203 { /* Inline kernel#Int#- (var42,var44) */
204 var47 = var42 - var44;
205 var45 = var47;
206 goto RET_LABEL46;
207 RET_LABEL46:(void)0;
208 }
209 if (varonce48) {
210 var49 = varonce48;
211 } else {
212 var50 = "/";
213 var51 = 1;
214 var52 = string__NativeString__to_s_with_length(var50, var51);
215 var49 = var52;
216 varonce48 = var49;
217 }
218 var53 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(var_compiler) /* seen on <var_compiler:GlobalCompiler>*/;
219 var54 = ((long (*)(val*))(var53->class->vft[COLOR_abstract_collection__Collection__length]))(var53) /* length on <var53:HashSet[AbstractRuntimeFunction]>*/;
220 if (varonce55) {
221 var56 = varonce55;
222 } else {
223 var57 = ")";
224 var58 = 1;
225 var59 = string__NativeString__to_s_with_length(var57, var58);
226 var56 = var59;
227 varonce55 = var56;
228 }
229 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
230 { /* var60 = array_instance Array[Object] */
231 var61 = 7;
232 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
233 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var32;
234 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_m;
235 ((struct instance_array__NativeArray*)var62)->values[2] = (val*) var37;
236 var63 = BOX_kernel__Int(var45); /* autobox from Int to Object */
237 ((struct instance_array__NativeArray*)var62)->values[3] = (val*) var63;
238 ((struct instance_array__NativeArray*)var62)->values[4] = (val*) var49;
239 var64 = BOX_kernel__Int(var54); /* autobox from Int to Object */
240 ((struct instance_array__NativeArray*)var62)->values[5] = (val*) var64;
241 ((struct instance_array__NativeArray*)var62)->values[6] = (val*) var56;
242 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
243 }
244 var65 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
245 var66 = 3;
246 ((void (*)(val*, val*, long))(var30->class->vft[COLOR_toolcontext__ToolContext__info]))(var30, var65, var66) /* info on <var30:ToolContext>*/;
247 ((void (*)(val*, val*))(var_m->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__compile_to_c]))(var_m, var_compiler) /* compile_to_c on <var_m:AbstractRuntimeFunction>*/;
248 CONTINUE_label67: (void)0;
249 }
250 BREAK_label67: (void)0;
251 var68 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
252 if (varonce69) {
253 var70 = varonce69;
254 } else {
255 var71 = "Total methods to compile to C: ";
256 var72 = 31;
257 var73 = string__NativeString__to_s_with_length(var71, var72);
258 var70 = var73;
259 varonce69 = var70;
260 }
261 var74 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(var_compiler) /* seen on <var_compiler:GlobalCompiler>*/;
262 var75 = ((long (*)(val*))(var74->class->vft[COLOR_abstract_collection__Collection__length]))(var74) /* length on <var74:HashSet[AbstractRuntimeFunction]>*/;
263 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
264 { /* var76 = array_instance Array[Object] */
265 var77 = 2;
266 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
267 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var70;
268 var79 = BOX_kernel__Int(var75); /* autobox from Int to Object */
269 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var79;
270 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
271 }
272 var80 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
273 var81 = 2;
274 ((void (*)(val*, val*, long))(var68->class->vft[COLOR_toolcontext__ToolContext__info]))(var68, var80, var81) /* info on <var68:ToolContext>*/;
275 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__display_stats]))(var_compiler) /* display_stats on <var_compiler:GlobalCompiler>*/;
276 var82 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
277 var_time1 = var82;
278 var83 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
279 if (varonce84) {
280 var85 = varonce84;
281 } else {
282 var86 = "*** END GENERATING C: ";
283 var87 = 22;
284 var88 = string__NativeString__to_s_with_length(var86, var87);
285 var85 = var88;
286 varonce84 = var85;
287 }
288 { /* Inline kernel#Int#- (var_time1,var_time0) */
289 var91 = var_time1 - var_time0;
290 var89 = var91;
291 goto RET_LABEL90;
292 RET_LABEL90:(void)0;
293 }
294 if (varonce92) {
295 var93 = varonce92;
296 } else {
297 var94 = " ***";
298 var95 = 4;
299 var96 = string__NativeString__to_s_with_length(var94, var95);
300 var93 = var96;
301 varonce92 = var93;
302 }
303 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
304 { /* var97 = array_instance Array[Object] */
305 var98 = 3;
306 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
307 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var85;
308 var100 = BOX_kernel__Int(var89); /* autobox from Int to Object */
309 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var100;
310 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
311 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
312 }
313 var101 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
314 var102 = 2;
315 ((void (*)(val*, val*, long))(var83->class->vft[COLOR_toolcontext__ToolContext__info]))(var83, var101, var102) /* info on <var83:ToolContext>*/;
316 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__ModelBuilder__write_and_make]))(self, var_compiler) /* write_and_make on <self:ModelBuilder>*/;
317 RET_LABEL:;
318 }
319 /* method global_compiler#ModelBuilder#run_global_compiler for (self: Object, MModule, RapidTypeAnalysis) */
320 void VIRTUAL_global_compiler__ModelBuilder__run_global_compiler(val* self, val* p0, val* p1) {
321 global_compiler__ModelBuilder__run_global_compiler(self, p0, p1);
322 RET_LABEL:;
323 }
324 /* method global_compiler#GlobalCompiler#runtime_type_analysis for (self: GlobalCompiler): RapidTypeAnalysis */
325 val* global_compiler__GlobalCompiler__runtime_type_analysis(val* self) {
326 val* var /* : RapidTypeAnalysis */;
327 val* var1 /* : RapidTypeAnalysis */;
328 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64druntime_type_analysis].val; /* @runtime_type_analysis on <self:GlobalCompiler> */
329 if (var1 == NULL) {
330 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @runtime_type_analysis");
331 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 84);
332 show_backtrace(1);
333 }
334 var = var1;
335 RET_LABEL:;
336 return var;
337 }
338 /* method global_compiler#GlobalCompiler#runtime_type_analysis for (self: Object): RapidTypeAnalysis */
339 val* VIRTUAL_global_compiler__GlobalCompiler__runtime_type_analysis(val* self) {
340 val* var /* : RapidTypeAnalysis */;
341 val* var1 /* : RapidTypeAnalysis */;
342 var1 = global_compiler__GlobalCompiler__runtime_type_analysis(self);
343 var = var1;
344 RET_LABEL:;
345 return var;
346 }
347 /* method global_compiler#GlobalCompiler#runtime_type_analysis= for (self: GlobalCompiler, RapidTypeAnalysis) */
348 void global_compiler__GlobalCompiler__runtime_type_analysis_61d(val* self, val* p0) {
349 self->attrs[COLOR_global_compiler__GlobalCompiler___64druntime_type_analysis].val = p0; /* @runtime_type_analysis on <self:GlobalCompiler> */
350 RET_LABEL:;
351 }
352 /* method global_compiler#GlobalCompiler#runtime_type_analysis= for (self: Object, RapidTypeAnalysis) */
353 void VIRTUAL_global_compiler__GlobalCompiler__runtime_type_analysis_61d(val* self, val* p0) {
354 global_compiler__GlobalCompiler__runtime_type_analysis_61d(self, p0);
355 RET_LABEL:;
356 }
357 /* method global_compiler#GlobalCompiler#init for (self: GlobalCompiler, MModule, ModelBuilder, RapidTypeAnalysis) */
358 void global_compiler__GlobalCompiler__init(val* self, val* p0, val* p1, val* p2) {
359 val* var_mainmodule /* var mainmodule: MModule */;
360 val* var_modelbuilder /* var modelbuilder: ModelBuilder */;
361 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
362 val* var /* : String */;
363 static val* varonce;
364 val* var1 /* : String */;
365 char* var2 /* : NativeString */;
366 long var3 /* : Int */;
367 val* var4 /* : String */;
368 val* var5 /* : Array[Object] */;
369 long var6 /* : Int */;
370 val* var7 /* : NativeArray[Object] */;
371 val* var8 /* : String */;
372 val* var9 /* : CodeFile */;
373 val* var_file /* var file: CodeFile */;
374 val* var10 /* : CodeWriter */;
375 val* var11 /* : Array[MClassType] */;
376 val* var12 /* : HashSet[MClassType] */;
377 val* var13 /* : Iterator[nullable Object] */;
378 short int var14 /* : Bool */;
379 val* var15 /* : nullable Object */;
380 val* var_t /* var t: MClassType */;
381 val* var16 /* : String */;
382 static val* varonce17;
383 val* var18 /* : String */;
384 char* var19 /* : NativeString */;
385 long var20 /* : Int */;
386 val* var21 /* : String */;
387 short int var22 /* : Bool */;
388 val* var23 /* : Array[MClassType] */;
389 var_mainmodule = p0;
390 var_modelbuilder = p1;
391 var_runtime_type_analysis = p2;
392 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__init]))(self, var_mainmodule, var_modelbuilder) /* init on <self:GlobalCompiler>*/;
393 var = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_mmodule__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
394 if (varonce) {
395 var1 = varonce;
396 } else {
397 var2 = ".nitgg";
398 var3 = 6;
399 var4 = string__NativeString__to_s_with_length(var2, var3);
400 var1 = var4;
401 varonce = var1;
402 }
403 var5 = NEW_array__Array(&type_array__Arraykernel__Object);
404 { /* var5 = array_instance Array[Object] */
405 var6 = 2;
406 var7 = NEW_array__NativeArray(var6, &type_array__NativeArraykernel__Object);
407 ((struct instance_array__NativeArray*)var7)->values[0] = (val*) var;
408 ((struct instance_array__NativeArray*)var7)->values[1] = (val*) var1;
409 ((void (*)(val*, val*, long))(var5->class->vft[COLOR_array__Array__with_native]))(var5, var7, var6) /* with_native on <var5:Array[Object]>*/;
410 }
411 var8 = ((val* (*)(val*))(var5->class->vft[COLOR_string__Object__to_s]))(var5) /* to_s on <var5:Array[Object]>*/;
412 var9 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(self, var8) /* new_file on <self:GlobalCompiler>*/;
413 var_file = var9;
414 var10 = NEW_abstract_compiler__CodeWriter(&type_abstract_compiler__CodeWriter);
415 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_compiler__CodeWriter__init]))(var10, var_file) /* init on <var10:CodeWriter>*/;
416 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header_61d]))(self, var10) /* header= on <self:GlobalCompiler>*/;
417 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis_61d]))(self, var_runtime_type_analysis) /* runtime_type_analysis= on <self:GlobalCompiler>*/;
418 var11 = NEW_array__Array(&type_array__Arraymodel__MClassType);
419 ((void (*)(val*))(var11->class->vft[COLOR_array__Array__init]))(var11) /* init on <var11:Array[MClassType]>*/;
420 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__live_primitive_types_61d]))(self, var11) /* live_primitive_types= on <self:GlobalCompiler>*/;
421 var12 = ((val* (*)(val*))(var_runtime_type_analysis->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var_runtime_type_analysis) /* live_types on <var_runtime_type_analysis:RapidTypeAnalysis>*/;
422 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:HashSet[MClassType]>*/;
423 for(;;) {
424 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
425 if(!var14) break;
426 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
427 var_t = var15;
428 var16 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MClassType>*/;
429 if (varonce17) {
430 var18 = varonce17;
431 } else {
432 var19 = "val*";
433 var20 = 4;
434 var21 = string__NativeString__to_s_with_length(var19, var20);
435 var18 = var21;
436 varonce17 = var18;
437 }
438 var22 = ((short int (*)(val*, val*))(var16->class->vft[COLOR_kernel__Object___33d_61d]))(var16, var18) /* != on <var16:String>*/;
439 if (var22){
440 var23 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__live_primitive_types]))(self) /* live_primitive_types on <self:GlobalCompiler>*/;
441 ((void (*)(val*, val*))(var23->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var23, var_t) /* add on <var23:Array[MClassType]>*/;
442 } else {
443 }
444 CONTINUE_label: (void)0;
445 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
446 }
447 BREAK_label: (void)0;
448 RET_LABEL:;
449 }
450 /* method global_compiler#GlobalCompiler#init for (self: Object, MModule, ModelBuilder, RapidTypeAnalysis) */
451 void VIRTUAL_global_compiler__GlobalCompiler__init(val* self, val* p0, val* p1, val* p2) {
452 global_compiler__GlobalCompiler__init(self, p0, p1, p2);
453 RET_LABEL:;
454 }
455 /* method global_compiler#GlobalCompiler#compile_class_names for (self: GlobalCompiler) */
456 void global_compiler__GlobalCompiler__compile_class_names(val* self) {
457 val* var /* : AbstractCompilerVisitor */;
458 val* var_v /* var v: GlobalCompilerVisitor */;
459 val* var1 /* : CodeWriter */;
460 static val* varonce;
461 val* var2 /* : String */;
462 char* var3 /* : NativeString */;
463 long var4 /* : Int */;
464 val* var5 /* : String */;
465 static val* varonce6;
466 val* var7 /* : String */;
467 char* var8 /* : NativeString */;
468 long var9 /* : Int */;
469 val* var10 /* : String */;
470 val* var11 /* : RapidTypeAnalysis */;
471 val* var12 /* : HashSet[MClassType] */;
472 val* var13 /* : Iterator[nullable Object] */;
473 short int var14 /* : Bool */;
474 val* var15 /* : nullable Object */;
475 val* var_t /* var t: MClassType */;
476 static val* varonce16;
477 val* var17 /* : String */;
478 char* var18 /* : NativeString */;
479 long var19 /* : Int */;
480 val* var20 /* : String */;
481 static val* varonce21;
482 val* var22 /* : String */;
483 char* var23 /* : NativeString */;
484 long var24 /* : Int */;
485 val* var25 /* : String */;
486 val* var26 /* : String */;
487 static val* varonce27;
488 val* var28 /* : String */;
489 char* var29 /* : NativeString */;
490 long var30 /* : Int */;
491 val* var31 /* : String */;
492 val* var32 /* : Array[Object] */;
493 long var33 /* : Int */;
494 val* var34 /* : NativeArray[Object] */;
495 val* var35 /* : String */;
496 static val* varonce36;
497 val* var37 /* : String */;
498 char* var38 /* : NativeString */;
499 long var39 /* : Int */;
500 val* var40 /* : String */;
501 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
502 var_v = var;
503 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
504 if (varonce) {
505 var2 = varonce;
506 } else {
507 var3 = "extern const char const * class_names[];";
508 var4 = 40;
509 var5 = string__NativeString__to_s_with_length(var3, var4);
510 var2 = var5;
511 varonce = var2;
512 }
513 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var1, var2) /* add_decl on <var1:CodeWriter>*/;
514 if (varonce6) {
515 var7 = varonce6;
516 } else {
517 var8 = "const char const * class_names[] = {";
518 var9 = 36;
519 var10 = string__NativeString__to_s_with_length(var8, var9);
520 var7 = var10;
521 varonce6 = var7;
522 }
523 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var7) /* add on <var_v:GlobalCompilerVisitor>*/;
524 var11 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
525 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var11) /* live_types on <var11:RapidTypeAnalysis>*/;
526 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:HashSet[MClassType]>*/;
527 for(;;) {
528 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
529 if(!var14) break;
530 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
531 var_t = var15;
532 if (varonce16) {
533 var17 = varonce16;
534 } else {
535 var18 = "\"";
536 var19 = 1;
537 var20 = string__NativeString__to_s_with_length(var18, var19);
538 var17 = var20;
539 varonce16 = var17;
540 }
541 if (varonce21) {
542 var22 = varonce21;
543 } else {
544 var23 = "\", /* ";
545 var24 = 6;
546 var25 = string__NativeString__to_s_with_length(var23, var24);
547 var22 = var25;
548 varonce21 = var22;
549 }
550 var26 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(self, var_t) /* classid on <self:GlobalCompiler>*/;
551 if (varonce27) {
552 var28 = varonce27;
553 } else {
554 var29 = " */";
555 var30 = 3;
556 var31 = string__NativeString__to_s_with_length(var29, var30);
557 var28 = var31;
558 varonce27 = var28;
559 }
560 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
561 { /* var32 = array_instance Array[Object] */
562 var33 = 5;
563 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
564 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var17;
565 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_t;
566 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var22;
567 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var26;
568 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
569 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
570 }
571 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
572 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var35) /* add on <var_v:GlobalCompilerVisitor>*/;
573 CONTINUE_label: (void)0;
574 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
575 }
576 BREAK_label: (void)0;
577 if (varonce36) {
578 var37 = varonce36;
579 } else {
580 var38 = "};";
581 var39 = 2;
582 var40 = string__NativeString__to_s_with_length(var38, var39);
583 var37 = var40;
584 varonce36 = var37;
585 }
586 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var37) /* add on <var_v:GlobalCompilerVisitor>*/;
587 RET_LABEL:;
588 }
589 /* method global_compiler#GlobalCompiler#compile_class_names for (self: Object) */
590 void VIRTUAL_global_compiler__GlobalCompiler__compile_class_names(val* self) {
591 global_compiler__GlobalCompiler__compile_class_names(self);
592 RET_LABEL:;
593 }
594 /* method global_compiler#GlobalCompiler#classid for (self: GlobalCompiler, MClassType): String */
595 val* global_compiler__GlobalCompiler__classid(val* self, val* p0) {
596 val* var /* : String */;
597 val* var_mtype /* var mtype: MClassType */;
598 val* var1 /* : HashMap[MClassType, String] */;
599 short int var2 /* : Bool */;
600 val* var3 /* : HashMap[MClassType, String] */;
601 val* var4 /* : nullable Object */;
602 static val* varonce;
603 val* var5 /* : String */;
604 char* var6 /* : NativeString */;
605 long var7 /* : Int */;
606 val* var8 /* : String */;
607 val* var9 /* : Array[Object] */;
608 long var10 /* : Int */;
609 val* var11 /* : NativeArray[Object] */;
610 val* var12 /* : String */;
611 var_mtype = p0;
612 var1 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
613 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var1, var_mtype) /* has_key on <var1:HashMap[MClassType, String]>*/;
614 if (var2){
615 var3 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
616 var4 = ((val* (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var3, var_mtype) /* [] on <var3:HashMap[MClassType, String]>*/;
617 var = var4;
618 goto RET_LABEL;
619 } else {
620 }
621 if (varonce) {
622 var5 = varonce;
623 } else {
624 var6 = "No classid for ";
625 var7 = 15;
626 var8 = string__NativeString__to_s_with_length(var6, var7);
627 var5 = var8;
628 varonce = var5;
629 }
630 var9 = NEW_array__Array(&type_array__Arraykernel__Object);
631 { /* var9 = array_instance Array[Object] */
632 var10 = 2;
633 var11 = NEW_array__NativeArray(var10, &type_array__NativeArraykernel__Object);
634 ((struct instance_array__NativeArray*)var11)->values[0] = (val*) var5;
635 ((struct instance_array__NativeArray*)var11)->values[1] = (val*) var_mtype;
636 ((void (*)(val*, val*, long))(var9->class->vft[COLOR_array__Array__with_native]))(var9, var11, var10) /* with_native on <var9:Array[Object]>*/;
637 }
638 var12 = ((val* (*)(val*))(var9->class->vft[COLOR_string__Object__to_s]))(var9) /* to_s on <var9:Array[Object]>*/;
639 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var12) /* print on <self:GlobalCompiler>*/;
640 fprintf(stderr, "Runtime error: %s", "Aborted");
641 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 120);
642 show_backtrace(1);
643 RET_LABEL:;
644 return var;
645 }
646 /* method global_compiler#GlobalCompiler#classid for (self: Object, MClassType): String */
647 val* VIRTUAL_global_compiler__GlobalCompiler__classid(val* self, val* p0) {
648 val* var /* : String */;
649 val* var1 /* : String */;
650 var1 = global_compiler__GlobalCompiler__classid(self, p0);
651 var = var1;
652 RET_LABEL:;
653 return var;
654 }
655 /* method global_compiler#GlobalCompiler#classids for (self: GlobalCompiler): HashMap[MClassType, String] */
656 val* global_compiler__GlobalCompiler__classids(val* self) {
657 val* var /* : HashMap[MClassType, String] */;
658 val* var1 /* : HashMap[MClassType, String] */;
659 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dclassids].val; /* @classids on <self:GlobalCompiler> */
660 if (var1 == NULL) {
661 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @classids");
662 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 123);
663 show_backtrace(1);
664 }
665 var = var1;
666 RET_LABEL:;
667 return var;
668 }
669 /* method global_compiler#GlobalCompiler#classids for (self: Object): HashMap[MClassType, String] */
670 val* VIRTUAL_global_compiler__GlobalCompiler__classids(val* self) {
671 val* var /* : HashMap[MClassType, String] */;
672 val* var1 /* : HashMap[MClassType, String] */;
673 var1 = global_compiler__GlobalCompiler__classids(self);
674 var = var1;
675 RET_LABEL:;
676 return var;
677 }
678 /* method global_compiler#GlobalCompiler#classids= for (self: GlobalCompiler, HashMap[MClassType, String]) */
679 void global_compiler__GlobalCompiler__classids_61d(val* self, val* p0) {
680 self->attrs[COLOR_global_compiler__GlobalCompiler___64dclassids].val = p0; /* @classids on <self:GlobalCompiler> */
681 RET_LABEL:;
682 }
683 /* method global_compiler#GlobalCompiler#classids= for (self: Object, HashMap[MClassType, String]) */
684 void VIRTUAL_global_compiler__GlobalCompiler__classids_61d(val* self, val* p0) {
685 global_compiler__GlobalCompiler__classids_61d(self, p0);
686 RET_LABEL:;
687 }
688 /* method global_compiler#GlobalCompiler#compile_header_structs for (self: GlobalCompiler) */
689 void global_compiler__GlobalCompiler__compile_header_structs(val* self) {
690 val* var /* : CodeWriter */;
691 static val* varonce;
692 val* var1 /* : String */;
693 char* var2 /* : NativeString */;
694 long var3 /* : Int */;
695 val* var4 /* : String */;
696 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
697 if (varonce) {
698 var1 = varonce;
699 } else {
700 var2 = "typedef struct {int classid;} val; /* general C type representing a Nit instance. */";
701 var3 = 84;
702 var4 = string__NativeString__to_s_with_length(var2, var3);
703 var1 = var4;
704 varonce = var1;
705 }
706 ((void (*)(val*, val*))(var->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var, var1) /* add_decl on <var:CodeWriter>*/;
707 RET_LABEL:;
708 }
709 /* method global_compiler#GlobalCompiler#compile_header_structs for (self: Object) */
710 void VIRTUAL_global_compiler__GlobalCompiler__compile_header_structs(val* self) {
711 global_compiler__GlobalCompiler__compile_header_structs(self);
712 RET_LABEL:;
713 }
714 /* method global_compiler#GlobalCompiler#live_primitive_types for (self: GlobalCompiler): Array[MClassType] */
715 val* global_compiler__GlobalCompiler__live_primitive_types(val* self) {
716 val* var /* : Array[MClassType] */;
717 val* var1 /* : Array[MClassType] */;
718 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dlive_primitive_types].val; /* @live_primitive_types on <self:GlobalCompiler> */
719 if (var1 == NULL) {
720 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @live_primitive_types");
721 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 134);
722 show_backtrace(1);
723 }
724 var = var1;
725 RET_LABEL:;
726 return var;
727 }
728 /* method global_compiler#GlobalCompiler#live_primitive_types for (self: Object): Array[MClassType] */
729 val* VIRTUAL_global_compiler__GlobalCompiler__live_primitive_types(val* self) {
730 val* var /* : Array[MClassType] */;
731 val* var1 /* : Array[MClassType] */;
732 var1 = global_compiler__GlobalCompiler__live_primitive_types(self);
733 var = var1;
734 RET_LABEL:;
735 return var;
736 }
737 /* method global_compiler#GlobalCompiler#live_primitive_types= for (self: GlobalCompiler, Array[MClassType]) */
738 void global_compiler__GlobalCompiler__live_primitive_types_61d(val* self, val* p0) {
739 self->attrs[COLOR_global_compiler__GlobalCompiler___64dlive_primitive_types].val = p0; /* @live_primitive_types on <self:GlobalCompiler> */
740 RET_LABEL:;
741 }
742 /* method global_compiler#GlobalCompiler#live_primitive_types= for (self: Object, Array[MClassType]) */
743 void VIRTUAL_global_compiler__GlobalCompiler__live_primitive_types_61d(val* self, val* p0) {
744 global_compiler__GlobalCompiler__live_primitive_types_61d(self, p0);
745 RET_LABEL:;
746 }
747 /* method global_compiler#GlobalCompiler#todo for (self: GlobalCompiler, AbstractRuntimeFunction) */
748 void global_compiler__GlobalCompiler__todo(val* self, val* p0) {
749 val* var_m /* var m: AbstractRuntimeFunction */;
750 val* var /* : HashSet[AbstractRuntimeFunction] */;
751 short int var1 /* : Bool */;
752 val* var2 /* : List[AbstractRuntimeFunction] */;
753 val* var3 /* : HashSet[AbstractRuntimeFunction] */;
754 var_m = p0;
755 var = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(self) /* seen on <self:GlobalCompiler>*/;
756 var1 = ((short int (*)(val*, val*))(var->class->vft[COLOR_abstract_collection__Collection__has]))(var, var_m) /* has on <var:HashSet[AbstractRuntimeFunction]>*/;
757 if (var1){
758 goto RET_LABEL;
759 } else {
760 }
761 var2 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__todos]))(self) /* todos on <self:GlobalCompiler>*/;
762 ((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_m) /* add on <var2:List[AbstractRuntimeFunction]>*/;
763 var3 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(self) /* seen on <self:GlobalCompiler>*/;
764 ((void (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var3, var_m) /* add on <var3:HashSet[AbstractRuntimeFunction]>*/;
765 RET_LABEL:;
766 }
767 /* method global_compiler#GlobalCompiler#todo for (self: Object, AbstractRuntimeFunction) */
768 void VIRTUAL_global_compiler__GlobalCompiler__todo(val* self, val* p0) {
769 global_compiler__GlobalCompiler__todo(self, p0);
770 RET_LABEL:;
771 }
772 /* method global_compiler#GlobalCompiler#todos for (self: GlobalCompiler): List[AbstractRuntimeFunction] */
773 val* global_compiler__GlobalCompiler__todos(val* self) {
774 val* var /* : List[AbstractRuntimeFunction] */;
775 val* var1 /* : List[AbstractRuntimeFunction] */;
776 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dtodos].val; /* @todos on <self:GlobalCompiler> */
777 if (var1 == NULL) {
778 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @todos");
779 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 146);
780 show_backtrace(1);
781 }
782 var = var1;
783 RET_LABEL:;
784 return var;
785 }
786 /* method global_compiler#GlobalCompiler#todos for (self: Object): List[AbstractRuntimeFunction] */
787 val* VIRTUAL_global_compiler__GlobalCompiler__todos(val* self) {
788 val* var /* : List[AbstractRuntimeFunction] */;
789 val* var1 /* : List[AbstractRuntimeFunction] */;
790 var1 = global_compiler__GlobalCompiler__todos(self);
791 var = var1;
792 RET_LABEL:;
793 return var;
794 }
795 /* method global_compiler#GlobalCompiler#todos= for (self: GlobalCompiler, List[AbstractRuntimeFunction]) */
796 void global_compiler__GlobalCompiler__todos_61d(val* self, val* p0) {
797 self->attrs[COLOR_global_compiler__GlobalCompiler___64dtodos].val = p0; /* @todos on <self:GlobalCompiler> */
798 RET_LABEL:;
799 }
800 /* method global_compiler#GlobalCompiler#todos= for (self: Object, List[AbstractRuntimeFunction]) */
801 void VIRTUAL_global_compiler__GlobalCompiler__todos_61d(val* self, val* p0) {
802 global_compiler__GlobalCompiler__todos_61d(self, p0);
803 RET_LABEL:;
804 }
805 /* method global_compiler#GlobalCompiler#seen for (self: GlobalCompiler): HashSet[AbstractRuntimeFunction] */
806 val* global_compiler__GlobalCompiler__seen(val* self) {
807 val* var /* : HashSet[AbstractRuntimeFunction] */;
808 val* var1 /* : HashSet[AbstractRuntimeFunction] */;
809 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dseen].val; /* @seen on <self:GlobalCompiler> */
810 if (var1 == NULL) {
811 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @seen");
812 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 149);
813 show_backtrace(1);
814 }
815 var = var1;
816 RET_LABEL:;
817 return var;
818 }
819 /* method global_compiler#GlobalCompiler#seen for (self: Object): HashSet[AbstractRuntimeFunction] */
820 val* VIRTUAL_global_compiler__GlobalCompiler__seen(val* self) {
821 val* var /* : HashSet[AbstractRuntimeFunction] */;
822 val* var1 /* : HashSet[AbstractRuntimeFunction] */;
823 var1 = global_compiler__GlobalCompiler__seen(self);
824 var = var1;
825 RET_LABEL:;
826 return var;
827 }
828 /* method global_compiler#GlobalCompiler#seen= for (self: GlobalCompiler, HashSet[AbstractRuntimeFunction]) */
829 void global_compiler__GlobalCompiler__seen_61d(val* self, val* p0) {
830 self->attrs[COLOR_global_compiler__GlobalCompiler___64dseen].val = p0; /* @seen on <self:GlobalCompiler> */
831 RET_LABEL:;
832 }
833 /* method global_compiler#GlobalCompiler#seen= for (self: Object, HashSet[AbstractRuntimeFunction]) */
834 void VIRTUAL_global_compiler__GlobalCompiler__seen_61d(val* self, val* p0) {
835 global_compiler__GlobalCompiler__seen_61d(self, p0);
836 RET_LABEL:;
837 }
838 /* method global_compiler#GlobalCompiler#declare_runtimeclass for (self: GlobalCompiler, MClassType) */
839 void global_compiler__GlobalCompiler__declare_runtimeclass(val* self, val* p0) {
840 val* var_mtype /* var mtype: MClassType */;
841 val* var /* : CodeWriter */;
842 val* var_v /* var v: CodeWriter */;
843 val* var1 /* : RapidTypeAnalysis */;
844 val* var2 /* : HashSet[MClassType] */;
845 short int var3 /* : Bool */;
846 static val* varonce;
847 val* var4 /* : String */;
848 char* var5 /* : NativeString */;
849 long var6 /* : Int */;
850 val* var7 /* : String */;
851 static val* varonce8;
852 val* var9 /* : String */;
853 char* var10 /* : NativeString */;
854 long var11 /* : Int */;
855 val* var12 /* : String */;
856 val* var13 /* : Array[Object] */;
857 long var14 /* : Int */;
858 val* var15 /* : NativeArray[Object] */;
859 val* var16 /* : String */;
860 val* var17 /* : HashMap[MClassType, String] */;
861 long var18 /* : Int */;
862 long var_idnum /* var idnum: Int */;
863 static val* varonce19;
864 val* var20 /* : String */;
865 char* var21 /* : NativeString */;
866 long var22 /* : Int */;
867 val* var23 /* : String */;
868 val* var24 /* : String */;
869 val* var25 /* : String */;
870 val* var_idname /* var idname: String */;
871 val* var26 /* : HashMap[MClassType, String] */;
872 static val* varonce27;
873 val* var28 /* : String */;
874 char* var29 /* : NativeString */;
875 long var30 /* : Int */;
876 val* var31 /* : String */;
877 static val* varonce32;
878 val* var33 /* : String */;
879 char* var34 /* : NativeString */;
880 long var35 /* : Int */;
881 val* var36 /* : String */;
882 static val* varonce37;
883 val* var38 /* : String */;
884 char* var39 /* : NativeString */;
885 long var40 /* : Int */;
886 val* var41 /* : String */;
887 static val* varonce42;
888 val* var43 /* : String */;
889 char* var44 /* : NativeString */;
890 long var45 /* : Int */;
891 val* var46 /* : String */;
892 val* var47 /* : Array[Object] */;
893 long var48 /* : Int */;
894 val* var49 /* : NativeArray[Object] */;
895 val* var50 /* : Object */;
896 val* var51 /* : String */;
897 static val* varonce52;
898 val* var53 /* : String */;
899 char* var54 /* : NativeString */;
900 long var55 /* : Int */;
901 val* var56 /* : String */;
902 val* var57 /* : String */;
903 static val* varonce58;
904 val* var59 /* : String */;
905 char* var60 /* : NativeString */;
906 long var61 /* : Int */;
907 val* var62 /* : String */;
908 val* var63 /* : Array[Object] */;
909 long var64 /* : Int */;
910 val* var65 /* : NativeArray[Object] */;
911 val* var66 /* : String */;
912 static val* varonce67;
913 val* var68 /* : String */;
914 char* var69 /* : NativeString */;
915 long var70 /* : Int */;
916 val* var71 /* : String */;
917 static val* varonce72;
918 val* var73 /* : String */;
919 char* var74 /* : NativeString */;
920 long var75 /* : Int */;
921 val* var76 /* : String */;
922 val* var77 /* : Array[Object] */;
923 long var78 /* : Int */;
924 val* var79 /* : NativeArray[Object] */;
925 val* var80 /* : String */;
926 val* var81 /* : MClass */;
927 val* var82 /* : String */;
928 static val* varonce83;
929 val* var84 /* : String */;
930 char* var85 /* : NativeString */;
931 long var86 /* : Int */;
932 val* var87 /* : String */;
933 short int var88 /* : Bool */;
934 val* var89 /* : Array[MType] */;
935 val* var90 /* : nullable Object */;
936 val* var91 /* : String */;
937 static val* varonce92;
938 val* var93 /* : String */;
939 char* var94 /* : NativeString */;
940 long var95 /* : Int */;
941 val* var96 /* : String */;
942 val* var97 /* : Array[Object] */;
943 long var98 /* : Int */;
944 val* var99 /* : NativeArray[Object] */;
945 val* var100 /* : String */;
946 val* var101 /* : String */;
947 static val* varonce102;
948 val* var103 /* : String */;
949 char* var104 /* : NativeString */;
950 long var105 /* : Int */;
951 val* var106 /* : String */;
952 short int var107 /* : Bool */;
953 val* var108 /* : String */;
954 static val* varonce109;
955 val* var110 /* : String */;
956 char* var111 /* : NativeString */;
957 long var112 /* : Int */;
958 val* var113 /* : String */;
959 val* var114 /* : Array[Object] */;
960 long var115 /* : Int */;
961 val* var116 /* : NativeArray[Object] */;
962 val* var117 /* : String */;
963 val* var118 /* : MModule */;
964 val* var119 /* : Set[MClassDef] */;
965 val* var120 /* : Iterator[nullable Object] */;
966 short int var121 /* : Bool */;
967 val* var122 /* : nullable Object */;
968 val* var_cd /* var cd: MClassDef */;
969 val* var123 /* : Array[MProperty] */;
970 val* var124 /* : Iterator[nullable Object] */;
971 short int var125 /* : Bool */;
972 val* var126 /* : nullable Object */;
973 val* var_p /* var p: MProperty */;
974 short int var127 /* : Bool */;
975 int cltype;
976 int idtype;
977 short int var128 /* : Bool */;
978 val* var129 /* : MPropDef */;
979 val* var130 /* : nullable MType */;
980 val* var_t /* var t: MType */;
981 val* var131 /* : MModule */;
982 val* var132 /* : MType */;
983 val* var133 /* : String */;
984 static val* varonce134;
985 val* var135 /* : String */;
986 char* var136 /* : NativeString */;
987 long var137 /* : Int */;
988 val* var138 /* : String */;
989 val* var139 /* : MPropDef */;
990 val* var140 /* : String */;
991 static val* varonce141;
992 val* var142 /* : String */;
993 char* var143 /* : NativeString */;
994 long var144 /* : Int */;
995 val* var145 /* : String */;
996 static val* varonce146;
997 val* var147 /* : String */;
998 char* var148 /* : NativeString */;
999 long var149 /* : Int */;
1000 val* var150 /* : String */;
1001 static val* varonce151;
1002 val* var152 /* : String */;
1003 char* var153 /* : NativeString */;
1004 long var154 /* : Int */;
1005 val* var155 /* : String */;
1006 val* var156 /* : Array[Object] */;
1007 long var157 /* : Int */;
1008 val* var158 /* : NativeArray[Object] */;
1009 val* var159 /* : String */;
1010 static val* varonce161;
1011 val* var162 /* : String */;
1012 char* var163 /* : NativeString */;
1013 long var164 /* : Int */;
1014 val* var165 /* : String */;
1015 var_mtype = p0;
1016 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
1017 var_v = var;
1018 var1 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
1019 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var1) /* live_types on <var1:RapidTypeAnalysis>*/;
1020 var3 = ((short int (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__Collection__has]))(var2, var_mtype) /* has on <var2:HashSet[MClassType]>*/;
1021 if (!var3) {
1022 fprintf(stderr, "Runtime error: %s", "Assert failed");
1023 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 156);
1024 show_backtrace(1);
1025 }
1026 if (varonce) {
1027 var4 = varonce;
1028 } else {
1029 var5 = "/* runtime class ";
1030 var6 = 17;
1031 var7 = string__NativeString__to_s_with_length(var5, var6);
1032 var4 = var7;
1033 varonce = var4;
1034 }
1035 if (varonce8) {
1036 var9 = varonce8;
1037 } else {
1038 var10 = " */";
1039 var11 = 3;
1040 var12 = string__NativeString__to_s_with_length(var10, var11);
1041 var9 = var12;
1042 varonce8 = var9;
1043 }
1044 var13 = NEW_array__Array(&type_array__Arraykernel__Object);
1045 { /* var13 = array_instance Array[Object] */
1046 var14 = 3;
1047 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraykernel__Object);
1048 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var4;
1049 ((struct instance_array__NativeArray*)var15)->values[1] = (val*) var_mtype;
1050 ((struct instance_array__NativeArray*)var15)->values[2] = (val*) var9;
1051 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[Object]>*/;
1052 }
1053 var16 = ((val* (*)(val*))(var13->class->vft[COLOR_string__Object__to_s]))(var13) /* to_s on <var13:Array[Object]>*/;
1054 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var16) /* add_decl on <var_v:CodeWriter>*/;
1055 var17 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
1056 var18 = ((long (*)(val*))(var17->class->vft[COLOR_abstract_collection__MapRead__length]))(var17) /* length on <var17:HashMap[MClassType, String]>*/;
1057 var_idnum = var18;
1058 if (varonce19) {
1059 var20 = varonce19;
1060 } else {
1061 var21 = "ID_";
1062 var22 = 3;
1063 var23 = string__NativeString__to_s_with_length(var21, var22);
1064 var20 = var23;
1065 varonce19 = var20;
1066 }
1067 var24 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1068 var25 = ((val* (*)(val*, val*))(var20->class->vft[COLOR_string__String___43d]))(var20, var24) /* + on <var20:String>*/;
1069 var_idname = var25;
1070 var26 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
1071 ((void (*)(val*, val*, val*))(var26->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var26, var_mtype, var_idname) /* []= on <var26:HashMap[MClassType, String]>*/;
1072 if (varonce27) {
1073 var28 = varonce27;
1074 } else {
1075 var29 = "#define ";
1076 var30 = 8;
1077 var31 = string__NativeString__to_s_with_length(var29, var30);
1078 var28 = var31;
1079 varonce27 = var28;
1080 }
1081 if (varonce32) {
1082 var33 = varonce32;
1083 } else {
1084 var34 = " ";
1085 var35 = 1;
1086 var36 = string__NativeString__to_s_with_length(var34, var35);
1087 var33 = var36;
1088 varonce32 = var33;
1089 }
1090 if (varonce37) {
1091 var38 = varonce37;
1092 } else {
1093 var39 = " /* ";
1094 var40 = 4;
1095 var41 = string__NativeString__to_s_with_length(var39, var40);
1096 var38 = var41;
1097 varonce37 = var38;
1098 }
1099 if (varonce42) {
1100 var43 = varonce42;
1101 } else {
1102 var44 = " */";
1103 var45 = 3;
1104 var46 = string__NativeString__to_s_with_length(var44, var45);
1105 var43 = var46;
1106 varonce42 = var43;
1107 }
1108 var47 = NEW_array__Array(&type_array__Arraykernel__Object);
1109 { /* var47 = array_instance Array[Object] */
1110 var48 = 7;
1111 var49 = NEW_array__NativeArray(var48, &type_array__NativeArraykernel__Object);
1112 ((struct instance_array__NativeArray*)var49)->values[0] = (val*) var28;
1113 ((struct instance_array__NativeArray*)var49)->values[1] = (val*) var_idname;
1114 ((struct instance_array__NativeArray*)var49)->values[2] = (val*) var33;
1115 var50 = BOX_kernel__Int(var_idnum); /* autobox from Int to Object */
1116 ((struct instance_array__NativeArray*)var49)->values[3] = (val*) var50;
1117 ((struct instance_array__NativeArray*)var49)->values[4] = (val*) var38;
1118 ((struct instance_array__NativeArray*)var49)->values[5] = (val*) var_mtype;
1119 ((struct instance_array__NativeArray*)var49)->values[6] = (val*) var43;
1120 ((void (*)(val*, val*, long))(var47->class->vft[COLOR_array__Array__with_native]))(var47, var49, var48) /* with_native on <var47:Array[Object]>*/;
1121 }
1122 var51 = ((val* (*)(val*))(var47->class->vft[COLOR_string__Object__to_s]))(var47) /* to_s on <var47:Array[Object]>*/;
1123 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var51) /* add_decl on <var_v:CodeWriter>*/;
1124 if (varonce52) {
1125 var53 = varonce52;
1126 } else {
1127 var54 = "struct ";
1128 var55 = 7;
1129 var56 = string__NativeString__to_s_with_length(var54, var55);
1130 var53 = var56;
1131 varonce52 = var53;
1132 }
1133 var57 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1134 if (varonce58) {
1135 var59 = varonce58;
1136 } else {
1137 var60 = " {";
1138 var61 = 2;
1139 var62 = string__NativeString__to_s_with_length(var60, var61);
1140 var59 = var62;
1141 varonce58 = var59;
1142 }
1143 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
1144 { /* var63 = array_instance Array[Object] */
1145 var64 = 3;
1146 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
1147 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var53;
1148 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var57;
1149 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var59;
1150 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
1151 }
1152 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
1153 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var66) /* add_decl on <var_v:CodeWriter>*/;
1154 if (varonce67) {
1155 var68 = varonce67;
1156 } else {
1157 var69 = "int classid; /* must be ";
1158 var70 = 24;
1159 var71 = string__NativeString__to_s_with_length(var69, var70);
1160 var68 = var71;
1161 varonce67 = var68;
1162 }
1163 if (varonce72) {
1164 var73 = varonce72;
1165 } else {
1166 var74 = " */";
1167 var75 = 3;
1168 var76 = string__NativeString__to_s_with_length(var74, var75);
1169 var73 = var76;
1170 varonce72 = var73;
1171 }
1172 var77 = NEW_array__Array(&type_array__Arraykernel__Object);
1173 { /* var77 = array_instance Array[Object] */
1174 var78 = 3;
1175 var79 = NEW_array__NativeArray(var78, &type_array__NativeArraykernel__Object);
1176 ((struct instance_array__NativeArray*)var79)->values[0] = (val*) var68;
1177 ((struct instance_array__NativeArray*)var79)->values[1] = (val*) var_idname;
1178 ((struct instance_array__NativeArray*)var79)->values[2] = (val*) var73;
1179 ((void (*)(val*, val*, long))(var77->class->vft[COLOR_array__Array__with_native]))(var77, var79, var78) /* with_native on <var77:Array[Object]>*/;
1180 }
1181 var80 = ((val* (*)(val*))(var77->class->vft[COLOR_string__Object__to_s]))(var77) /* to_s on <var77:Array[Object]>*/;
1182 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var80) /* add_decl on <var_v:CodeWriter>*/;
1183 var81 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
1184 var82 = ((val* (*)(val*))(var81->class->vft[COLOR_model__MClass__name]))(var81) /* name on <var81:MClass>*/;
1185 if (varonce83) {
1186 var84 = varonce83;
1187 } else {
1188 var85 = "NativeArray";
1189 var86 = 11;
1190 var87 = string__NativeString__to_s_with_length(var85, var86);
1191 var84 = var87;
1192 varonce83 = var84;
1193 }
1194 var88 = ((short int (*)(val*, val*))(var82->class->vft[COLOR_kernel__Object___61d_61d]))(var82, var84) /* == on <var82:String>*/;
1195 if (var88){
1196 var89 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
1197 var90 = ((val* (*)(val*))(var89->class->vft[COLOR_abstract_collection__Collection__first]))(var89) /* first on <var89:Array[MType]>*/;
1198 var91 = ((val* (*)(val*))(var90->class->vft[COLOR_abstract_compiler__MType__ctype]))(var90) /* ctype on <var90:nullable Object(MType)>*/;
1199 if (varonce92) {
1200 var93 = varonce92;
1201 } else {
1202 var94 = " values[1];";
1203 var95 = 11;
1204 var96 = string__NativeString__to_s_with_length(var94, var95);
1205 var93 = var96;
1206 varonce92 = var93;
1207 }
1208 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
1209 { /* var97 = array_instance Array[Object] */
1210 var98 = 2;
1211 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
1212 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var91;
1213 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var93;
1214 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
1215 }
1216 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
1217 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var100) /* add_decl on <var_v:CodeWriter>*/;
1218 } else {
1219 }
1220 var101 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1221 if (varonce102) {
1222 var103 = varonce102;
1223 } else {
1224 var104 = "val*";
1225 var105 = 4;
1226 var106 = string__NativeString__to_s_with_length(var104, var105);
1227 var103 = var106;
1228 varonce102 = var103;
1229 }
1230 var107 = ((short int (*)(val*, val*))(var101->class->vft[COLOR_kernel__Object___33d_61d]))(var101, var103) /* != on <var101:String>*/;
1231 if (var107){
1232 var108 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1233 if (varonce109) {
1234 var110 = varonce109;
1235 } else {
1236 var111 = " value;";
1237 var112 = 7;
1238 var113 = string__NativeString__to_s_with_length(var111, var112);
1239 var110 = var113;
1240 varonce109 = var110;
1241 }
1242 var114 = NEW_array__Array(&type_array__Arraykernel__Object);
1243 { /* var114 = array_instance Array[Object] */
1244 var115 = 2;
1245 var116 = NEW_array__NativeArray(var115, &type_array__NativeArraykernel__Object);
1246 ((struct instance_array__NativeArray*)var116)->values[0] = (val*) var108;
1247 ((struct instance_array__NativeArray*)var116)->values[1] = (val*) var110;
1248 ((void (*)(val*, val*, long))(var114->class->vft[COLOR_array__Array__with_native]))(var114, var116, var115) /* with_native on <var114:Array[Object]>*/;
1249 }
1250 var117 = ((val* (*)(val*))(var114->class->vft[COLOR_string__Object__to_s]))(var114) /* to_s on <var114:Array[Object]>*/;
1251 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var117) /* add_decl on <var_v:CodeWriter>*/;
1252 } else {
1253 }
1254 var118 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:GlobalCompiler>*/;
1255 var119 = ((val* (*)(val*, val*))(var_mtype->class->vft[COLOR_model__MType__collect_mclassdefs]))(var_mtype, var118) /* collect_mclassdefs on <var_mtype:MClassType>*/;
1256 var120 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_collection__Collection__iterator]))(var119) /* iterator on <var119:Set[MClassDef]>*/;
1257 for(;;) {
1258 var121 = ((short int (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var120) /* is_ok on <var120:Iterator[nullable Object]>*/;
1259 if(!var121) break;
1260 var122 = ((val* (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__item]))(var120) /* item on <var120:Iterator[nullable Object]>*/;
1261 var_cd = var122;
1262 var123 = ((val* (*)(val*))(var_cd->class->vft[COLOR_model__MClassDef__intro_mproperties]))(var_cd) /* intro_mproperties on <var_cd:MClassDef>*/;
1263 var124 = ((val* (*)(val*))(var123->class->vft[COLOR_abstract_collection__Collection__iterator]))(var123) /* iterator on <var123:Array[MProperty]>*/;
1264 for(;;) {
1265 var125 = ((short int (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var124) /* is_ok on <var124:Iterator[nullable Object]>*/;
1266 if(!var125) break;
1267 var126 = ((val* (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__item]))(var124) /* item on <var124:Iterator[nullable Object]>*/;
1268 var_p = var126;
1269 /* <var_p:MProperty> isa MAttribute */
1270 cltype = type_model__MAttribute.color;
1271 idtype = type_model__MAttribute.id;
1272 if(cltype >= var_p->type->table_size) {
1273 var127 = 0;
1274 } else {
1275 var127 = var_p->type->type_table[cltype] == idtype;
1276 }
1277 var128 = !var127;
1278 if (var128){
1279 goto CONTINUE_label;
1280 } else {
1281 }
1282 var129 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MProperty__intro]))(var_p) /* intro on <var_p:MProperty(MAttribute)>*/;
1283 var130 = ((val* (*)(val*))(var129->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var129) /* static_mtype on <var129:MPropDef(MAttributeDef)>*/;
1284 if (var130 == NULL) {
1285 fprintf(stderr, "Runtime error: %s", "Cast failed");
1286 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 183);
1287 show_backtrace(1);
1288 }
1289 var_t = var130;
1290 var131 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:GlobalCompiler>*/;
1291 var132 = ((val* (*)(val*, val*, val*))(var_t->class->vft[COLOR_model__MType__anchor_to]))(var_t, var131, var_mtype) /* anchor_to on <var_t:MType>*/;
1292 var_t = var132;
1293 var133 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MType>*/;
1294 if (varonce134) {
1295 var135 = varonce134;
1296 } else {
1297 var136 = " ";
1298 var137 = 1;
1299 var138 = string__NativeString__to_s_with_length(var136, var137);
1300 var135 = var138;
1301 varonce134 = var135;
1302 }
1303 var139 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MProperty__intro]))(var_p) /* intro on <var_p:MProperty(MAttribute)>*/;
1304 var140 = ((val* (*)(val*))(var139->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var139) /* c_name on <var139:MPropDef(MAttributeDef)>*/;
1305 if (varonce141) {
1306 var142 = varonce141;
1307 } else {
1308 var143 = "; /* ";
1309 var144 = 5;
1310 var145 = string__NativeString__to_s_with_length(var143, var144);
1311 var142 = var145;
1312 varonce141 = var142;
1313 }
1314 if (varonce146) {
1315 var147 = varonce146;
1316 } else {
1317 var148 = ": ";
1318 var149 = 2;
1319 var150 = string__NativeString__to_s_with_length(var148, var149);
1320 var147 = var150;
1321 varonce146 = var147;
1322 }
1323 if (varonce151) {
1324 var152 = varonce151;
1325 } else {
1326 var153 = " */";
1327 var154 = 3;
1328 var155 = string__NativeString__to_s_with_length(var153, var154);
1329 var152 = var155;
1330 varonce151 = var152;
1331 }
1332 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
1333 { /* var156 = array_instance Array[Object] */
1334 var157 = 8;
1335 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
1336 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var133;
1337 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var135;
1338 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var140;
1339 ((struct instance_array__NativeArray*)var158)->values[3] = (val*) var142;
1340 ((struct instance_array__NativeArray*)var158)->values[4] = (val*) var_p;
1341 ((struct instance_array__NativeArray*)var158)->values[5] = (val*) var147;
1342 ((struct instance_array__NativeArray*)var158)->values[6] = (val*) var_t;
1343 ((struct instance_array__NativeArray*)var158)->values[7] = (val*) var152;
1344 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
1345 }
1346 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
1347 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var159) /* add_decl on <var_v:CodeWriter>*/;
1348 CONTINUE_label: (void)0;
1349 ((void (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__next]))(var124) /* next on <var124:Iterator[nullable Object]>*/;
1350 }
1351 BREAK_label: (void)0;
1352 CONTINUE_label160: (void)0;
1353 ((void (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__next]))(var120) /* next on <var120:Iterator[nullable Object]>*/;
1354 }
1355 BREAK_label160: (void)0;
1356 if (varonce161) {
1357 var162 = varonce161;
1358 } else {
1359 var163 = "};";
1360 var164 = 2;
1361 var165 = string__NativeString__to_s_with_length(var163, var164);
1362 var162 = var165;
1363 varonce161 = var162;
1364 }
1365 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var162) /* add_decl on <var_v:CodeWriter>*/;
1366 RET_LABEL:;
1367 }
1368 /* method global_compiler#GlobalCompiler#declare_runtimeclass for (self: Object, MClassType) */
1369 void VIRTUAL_global_compiler__GlobalCompiler__declare_runtimeclass(val* self, val* p0) {
1370 global_compiler__GlobalCompiler__declare_runtimeclass(self, p0);
1371 RET_LABEL:;
1372 }
1373 /* method global_compiler#GlobalCompiler#generate_init_instance for (self: GlobalCompiler, MClassType) */
1374 void global_compiler__GlobalCompiler__generate_init_instance(val* self, val* p0) {
1375 val* var_mtype /* var mtype: MClassType */;
1376 val* var /* : RapidTypeAnalysis */;
1377 val* var1 /* : HashSet[MClassType] */;
1378 short int var2 /* : Bool */;
1379 val* var3 /* : String */;
1380 static val* varonce;
1381 val* var4 /* : String */;
1382 char* var5 /* : NativeString */;
1383 long var6 /* : Int */;
1384 val* var7 /* : String */;
1385 short int var8 /* : Bool */;
1386 val* var9 /* : AbstractCompilerVisitor */;
1387 val* var_v /* var v: GlobalCompilerVisitor */;
1388 val* var10 /* : MClass */;
1389 val* var11 /* : String */;
1390 static val* varonce12;
1391 val* var13 /* : String */;
1392 char* var14 /* : NativeString */;
1393 long var15 /* : Int */;
1394 val* var16 /* : String */;
1395 short int var17 /* : Bool */;
1396 short int var_is_native_array /* var is_native_array: Bool */;
1397 static val* varonce18;
1398 val* var19 /* : String */;
1399 char* var20 /* : NativeString */;
1400 long var21 /* : Int */;
1401 val* var22 /* : String */;
1402 val* var_sig /* var sig: nullable Object */;
1403 static val* varonce23;
1404 val* var24 /* : String */;
1405 char* var25 /* : NativeString */;
1406 long var26 /* : Int */;
1407 val* var27 /* : String */;
1408 val* var28 /* : CodeWriter */;
1409 val* var29 /* : String */;
1410 static val* varonce30;
1411 val* var31 /* : String */;
1412 char* var32 /* : NativeString */;
1413 long var33 /* : Int */;
1414 val* var34 /* : String */;
1415 val* var35 /* : String */;
1416 static val* varonce36;
1417 val* var37 /* : String */;
1418 char* var38 /* : NativeString */;
1419 long var39 /* : Int */;
1420 val* var40 /* : String */;
1421 static val* varonce41;
1422 val* var42 /* : String */;
1423 char* var43 /* : NativeString */;
1424 long var44 /* : Int */;
1425 val* var45 /* : String */;
1426 val* var46 /* : Array[Object] */;
1427 long var47 /* : Int */;
1428 val* var48 /* : NativeArray[Object] */;
1429 val* var49 /* : String */;
1430 static val* varonce50;
1431 val* var51 /* : String */;
1432 char* var52 /* : NativeString */;
1433 long var53 /* : Int */;
1434 val* var54 /* : String */;
1435 static val* varonce55;
1436 val* var56 /* : String */;
1437 char* var57 /* : NativeString */;
1438 long var58 /* : Int */;
1439 val* var59 /* : String */;
1440 val* var60 /* : Array[Object] */;
1441 long var61 /* : Int */;
1442 val* var62 /* : NativeArray[Object] */;
1443 val* var63 /* : String */;
1444 val* var64 /* : String */;
1445 static val* varonce65;
1446 val* var66 /* : String */;
1447 char* var67 /* : NativeString */;
1448 long var68 /* : Int */;
1449 val* var69 /* : String */;
1450 val* var70 /* : String */;
1451 static val* varonce71;
1452 val* var72 /* : String */;
1453 char* var73 /* : NativeString */;
1454 long var74 /* : Int */;
1455 val* var75 /* : String */;
1456 static val* varonce76;
1457 val* var77 /* : String */;
1458 char* var78 /* : NativeString */;
1459 long var79 /* : Int */;
1460 val* var80 /* : String */;
1461 val* var81 /* : Array[Object] */;
1462 long var82 /* : Int */;
1463 val* var83 /* : NativeArray[Object] */;
1464 val* var84 /* : String */;
1465 val* var85 /* : RuntimeVariable */;
1466 val* var_res /* var res: RuntimeVariable */;
1467 short int var86 /* : Bool */;
1468 val* var87 /* : Array[MType] */;
1469 val* var88 /* : nullable Object */;
1470 val* var_mtype_elt /* var mtype_elt: MType */;
1471 static val* varonce89;
1472 val* var90 /* : String */;
1473 char* var91 /* : NativeString */;
1474 long var92 /* : Int */;
1475 val* var93 /* : String */;
1476 val* var94 /* : String */;
1477 static val* varonce95;
1478 val* var96 /* : String */;
1479 char* var97 /* : NativeString */;
1480 long var98 /* : Int */;
1481 val* var99 /* : String */;
1482 val* var100 /* : String */;
1483 static val* varonce101;
1484 val* var102 /* : String */;
1485 char* var103 /* : NativeString */;
1486 long var104 /* : Int */;
1487 val* var105 /* : String */;
1488 val* var106 /* : Array[Object] */;
1489 long var107 /* : Int */;
1490 val* var108 /* : NativeArray[Object] */;
1491 val* var109 /* : String */;
1492 static val* varonce110;
1493 val* var111 /* : String */;
1494 char* var112 /* : NativeString */;
1495 long var113 /* : Int */;
1496 val* var114 /* : String */;
1497 val* var115 /* : String */;
1498 static val* varonce116;
1499 val* var117 /* : String */;
1500 char* var118 /* : NativeString */;
1501 long var119 /* : Int */;
1502 val* var120 /* : String */;
1503 val* var121 /* : Array[Object] */;
1504 long var122 /* : Int */;
1505 val* var123 /* : NativeArray[Object] */;
1506 val* var124 /* : String */;
1507 static val* varonce125;
1508 val* var126 /* : String */;
1509 char* var127 /* : NativeString */;
1510 long var128 /* : Int */;
1511 val* var129 /* : String */;
1512 val* var130 /* : String */;
1513 static val* varonce131;
1514 val* var132 /* : String */;
1515 char* var133 /* : NativeString */;
1516 long var134 /* : Int */;
1517 val* var135 /* : String */;
1518 val* var136 /* : Array[Object] */;
1519 long var137 /* : Int */;
1520 val* var138 /* : NativeArray[Object] */;
1521 val* var139 /* : String */;
1522 static val* varonce140;
1523 val* var141 /* : String */;
1524 char* var142 /* : NativeString */;
1525 long var143 /* : Int */;
1526 val* var144 /* : String */;
1527 static val* varonce145;
1528 val* var146 /* : String */;
1529 char* var147 /* : NativeString */;
1530 long var148 /* : Int */;
1531 val* var149 /* : String */;
1532 val* var150 /* : Array[Object] */;
1533 long var151 /* : Int */;
1534 val* var152 /* : NativeArray[Object] */;
1535 val* var153 /* : String */;
1536 static val* varonce154;
1537 val* var155 /* : String */;
1538 char* var156 /* : NativeString */;
1539 long var157 /* : Int */;
1540 val* var158 /* : String */;
1541 var_mtype = p0;
1542 var = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
1543 var1 = ((val* (*)(val*))(var->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var) /* live_types on <var:RapidTypeAnalysis>*/;
1544 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__Collection__has]))(var1, var_mtype) /* has on <var1:HashSet[MClassType]>*/;
1545 if (!var2) {
1546 fprintf(stderr, "Runtime error: %s", "Assert failed");
1547 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 194);
1548 show_backtrace(1);
1549 }
1550 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1551 if (varonce) {
1552 var4 = varonce;
1553 } else {
1554 var5 = "val*";
1555 var6 = 4;
1556 var7 = string__NativeString__to_s_with_length(var5, var6);
1557 var4 = var7;
1558 varonce = var4;
1559 }
1560 var8 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_kernel__Object___61d_61d]))(var3, var4) /* == on <var3:String>*/;
1561 if (!var8) {
1562 fprintf(stderr, "Runtime error: %s", "Assert failed");
1563 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 195);
1564 show_backtrace(1);
1565 }
1566 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
1567 var_v = var9;
1568 var10 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
1569 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_model__MClass__name]))(var10) /* name on <var10:MClass>*/;
1570 if (varonce12) {
1571 var13 = varonce12;
1572 } else {
1573 var14 = "NativeArray";
1574 var15 = 11;
1575 var16 = string__NativeString__to_s_with_length(var14, var15);
1576 var13 = var16;
1577 varonce12 = var13;
1578 }
1579 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
1580 var_is_native_array = var17;
1581 if (var_is_native_array){
1582 if (varonce18) {
1583 var19 = varonce18;
1584 } else {
1585 var20 = "int length";
1586 var21 = 10;
1587 var22 = string__NativeString__to_s_with_length(var20, var21);
1588 var19 = var22;
1589 varonce18 = var19;
1590 }
1591 var_sig = var19;
1592 } else {
1593 if (varonce23) {
1594 var24 = varonce23;
1595 } else {
1596 var25 = "void";
1597 var26 = 4;
1598 var27 = string__NativeString__to_s_with_length(var25, var26);
1599 var24 = var27;
1600 varonce23 = var24;
1601 }
1602 var_sig = var24;
1603 }
1604 var28 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
1605 var29 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1606 if (varonce30) {
1607 var31 = varonce30;
1608 } else {
1609 var32 = " NEW_";
1610 var33 = 5;
1611 var34 = string__NativeString__to_s_with_length(var32, var33);
1612 var31 = var34;
1613 varonce30 = var31;
1614 }
1615 var35 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1616 if (varonce36) {
1617 var37 = varonce36;
1618 } else {
1619 var38 = "(";
1620 var39 = 1;
1621 var40 = string__NativeString__to_s_with_length(var38, var39);
1622 var37 = var40;
1623 varonce36 = var37;
1624 }
1625 if (varonce41) {
1626 var42 = varonce41;
1627 } else {
1628 var43 = ");";
1629 var44 = 2;
1630 var45 = string__NativeString__to_s_with_length(var43, var44);
1631 var42 = var45;
1632 varonce41 = var42;
1633 }
1634 var46 = NEW_array__Array(&type_array__Arraykernel__Object);
1635 { /* var46 = array_instance Array[Object] */
1636 var47 = 6;
1637 var48 = NEW_array__NativeArray(var47, &type_array__NativeArraykernel__Object);
1638 ((struct instance_array__NativeArray*)var48)->values[0] = (val*) var29;
1639 ((struct instance_array__NativeArray*)var48)->values[1] = (val*) var31;
1640 ((struct instance_array__NativeArray*)var48)->values[2] = (val*) var35;
1641 ((struct instance_array__NativeArray*)var48)->values[3] = (val*) var37;
1642 ((struct instance_array__NativeArray*)var48)->values[4] = (val*) var_sig;
1643 ((struct instance_array__NativeArray*)var48)->values[5] = (val*) var42;
1644 ((void (*)(val*, val*, long))(var46->class->vft[COLOR_array__Array__with_native]))(var46, var48, var47) /* with_native on <var46:Array[Object]>*/;
1645 }
1646 var49 = ((val* (*)(val*))(var46->class->vft[COLOR_string__Object__to_s]))(var46) /* to_s on <var46:Array[Object]>*/;
1647 ((void (*)(val*, val*))(var28->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var28, var49) /* add_decl on <var28:CodeWriter>*/;
1648 if (varonce50) {
1649 var51 = varonce50;
1650 } else {
1651 var52 = "/* allocate ";
1652 var53 = 12;
1653 var54 = string__NativeString__to_s_with_length(var52, var53);
1654 var51 = var54;
1655 varonce50 = var51;
1656 }
1657 if (varonce55) {
1658 var56 = varonce55;
1659 } else {
1660 var57 = " */";
1661 var58 = 3;
1662 var59 = string__NativeString__to_s_with_length(var57, var58);
1663 var56 = var59;
1664 varonce55 = var56;
1665 }
1666 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
1667 { /* var60 = array_instance Array[Object] */
1668 var61 = 3;
1669 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
1670 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var51;
1671 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_mtype;
1672 ((struct instance_array__NativeArray*)var62)->values[2] = (val*) var56;
1673 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
1674 }
1675 var63 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
1676 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var63) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
1677 var64 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1678 if (varonce65) {
1679 var66 = varonce65;
1680 } else {
1681 var67 = " NEW_";
1682 var68 = 5;
1683 var69 = string__NativeString__to_s_with_length(var67, var68);
1684 var66 = var69;
1685 varonce65 = var66;
1686 }
1687 var70 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1688 if (varonce71) {
1689 var72 = varonce71;
1690 } else {
1691 var73 = "(";
1692 var74 = 1;
1693 var75 = string__NativeString__to_s_with_length(var73, var74);
1694 var72 = var75;
1695 varonce71 = var72;
1696 }
1697 if (varonce76) {
1698 var77 = varonce76;
1699 } else {
1700 var78 = ") {";
1701 var79 = 3;
1702 var80 = string__NativeString__to_s_with_length(var78, var79);
1703 var77 = var80;
1704 varonce76 = var77;
1705 }
1706 var81 = NEW_array__Array(&type_array__Arraykernel__Object);
1707 { /* var81 = array_instance Array[Object] */
1708 var82 = 6;
1709 var83 = NEW_array__NativeArray(var82, &type_array__NativeArraykernel__Object);
1710 ((struct instance_array__NativeArray*)var83)->values[0] = (val*) var64;
1711 ((struct instance_array__NativeArray*)var83)->values[1] = (val*) var66;
1712 ((struct instance_array__NativeArray*)var83)->values[2] = (val*) var70;
1713 ((struct instance_array__NativeArray*)var83)->values[3] = (val*) var72;
1714 ((struct instance_array__NativeArray*)var83)->values[4] = (val*) var_sig;
1715 ((struct instance_array__NativeArray*)var83)->values[5] = (val*) var77;
1716 ((void (*)(val*, val*, long))(var81->class->vft[COLOR_array__Array__with_native]))(var81, var83, var82) /* with_native on <var81:Array[Object]>*/;
1717 }
1718 var84 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__to_s]))(var81) /* to_s on <var81:Array[Object]>*/;
1719 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var84) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
1720 var85 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(var_v, var_mtype) /* new_var on <var_v:GlobalCompilerVisitor>*/;
1721 var_res = var85;
1722 var86 = 1;
1723 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var86) /* is_exact= on <var_res:RuntimeVariable>*/;
1724 if (var_is_native_array){
1725 var87 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
1726 var88 = ((val* (*)(val*))(var87->class->vft[COLOR_abstract_collection__Collection__first]))(var87) /* first on <var87:Array[MType]>*/;
1727 var_mtype_elt = var88;
1728 if (varonce89) {
1729 var90 = varonce89;
1730 } else {
1731 var91 = " = nit_alloc(sizeof(struct ";
1732 var92 = 27;
1733 var93 = string__NativeString__to_s_with_length(var91, var92);
1734 var90 = var93;
1735 varonce89 = var90;
1736 }
1737 var94 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1738 if (varonce95) {
1739 var96 = varonce95;
1740 } else {
1741 var97 = ") + length*sizeof(";
1742 var98 = 18;
1743 var99 = string__NativeString__to_s_with_length(var97, var98);
1744 var96 = var99;
1745 varonce95 = var96;
1746 }
1747 var100 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
1748 if (varonce101) {
1749 var102 = varonce101;
1750 } else {
1751 var103 = "));";
1752 var104 = 3;
1753 var105 = string__NativeString__to_s_with_length(var103, var104);
1754 var102 = var105;
1755 varonce101 = var102;
1756 }
1757 var106 = NEW_array__Array(&type_array__Arraykernel__Object);
1758 { /* var106 = array_instance Array[Object] */
1759 var107 = 6;
1760 var108 = NEW_array__NativeArray(var107, &type_array__NativeArraykernel__Object);
1761 ((struct instance_array__NativeArray*)var108)->values[0] = (val*) var_res;
1762 ((struct instance_array__NativeArray*)var108)->values[1] = (val*) var90;
1763 ((struct instance_array__NativeArray*)var108)->values[2] = (val*) var94;
1764 ((struct instance_array__NativeArray*)var108)->values[3] = (val*) var96;
1765 ((struct instance_array__NativeArray*)var108)->values[4] = (val*) var100;
1766 ((struct instance_array__NativeArray*)var108)->values[5] = (val*) var102;
1767 ((void (*)(val*, val*, long))(var106->class->vft[COLOR_array__Array__with_native]))(var106, var108, var107) /* with_native on <var106:Array[Object]>*/;
1768 }
1769 var109 = ((val* (*)(val*))(var106->class->vft[COLOR_string__Object__to_s]))(var106) /* to_s on <var106:Array[Object]>*/;
1770 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var109) /* add on <var_v:GlobalCompilerVisitor>*/;
1771 } else {
1772 if (varonce110) {
1773 var111 = varonce110;
1774 } else {
1775 var112 = " = nit_alloc(sizeof(struct ";
1776 var113 = 27;
1777 var114 = string__NativeString__to_s_with_length(var112, var113);
1778 var111 = var114;
1779 varonce110 = var111;
1780 }
1781 var115 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1782 if (varonce116) {
1783 var117 = varonce116;
1784 } else {
1785 var118 = "));";
1786 var119 = 3;
1787 var120 = string__NativeString__to_s_with_length(var118, var119);
1788 var117 = var120;
1789 varonce116 = var117;
1790 }
1791 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
1792 { /* var121 = array_instance Array[Object] */
1793 var122 = 4;
1794 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
1795 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var_res;
1796 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var111;
1797 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var115;
1798 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var117;
1799 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
1800 }
1801 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
1802 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var124) /* add on <var_v:GlobalCompilerVisitor>*/;
1803 }
1804 if (varonce125) {
1805 var126 = varonce125;
1806 } else {
1807 var127 = "->classid = ";
1808 var128 = 12;
1809 var129 = string__NativeString__to_s_with_length(var127, var128);
1810 var126 = var129;
1811 varonce125 = var126;
1812 }
1813 var130 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(self, var_mtype) /* classid on <self:GlobalCompiler>*/;
1814 if (varonce131) {
1815 var132 = varonce131;
1816 } else {
1817 var133 = ";";
1818 var134 = 1;
1819 var135 = string__NativeString__to_s_with_length(var133, var134);
1820 var132 = var135;
1821 varonce131 = var132;
1822 }
1823 var136 = NEW_array__Array(&type_array__Arraykernel__Object);
1824 { /* var136 = array_instance Array[Object] */
1825 var137 = 4;
1826 var138 = NEW_array__NativeArray(var137, &type_array__NativeArraykernel__Object);
1827 ((struct instance_array__NativeArray*)var138)->values[0] = (val*) var_res;
1828 ((struct instance_array__NativeArray*)var138)->values[1] = (val*) var126;
1829 ((struct instance_array__NativeArray*)var138)->values[2] = (val*) var130;
1830 ((struct instance_array__NativeArray*)var138)->values[3] = (val*) var132;
1831 ((void (*)(val*, val*, long))(var136->class->vft[COLOR_array__Array__with_native]))(var136, var138, var137) /* with_native on <var136:Array[Object]>*/;
1832 }
1833 var139 = ((val* (*)(val*))(var136->class->vft[COLOR_string__Object__to_s]))(var136) /* to_s on <var136:Array[Object]>*/;
1834 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var139) /* add on <var_v:GlobalCompilerVisitor>*/;
1835 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_init_attr]))(self, var_v, var_res, var_mtype) /* generate_init_attr on <self:GlobalCompiler>*/;
1836 if (varonce140) {
1837 var141 = varonce140;
1838 } else {
1839 var142 = "return ";
1840 var143 = 7;
1841 var144 = string__NativeString__to_s_with_length(var142, var143);
1842 var141 = var144;
1843 varonce140 = var141;
1844 }
1845 if (varonce145) {
1846 var146 = varonce145;
1847 } else {
1848 var147 = ";";
1849 var148 = 1;
1850 var149 = string__NativeString__to_s_with_length(var147, var148);
1851 var146 = var149;
1852 varonce145 = var146;
1853 }
1854 var150 = NEW_array__Array(&type_array__Arraykernel__Object);
1855 { /* var150 = array_instance Array[Object] */
1856 var151 = 3;
1857 var152 = NEW_array__NativeArray(var151, &type_array__NativeArraykernel__Object);
1858 ((struct instance_array__NativeArray*)var152)->values[0] = (val*) var141;
1859 ((struct instance_array__NativeArray*)var152)->values[1] = (val*) var_res;
1860 ((struct instance_array__NativeArray*)var152)->values[2] = (val*) var146;
1861 ((void (*)(val*, val*, long))(var150->class->vft[COLOR_array__Array__with_native]))(var150, var152, var151) /* with_native on <var150:Array[Object]>*/;
1862 }
1863 var153 = ((val* (*)(val*))(var150->class->vft[COLOR_string__Object__to_s]))(var150) /* to_s on <var150:Array[Object]>*/;
1864 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var153) /* add on <var_v:GlobalCompilerVisitor>*/;
1865 if (varonce154) {
1866 var155 = varonce154;
1867 } else {
1868 var156 = "}";
1869 var157 = 1;
1870 var158 = string__NativeString__to_s_with_length(var156, var157);
1871 var155 = var158;
1872 varonce154 = var155;
1873 }
1874 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var155) /* add on <var_v:GlobalCompilerVisitor>*/;
1875 RET_LABEL:;
1876 }
1877 /* method global_compiler#GlobalCompiler#generate_init_instance for (self: Object, MClassType) */
1878 void VIRTUAL_global_compiler__GlobalCompiler__generate_init_instance(val* self, val* p0) {
1879 global_compiler__GlobalCompiler__generate_init_instance(self, p0);
1880 RET_LABEL:;
1881 }
1882 /* method global_compiler#GlobalCompiler#generate_box_instance for (self: GlobalCompiler, MClassType) */
1883 void global_compiler__GlobalCompiler__generate_box_instance(val* self, val* p0) {
1884 val* var_mtype /* var mtype: MClassType */;
1885 val* var /* : RapidTypeAnalysis */;
1886 val* var1 /* : HashSet[MClassType] */;
1887 short int var2 /* : Bool */;
1888 val* var3 /* : String */;
1889 static val* varonce;
1890 val* var4 /* : String */;
1891 char* var5 /* : NativeString */;
1892 long var6 /* : Int */;
1893 val* var7 /* : String */;
1894 short int var8 /* : Bool */;
1895 val* var9 /* : AbstractCompilerVisitor */;
1896 val* var_v /* var v: GlobalCompilerVisitor */;
1897 val* var10 /* : CodeWriter */;
1898 static val* varonce11;
1899 val* var12 /* : String */;
1900 char* var13 /* : NativeString */;
1901 long var14 /* : Int */;
1902 val* var15 /* : String */;
1903 val* var16 /* : String */;
1904 static val* varonce17;
1905 val* var18 /* : String */;
1906 char* var19 /* : NativeString */;
1907 long var20 /* : Int */;
1908 val* var21 /* : String */;
1909 val* var22 /* : String */;
1910 static val* varonce23;
1911 val* var24 /* : String */;
1912 char* var25 /* : NativeString */;
1913 long var26 /* : Int */;
1914 val* var27 /* : String */;
1915 val* var28 /* : Array[Object] */;
1916 long var29 /* : Int */;
1917 val* var30 /* : NativeArray[Object] */;
1918 val* var31 /* : String */;
1919 static val* varonce32;
1920 val* var33 /* : String */;
1921 char* var34 /* : NativeString */;
1922 long var35 /* : Int */;
1923 val* var36 /* : String */;
1924 static val* varonce37;
1925 val* var38 /* : String */;
1926 char* var39 /* : NativeString */;
1927 long var40 /* : Int */;
1928 val* var41 /* : String */;
1929 val* var42 /* : Array[Object] */;
1930 long var43 /* : Int */;
1931 val* var44 /* : NativeArray[Object] */;
1932 val* var45 /* : String */;
1933 static val* varonce46;
1934 val* var47 /* : String */;
1935 char* var48 /* : NativeString */;
1936 long var49 /* : Int */;
1937 val* var50 /* : String */;
1938 val* var51 /* : String */;
1939 static val* varonce52;
1940 val* var53 /* : String */;
1941 char* var54 /* : NativeString */;
1942 long var55 /* : Int */;
1943 val* var56 /* : String */;
1944 val* var57 /* : String */;
1945 static val* varonce58;
1946 val* var59 /* : String */;
1947 char* var60 /* : NativeString */;
1948 long var61 /* : Int */;
1949 val* var62 /* : String */;
1950 val* var63 /* : Array[Object] */;
1951 long var64 /* : Int */;
1952 val* var65 /* : NativeArray[Object] */;
1953 val* var66 /* : String */;
1954 static val* varonce67;
1955 val* var68 /* : String */;
1956 char* var69 /* : NativeString */;
1957 long var70 /* : Int */;
1958 val* var71 /* : String */;
1959 val* var72 /* : String */;
1960 static val* varonce73;
1961 val* var74 /* : String */;
1962 char* var75 /* : NativeString */;
1963 long var76 /* : Int */;
1964 val* var77 /* : String */;
1965 val* var78 /* : String */;
1966 static val* varonce79;
1967 val* var80 /* : String */;
1968 char* var81 /* : NativeString */;
1969 long var82 /* : Int */;
1970 val* var83 /* : String */;
1971 val* var84 /* : Array[Object] */;
1972 long var85 /* : Int */;
1973 val* var86 /* : NativeArray[Object] */;
1974 val* var87 /* : String */;
1975 static val* varonce88;
1976 val* var89 /* : String */;
1977 char* var90 /* : NativeString */;
1978 long var91 /* : Int */;
1979 val* var92 /* : String */;
1980 val* var93 /* : String */;
1981 static val* varonce94;
1982 val* var95 /* : String */;
1983 char* var96 /* : NativeString */;
1984 long var97 /* : Int */;
1985 val* var98 /* : String */;
1986 val* var99 /* : Array[Object] */;
1987 long var100 /* : Int */;
1988 val* var101 /* : NativeArray[Object] */;
1989 val* var102 /* : String */;
1990 static val* varonce103;
1991 val* var104 /* : String */;
1992 char* var105 /* : NativeString */;
1993 long var106 /* : Int */;
1994 val* var107 /* : String */;
1995 static val* varonce108;
1996 val* var109 /* : String */;
1997 char* var110 /* : NativeString */;
1998 long var111 /* : Int */;
1999 val* var112 /* : String */;
2000 static val* varonce113;
2001 val* var114 /* : String */;
2002 char* var115 /* : NativeString */;
2003 long var116 /* : Int */;
2004 val* var117 /* : String */;
2005 var_mtype = p0;
2006 var = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
2007 var1 = ((val* (*)(val*))(var->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var) /* live_types on <var:RapidTypeAnalysis>*/;
2008 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__Collection__has]))(var1, var_mtype) /* has on <var1:HashSet[MClassType]>*/;
2009 if (!var2) {
2010 fprintf(stderr, "Runtime error: %s", "Assert failed");
2011 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 227);
2012 show_backtrace(1);
2013 }
2014 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2015 if (varonce) {
2016 var4 = varonce;
2017 } else {
2018 var5 = "val*";
2019 var6 = 4;
2020 var7 = string__NativeString__to_s_with_length(var5, var6);
2021 var4 = var7;
2022 varonce = var4;
2023 }
2024 var8 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_kernel__Object___33d_61d]))(var3, var4) /* != on <var3:String>*/;
2025 if (!var8) {
2026 fprintf(stderr, "Runtime error: %s", "Assert failed");
2027 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 228);
2028 show_backtrace(1);
2029 }
2030 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
2031 var_v = var9;
2032 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
2033 if (varonce11) {
2034 var12 = varonce11;
2035 } else {
2036 var13 = "val* BOX_";
2037 var14 = 9;
2038 var15 = string__NativeString__to_s_with_length(var13, var14);
2039 var12 = var15;
2040 varonce11 = var12;
2041 }
2042 var16 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2043 if (varonce17) {
2044 var18 = varonce17;
2045 } else {
2046 var19 = "(";
2047 var20 = 1;
2048 var21 = string__NativeString__to_s_with_length(var19, var20);
2049 var18 = var21;
2050 varonce17 = var18;
2051 }
2052 var22 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2053 if (varonce23) {
2054 var24 = varonce23;
2055 } else {
2056 var25 = ");";
2057 var26 = 2;
2058 var27 = string__NativeString__to_s_with_length(var25, var26);
2059 var24 = var27;
2060 varonce23 = var24;
2061 }
2062 var28 = NEW_array__Array(&type_array__Arraykernel__Object);
2063 { /* var28 = array_instance Array[Object] */
2064 var29 = 5;
2065 var30 = NEW_array__NativeArray(var29, &type_array__NativeArraykernel__Object);
2066 ((struct instance_array__NativeArray*)var30)->values[0] = (val*) var12;
2067 ((struct instance_array__NativeArray*)var30)->values[1] = (val*) var16;
2068 ((struct instance_array__NativeArray*)var30)->values[2] = (val*) var18;
2069 ((struct instance_array__NativeArray*)var30)->values[3] = (val*) var22;
2070 ((struct instance_array__NativeArray*)var30)->values[4] = (val*) var24;
2071 ((void (*)(val*, val*, long))(var28->class->vft[COLOR_array__Array__with_native]))(var28, var30, var29) /* with_native on <var28:Array[Object]>*/;
2072 }
2073 var31 = ((val* (*)(val*))(var28->class->vft[COLOR_string__Object__to_s]))(var28) /* to_s on <var28:Array[Object]>*/;
2074 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var10, var31) /* add_decl on <var10:CodeWriter>*/;
2075 if (varonce32) {
2076 var33 = varonce32;
2077 } else {
2078 var34 = "/* allocate ";
2079 var35 = 12;
2080 var36 = string__NativeString__to_s_with_length(var34, var35);
2081 var33 = var36;
2082 varonce32 = var33;
2083 }
2084 if (varonce37) {
2085 var38 = varonce37;
2086 } else {
2087 var39 = " */";
2088 var40 = 3;
2089 var41 = string__NativeString__to_s_with_length(var39, var40);
2090 var38 = var41;
2091 varonce37 = var38;
2092 }
2093 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
2094 { /* var42 = array_instance Array[Object] */
2095 var43 = 3;
2096 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
2097 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var33;
2098 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_mtype;
2099 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var38;
2100 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
2101 }
2102 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
2103 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var45) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2104 if (varonce46) {
2105 var47 = varonce46;
2106 } else {
2107 var48 = "val* BOX_";
2108 var49 = 9;
2109 var50 = string__NativeString__to_s_with_length(var48, var49);
2110 var47 = var50;
2111 varonce46 = var47;
2112 }
2113 var51 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2114 if (varonce52) {
2115 var53 = varonce52;
2116 } else {
2117 var54 = "(";
2118 var55 = 1;
2119 var56 = string__NativeString__to_s_with_length(var54, var55);
2120 var53 = var56;
2121 varonce52 = var53;
2122 }
2123 var57 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2124 if (varonce58) {
2125 var59 = varonce58;
2126 } else {
2127 var60 = " value) {";
2128 var61 = 9;
2129 var62 = string__NativeString__to_s_with_length(var60, var61);
2130 var59 = var62;
2131 varonce58 = var59;
2132 }
2133 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
2134 { /* var63 = array_instance Array[Object] */
2135 var64 = 5;
2136 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
2137 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var47;
2138 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var51;
2139 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var53;
2140 ((struct instance_array__NativeArray*)var65)->values[3] = (val*) var57;
2141 ((struct instance_array__NativeArray*)var65)->values[4] = (val*) var59;
2142 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
2143 }
2144 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
2145 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var66) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2146 if (varonce67) {
2147 var68 = varonce67;
2148 } else {
2149 var69 = "struct ";
2150 var70 = 7;
2151 var71 = string__NativeString__to_s_with_length(var69, var70);
2152 var68 = var71;
2153 varonce67 = var68;
2154 }
2155 var72 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2156 if (varonce73) {
2157 var74 = varonce73;
2158 } else {
2159 var75 = "*res = nit_alloc(sizeof(struct ";
2160 var76 = 31;
2161 var77 = string__NativeString__to_s_with_length(var75, var76);
2162 var74 = var77;
2163 varonce73 = var74;
2164 }
2165 var78 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2166 if (varonce79) {
2167 var80 = varonce79;
2168 } else {
2169 var81 = "));";
2170 var82 = 3;
2171 var83 = string__NativeString__to_s_with_length(var81, var82);
2172 var80 = var83;
2173 varonce79 = var80;
2174 }
2175 var84 = NEW_array__Array(&type_array__Arraykernel__Object);
2176 { /* var84 = array_instance Array[Object] */
2177 var85 = 5;
2178 var86 = NEW_array__NativeArray(var85, &type_array__NativeArraykernel__Object);
2179 ((struct instance_array__NativeArray*)var86)->values[0] = (val*) var68;
2180 ((struct instance_array__NativeArray*)var86)->values[1] = (val*) var72;
2181 ((struct instance_array__NativeArray*)var86)->values[2] = (val*) var74;
2182 ((struct instance_array__NativeArray*)var86)->values[3] = (val*) var78;
2183 ((struct instance_array__NativeArray*)var86)->values[4] = (val*) var80;
2184 ((void (*)(val*, val*, long))(var84->class->vft[COLOR_array__Array__with_native]))(var84, var86, var85) /* with_native on <var84:Array[Object]>*/;
2185 }
2186 var87 = ((val* (*)(val*))(var84->class->vft[COLOR_string__Object__to_s]))(var84) /* to_s on <var84:Array[Object]>*/;
2187 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var87) /* add on <var_v:GlobalCompilerVisitor>*/;
2188 if (varonce88) {
2189 var89 = varonce88;
2190 } else {
2191 var90 = "res->classid = ";
2192 var91 = 15;
2193 var92 = string__NativeString__to_s_with_length(var90, var91);
2194 var89 = var92;
2195 varonce88 = var89;
2196 }
2197 var93 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(self, var_mtype) /* classid on <self:GlobalCompiler>*/;
2198 if (varonce94) {
2199 var95 = varonce94;
2200 } else {
2201 var96 = ";";
2202 var97 = 1;
2203 var98 = string__NativeString__to_s_with_length(var96, var97);
2204 var95 = var98;
2205 varonce94 = var95;
2206 }
2207 var99 = NEW_array__Array(&type_array__Arraykernel__Object);
2208 { /* var99 = array_instance Array[Object] */
2209 var100 = 3;
2210 var101 = NEW_array__NativeArray(var100, &type_array__NativeArraykernel__Object);
2211 ((struct instance_array__NativeArray*)var101)->values[0] = (val*) var89;
2212 ((struct instance_array__NativeArray*)var101)->values[1] = (val*) var93;
2213 ((struct instance_array__NativeArray*)var101)->values[2] = (val*) var95;
2214 ((void (*)(val*, val*, long))(var99->class->vft[COLOR_array__Array__with_native]))(var99, var101, var100) /* with_native on <var99:Array[Object]>*/;
2215 }
2216 var102 = ((val* (*)(val*))(var99->class->vft[COLOR_string__Object__to_s]))(var99) /* to_s on <var99:Array[Object]>*/;
2217 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var102) /* add on <var_v:GlobalCompilerVisitor>*/;
2218 if (varonce103) {
2219 var104 = varonce103;
2220 } else {
2221 var105 = "res->value = value;";
2222 var106 = 19;
2223 var107 = string__NativeString__to_s_with_length(var105, var106);
2224 var104 = var107;
2225 varonce103 = var104;
2226 }
2227 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var104) /* add on <var_v:GlobalCompilerVisitor>*/;
2228 if (varonce108) {
2229 var109 = varonce108;
2230 } else {
2231 var110 = "return (val*)res;";
2232 var111 = 17;
2233 var112 = string__NativeString__to_s_with_length(var110, var111);
2234 var109 = var112;
2235 varonce108 = var109;
2236 }
2237 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var109) /* add on <var_v:GlobalCompilerVisitor>*/;
2238 if (varonce113) {
2239 var114 = varonce113;
2240 } else {
2241 var115 = "}";
2242 var116 = 1;
2243 var117 = string__NativeString__to_s_with_length(var115, var116);
2244 var114 = var117;
2245 varonce113 = var114;
2246 }
2247 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var114) /* add on <var_v:GlobalCompilerVisitor>*/;
2248 RET_LABEL:;
2249 }
2250 /* method global_compiler#GlobalCompiler#generate_box_instance for (self: Object, MClassType) */
2251 void VIRTUAL_global_compiler__GlobalCompiler__generate_box_instance(val* self, val* p0) {
2252 global_compiler__GlobalCompiler__generate_box_instance(self, p0);
2253 RET_LABEL:;
2254 }
2255 /* method global_compiler#GlobalCompiler#new_visitor for (self: GlobalCompiler): GlobalCompilerVisitor */
2256 val* global_compiler__GlobalCompiler__new_visitor(val* self) {
2257 val* var /* : GlobalCompilerVisitor */;
2258 val* var1 /* : GlobalCompilerVisitor */;
2259 short int var2 /* : Bool */;
2260 int cltype;
2261 int idtype;
2262 const struct type* type_struct;
2263 const char* var_class_name;
2264 var1 = NEW_global_compiler__GlobalCompilerVisitor(&type_global_compiler__GlobalCompilerVisitor);
2265 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init]))(var1, self) /* init on <var1:GlobalCompilerVisitor>*/;
2266 /* <var1:GlobalCompilerVisitor> isa VISITOR */
2267 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
2268 cltype = type_struct->color;
2269 idtype = type_struct->id;
2270 if(cltype >= var1->type->table_size) {
2271 var2 = 0;
2272 } else {
2273 var2 = var1->type->type_table[cltype] == idtype;
2274 }
2275 if (!var2) {
2276 var_class_name = var1 == NULL ? "null" : var1->type->name;
2277 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
2278 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 242);
2279 show_backtrace(1);
2280 }
2281 var = var1;
2282 goto RET_LABEL;
2283 RET_LABEL:;
2284 return var;
2285 }
2286 /* method global_compiler#GlobalCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
2287 val* VIRTUAL_global_compiler__GlobalCompiler__new_visitor(val* self) {
2288 val* var /* : AbstractCompilerVisitor */;
2289 val* var1 /* : GlobalCompilerVisitor */;
2290 var1 = global_compiler__GlobalCompiler__new_visitor(self);
2291 var = var1;
2292 RET_LABEL:;
2293 return var;
2294 }
2295 /* method global_compiler#GlobalCompiler#collect_types_cache for (self: GlobalCompiler): HashMap[MType, Array[MClassType]] */
2296 val* global_compiler__GlobalCompiler__collect_types_cache(val* self) {
2297 val* var /* : HashMap[MType, Array[MClassType]] */;
2298 val* var1 /* : HashMap[MType, Array[MClassType]] */;
2299 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dcollect_types_cache].val; /* @collect_types_cache on <self:GlobalCompiler> */
2300 if (var1 == NULL) {
2301 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @collect_types_cache");
2302 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 244);
2303 show_backtrace(1);
2304 }
2305 var = var1;
2306 RET_LABEL:;
2307 return var;
2308 }
2309 /* method global_compiler#GlobalCompiler#collect_types_cache for (self: Object): HashMap[MType, Array[MClassType]] */
2310 val* VIRTUAL_global_compiler__GlobalCompiler__collect_types_cache(val* self) {
2311 val* var /* : HashMap[MType, Array[MClassType]] */;
2312 val* var1 /* : HashMap[MType, Array[MClassType]] */;
2313 var1 = global_compiler__GlobalCompiler__collect_types_cache(self);
2314 var = var1;
2315 RET_LABEL:;
2316 return var;
2317 }
2318 /* method global_compiler#GlobalCompiler#collect_types_cache= for (self: GlobalCompiler, HashMap[MType, Array[MClassType]]) */
2319 void global_compiler__GlobalCompiler__collect_types_cache_61d(val* self, val* p0) {
2320 self->attrs[COLOR_global_compiler__GlobalCompiler___64dcollect_types_cache].val = p0; /* @collect_types_cache on <self:GlobalCompiler> */
2321 RET_LABEL:;
2322 }
2323 /* method global_compiler#GlobalCompiler#collect_types_cache= for (self: Object, HashMap[MType, Array[MClassType]]) */
2324 void VIRTUAL_global_compiler__GlobalCompiler__collect_types_cache_61d(val* self, val* p0) {
2325 global_compiler__GlobalCompiler__collect_types_cache_61d(self, p0);
2326 RET_LABEL:;
2327 }
2328 /* method global_compiler#GlobalCompilerVisitor#autobox for (self: GlobalCompilerVisitor, RuntimeVariable, MType): RuntimeVariable */
2329 val* global_compiler__GlobalCompilerVisitor__autobox(val* self, val* p0, val* p1) {
2330 val* var /* : RuntimeVariable */;
2331 val* var_value /* var value: RuntimeVariable */;
2332 val* var_mtype /* var mtype: MType */;
2333 val* var1 /* : MType */;
2334 short int var2 /* : Bool */;
2335 short int var3 /* : Bool */;
2336 val* var4 /* : MType */;
2337 val* var5 /* : String */;
2338 static val* varonce;
2339 val* var6 /* : String */;
2340 char* var7 /* : NativeString */;
2341 long var8 /* : Int */;
2342 val* var9 /* : String */;
2343 short int var10 /* : Bool */;
2344 short int var_ /* var : Bool */;
2345 val* var11 /* : String */;
2346 static val* varonce12;
2347 val* var13 /* : String */;
2348 char* var14 /* : NativeString */;
2349 long var15 /* : Int */;
2350 val* var16 /* : String */;
2351 short int var17 /* : Bool */;
2352 val* var18 /* : MType */;
2353 val* var19 /* : String */;
2354 static val* varonce20;
2355 val* var21 /* : String */;
2356 char* var22 /* : NativeString */;
2357 long var23 /* : Int */;
2358 val* var24 /* : String */;
2359 short int var25 /* : Bool */;
2360 static val* varonce26;
2361 val* var27 /* : String */;
2362 char* var28 /* : NativeString */;
2363 long var29 /* : Int */;
2364 val* var30 /* : String */;
2365 val* var31 /* : String */;
2366 static val* varonce32;
2367 val* var33 /* : String */;
2368 char* var34 /* : NativeString */;
2369 long var35 /* : Int */;
2370 val* var36 /* : String */;
2371 static val* varonce37;
2372 val* var38 /* : String */;
2373 char* var39 /* : NativeString */;
2374 long var40 /* : Int */;
2375 val* var41 /* : String */;
2376 val* var42 /* : MType */;
2377 static val* varonce43;
2378 val* var44 /* : String */;
2379 char* var45 /* : NativeString */;
2380 long var46 /* : Int */;
2381 val* var47 /* : String */;
2382 static val* varonce48;
2383 val* var49 /* : String */;
2384 char* var50 /* : NativeString */;
2385 long var51 /* : Int */;
2386 val* var52 /* : String */;
2387 val* var53 /* : Array[Object] */;
2388 long var54 /* : Int */;
2389 val* var55 /* : NativeArray[Object] */;
2390 val* var56 /* : String */;
2391 val* var57 /* : RuntimeVariable */;
2392 val* var58 /* : String */;
2393 static val* varonce59;
2394 val* var60 /* : String */;
2395 char* var61 /* : NativeString */;
2396 long var62 /* : Int */;
2397 val* var63 /* : String */;
2398 short int var64 /* : Bool */;
2399 val* var65 /* : MType */;
2400 short int var66 /* : Bool */;
2401 int cltype;
2402 int idtype;
2403 const char* var_class_name;
2404 val* var_valtype /* var valtype: MClassType */;
2405 val* var67 /* : RuntimeVariable */;
2406 val* var_res /* var res: RuntimeVariable */;
2407 val* var68 /* : AbstractCompiler */;
2408 val* var69 /* : RapidTypeAnalysis */;
2409 val* var70 /* : HashSet[MClassType] */;
2410 short int var71 /* : Bool */;
2411 short int var72 /* : Bool */;
2412 static val* varonce73;
2413 val* var74 /* : String */;
2414 char* var75 /* : NativeString */;
2415 long var76 /* : Int */;
2416 val* var77 /* : String */;
2417 val* var78 /* : MType */;
2418 static val* varonce79;
2419 val* var80 /* : String */;
2420 char* var81 /* : NativeString */;
2421 long var82 /* : Int */;
2422 val* var83 /* : String */;
2423 static val* varonce84;
2424 val* var85 /* : String */;
2425 char* var86 /* : NativeString */;
2426 long var87 /* : Int */;
2427 val* var88 /* : String */;
2428 val* var89 /* : MType */;
2429 static val* varonce90;
2430 val* var91 /* : String */;
2431 char* var92 /* : NativeString */;
2432 long var93 /* : Int */;
2433 val* var94 /* : String */;
2434 val* var95 /* : Array[Object] */;
2435 long var96 /* : Int */;
2436 val* var97 /* : NativeArray[Object] */;
2437 val* var98 /* : String */;
2438 static val* varonce99;
2439 val* var100 /* : String */;
2440 char* var101 /* : NativeString */;
2441 long var102 /* : Int */;
2442 val* var103 /* : String */;
2443 static val* varonce104;
2444 val* var105 /* : String */;
2445 char* var106 /* : NativeString */;
2446 long var107 /* : Int */;
2447 val* var108 /* : String */;
2448 val* var109 /* : String */;
2449 static val* varonce110;
2450 val* var111 /* : String */;
2451 char* var112 /* : NativeString */;
2452 long var113 /* : Int */;
2453 val* var114 /* : String */;
2454 static val* varonce115;
2455 val* var116 /* : String */;
2456 char* var117 /* : NativeString */;
2457 long var118 /* : Int */;
2458 val* var119 /* : String */;
2459 val* var120 /* : MType */;
2460 static val* varonce121;
2461 val* var122 /* : String */;
2462 char* var123 /* : NativeString */;
2463 long var124 /* : Int */;
2464 val* var125 /* : String */;
2465 static val* varonce126;
2466 val* var127 /* : String */;
2467 char* var128 /* : NativeString */;
2468 long var129 /* : Int */;
2469 val* var130 /* : String */;
2470 val* var131 /* : Array[Object] */;
2471 long var132 /* : Int */;
2472 val* var133 /* : NativeArray[Object] */;
2473 val* var134 /* : String */;
2474 val* var135 /* : RuntimeVariable */;
2475 val* var_res136 /* var res: RuntimeVariable */;
2476 static val* varonce137;
2477 val* var138 /* : String */;
2478 char* var139 /* : NativeString */;
2479 long var140 /* : Int */;
2480 val* var141 /* : String */;
2481 static val* varonce142;
2482 val* var143 /* : String */;
2483 char* var144 /* : NativeString */;
2484 long var145 /* : Int */;
2485 val* var146 /* : String */;
2486 val* var147 /* : MType */;
2487 static val* varonce148;
2488 val* var149 /* : String */;
2489 char* var150 /* : NativeString */;
2490 long var151 /* : Int */;
2491 val* var152 /* : String */;
2492 static val* varonce153;
2493 val* var154 /* : String */;
2494 char* var155 /* : NativeString */;
2495 long var156 /* : Int */;
2496 val* var157 /* : String */;
2497 val* var158 /* : Array[Object] */;
2498 long var159 /* : Int */;
2499 val* var160 /* : NativeArray[Object] */;
2500 val* var161 /* : String */;
2501 static val* varonce162;
2502 val* var163 /* : String */;
2503 char* var164 /* : NativeString */;
2504 long var165 /* : Int */;
2505 val* var166 /* : String */;
2506 val* var167 /* : MType */;
2507 static val* varonce168;
2508 val* var169 /* : String */;
2509 char* var170 /* : NativeString */;
2510 long var171 /* : Int */;
2511 val* var172 /* : String */;
2512 static val* varonce173;
2513 val* var174 /* : String */;
2514 char* var175 /* : NativeString */;
2515 long var176 /* : Int */;
2516 val* var177 /* : String */;
2517 val* var178 /* : Array[Object] */;
2518 long var179 /* : Int */;
2519 val* var180 /* : NativeArray[Object] */;
2520 val* var181 /* : String */;
2521 var_value = p0;
2522 var_mtype = p1;
2523 var1 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2524 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___61d_61d]))(var1, var_mtype) /* == on <var1:MType>*/;
2525 if (var2){
2526 var = var_value;
2527 goto RET_LABEL;
2528 } else {
2529 var4 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2530 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_compiler__MType__ctype]))(var4) /* ctype on <var4:MType>*/;
2531 if (varonce) {
2532 var6 = varonce;
2533 } else {
2534 var7 = "val*";
2535 var8 = 4;
2536 var9 = string__NativeString__to_s_with_length(var7, var8);
2537 var6 = var9;
2538 varonce = var6;
2539 }
2540 var10 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_kernel__Object___61d_61d]))(var5, var6) /* == on <var5:String>*/;
2541 var_ = var10;
2542 if (var10){
2543 var11 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MType>*/;
2544 if (varonce12) {
2545 var13 = varonce12;
2546 } else {
2547 var14 = "val*";
2548 var15 = 4;
2549 var16 = string__NativeString__to_s_with_length(var14, var15);
2550 var13 = var16;
2551 varonce12 = var13;
2552 }
2553 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
2554 var3 = var17;
2555 } else {
2556 var3 = var_;
2557 }
2558 if (var3){
2559 var = var_value;
2560 goto RET_LABEL;
2561 } else {
2562 var18 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2563 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_abstract_compiler__MType__ctype]))(var18) /* ctype on <var18:MType>*/;
2564 if (varonce20) {
2565 var21 = varonce20;
2566 } else {
2567 var22 = "val*";
2568 var23 = 4;
2569 var24 = string__NativeString__to_s_with_length(var22, var23);
2570 var21 = var24;
2571 varonce20 = var21;
2572 }
2573 var25 = ((short int (*)(val*, val*))(var19->class->vft[COLOR_kernel__Object___61d_61d]))(var19, var21) /* == on <var19:String>*/;
2574 if (var25){
2575 if (varonce26) {
2576 var27 = varonce26;
2577 } else {
2578 var28 = "((struct ";
2579 var29 = 9;
2580 var30 = string__NativeString__to_s_with_length(var28, var29);
2581 var27 = var30;
2582 varonce26 = var27;
2583 }
2584 var31 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
2585 if (varonce32) {
2586 var33 = varonce32;
2587 } else {
2588 var34 = "*)";
2589 var35 = 2;
2590 var36 = string__NativeString__to_s_with_length(var34, var35);
2591 var33 = var36;
2592 varonce32 = var33;
2593 }
2594 if (varonce37) {
2595 var38 = varonce37;
2596 } else {
2597 var39 = ")->value; /* autounbox from ";
2598 var40 = 28;
2599 var41 = string__NativeString__to_s_with_length(var39, var40);
2600 var38 = var41;
2601 varonce37 = var38;
2602 }
2603 var42 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2604 if (varonce43) {
2605 var44 = varonce43;
2606 } else {
2607 var45 = " to ";
2608 var46 = 4;
2609 var47 = string__NativeString__to_s_with_length(var45, var46);
2610 var44 = var47;
2611 varonce43 = var44;
2612 }
2613 if (varonce48) {
2614 var49 = varonce48;
2615 } else {
2616 var50 = " */";
2617 var51 = 3;
2618 var52 = string__NativeString__to_s_with_length(var50, var51);
2619 var49 = var52;
2620 varonce48 = var49;
2621 }
2622 var53 = NEW_array__Array(&type_array__Arraykernel__Object);
2623 { /* var53 = array_instance Array[Object] */
2624 var54 = 9;
2625 var55 = NEW_array__NativeArray(var54, &type_array__NativeArraykernel__Object);
2626 ((struct instance_array__NativeArray*)var55)->values[0] = (val*) var27;
2627 ((struct instance_array__NativeArray*)var55)->values[1] = (val*) var31;
2628 ((struct instance_array__NativeArray*)var55)->values[2] = (val*) var33;
2629 ((struct instance_array__NativeArray*)var55)->values[3] = (val*) var_value;
2630 ((struct instance_array__NativeArray*)var55)->values[4] = (val*) var38;
2631 ((struct instance_array__NativeArray*)var55)->values[5] = (val*) var42;
2632 ((struct instance_array__NativeArray*)var55)->values[6] = (val*) var44;
2633 ((struct instance_array__NativeArray*)var55)->values[7] = (val*) var_mtype;
2634 ((struct instance_array__NativeArray*)var55)->values[8] = (val*) var49;
2635 ((void (*)(val*, val*, long))(var53->class->vft[COLOR_array__Array__with_native]))(var53, var55, var54) /* with_native on <var53:Array[Object]>*/;
2636 }
2637 var56 = ((val* (*)(val*))(var53->class->vft[COLOR_string__Object__to_s]))(var53) /* to_s on <var53:Array[Object]>*/;
2638 var57 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var56, var_mtype) /* new_expr on <self:GlobalCompilerVisitor>*/;
2639 var = var57;
2640 goto RET_LABEL;
2641 } else {
2642 var58 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MType>*/;
2643 if (varonce59) {
2644 var60 = varonce59;
2645 } else {
2646 var61 = "val*";
2647 var62 = 4;
2648 var63 = string__NativeString__to_s_with_length(var61, var62);
2649 var60 = var63;
2650 varonce59 = var60;
2651 }
2652 var64 = ((short int (*)(val*, val*))(var58->class->vft[COLOR_kernel__Object___61d_61d]))(var58, var60) /* == on <var58:String>*/;
2653 if (var64){
2654 var65 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2655 /* <var65:MType> isa MClassType */
2656 cltype = type_model__MClassType.color;
2657 idtype = type_model__MClassType.id;
2658 if(cltype >= var65->type->table_size) {
2659 var66 = 0;
2660 } else {
2661 var66 = var65->type->type_table[cltype] == idtype;
2662 }
2663 if (!var66) {
2664 var_class_name = var65 == NULL ? "null" : var65->type->name;
2665 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
2666 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 263);
2667 show_backtrace(1);
2668 }
2669 var_valtype = var65;
2670 var67 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_mtype) /* new_var on <self:GlobalCompilerVisitor>*/;
2671 var_res = var67;
2672 var68 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
2673 var69 = ((val* (*)(val*))(var68->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var68) /* runtime_type_analysis on <var68:AbstractCompiler(GlobalCompiler)>*/;
2674 var70 = ((val* (*)(val*))(var69->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var69) /* live_types on <var69:RapidTypeAnalysis>*/;
2675 var71 = ((short int (*)(val*, val*))(var70->class->vft[COLOR_abstract_collection__Collection__has]))(var70, var_valtype) /* has on <var70:HashSet[MClassType]>*/;
2676 var72 = !var71;
2677 if (var72){
2678 if (varonce73) {
2679 var74 = varonce73;
2680 } else {
2681 var75 = "/*no autobox from ";
2682 var76 = 18;
2683 var77 = string__NativeString__to_s_with_length(var75, var76);
2684 var74 = var77;
2685 varonce73 = var74;
2686 }
2687 var78 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2688 if (varonce79) {
2689 var80 = varonce79;
2690 } else {
2691 var81 = " to ";
2692 var82 = 4;
2693 var83 = string__NativeString__to_s_with_length(var81, var82);
2694 var80 = var83;
2695 varonce79 = var80;
2696 }
2697 if (varonce84) {
2698 var85 = varonce84;
2699 } else {
2700 var86 = ": ";
2701 var87 = 2;
2702 var88 = string__NativeString__to_s_with_length(var86, var87);
2703 var85 = var88;
2704 varonce84 = var85;
2705 }
2706 var89 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2707 if (varonce90) {
2708 var91 = varonce90;
2709 } else {
2710 var92 = " is not live! */";
2711 var93 = 16;
2712 var94 = string__NativeString__to_s_with_length(var92, var93);
2713 var91 = var94;
2714 varonce90 = var91;
2715 }
2716 var95 = NEW_array__Array(&type_array__Arraykernel__Object);
2717 { /* var95 = array_instance Array[Object] */
2718 var96 = 7;
2719 var97 = NEW_array__NativeArray(var96, &type_array__NativeArraykernel__Object);
2720 ((struct instance_array__NativeArray*)var97)->values[0] = (val*) var74;
2721 ((struct instance_array__NativeArray*)var97)->values[1] = (val*) var78;
2722 ((struct instance_array__NativeArray*)var97)->values[2] = (val*) var80;
2723 ((struct instance_array__NativeArray*)var97)->values[3] = (val*) var_mtype;
2724 ((struct instance_array__NativeArray*)var97)->values[4] = (val*) var85;
2725 ((struct instance_array__NativeArray*)var97)->values[5] = (val*) var89;
2726 ((struct instance_array__NativeArray*)var97)->values[6] = (val*) var91;
2727 ((void (*)(val*, val*, long))(var95->class->vft[COLOR_array__Array__with_native]))(var95, var97, var96) /* with_native on <var95:Array[Object]>*/;
2728 }
2729 var98 = ((val* (*)(val*))(var95->class->vft[COLOR_string__Object__to_s]))(var95) /* to_s on <var95:Array[Object]>*/;
2730 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var98) /* add on <self:GlobalCompilerVisitor>*/;
2731 if (varonce99) {
2732 var100 = varonce99;
2733 } else {
2734 var101 = "printf(\"Dead code executed!\\n\"); show_backtrace(1);";
2735 var102 = 51;
2736 var103 = string__NativeString__to_s_with_length(var101, var102);
2737 var100 = var103;
2738 varonce99 = var100;
2739 }
2740 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var100) /* add on <self:GlobalCompilerVisitor>*/;
2741 var = var_res;
2742 goto RET_LABEL;
2743 } else {
2744 }
2745 if (varonce104) {
2746 var105 = varonce104;
2747 } else {
2748 var106 = " = BOX_";
2749 var107 = 7;
2750 var108 = string__NativeString__to_s_with_length(var106, var107);
2751 var105 = var108;
2752 varonce104 = var105;
2753 }
2754 var109 = ((val* (*)(val*))(var_valtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_valtype) /* c_name on <var_valtype:MClassType>*/;
2755 if (varonce110) {
2756 var111 = varonce110;
2757 } else {
2758 var112 = "(";
2759 var113 = 1;
2760 var114 = string__NativeString__to_s_with_length(var112, var113);
2761 var111 = var114;
2762 varonce110 = var111;
2763 }
2764 if (varonce115) {
2765 var116 = varonce115;
2766 } else {
2767 var117 = "); /* autobox from ";
2768 var118 = 19;
2769 var119 = string__NativeString__to_s_with_length(var117, var118);
2770 var116 = var119;
2771 varonce115 = var116;
2772 }
2773 var120 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2774 if (varonce121) {
2775 var122 = varonce121;
2776 } else {
2777 var123 = " to ";
2778 var124 = 4;
2779 var125 = string__NativeString__to_s_with_length(var123, var124);
2780 var122 = var125;
2781 varonce121 = var122;
2782 }
2783 if (varonce126) {
2784 var127 = varonce126;
2785 } else {
2786 var128 = " */";
2787 var129 = 3;
2788 var130 = string__NativeString__to_s_with_length(var128, var129);
2789 var127 = var130;
2790 varonce126 = var127;
2791 }
2792 var131 = NEW_array__Array(&type_array__Arraykernel__Object);
2793 { /* var131 = array_instance Array[Object] */
2794 var132 = 10;
2795 var133 = NEW_array__NativeArray(var132, &type_array__NativeArraykernel__Object);
2796 ((struct instance_array__NativeArray*)var133)->values[0] = (val*) var_res;
2797 ((struct instance_array__NativeArray*)var133)->values[1] = (val*) var105;
2798 ((struct instance_array__NativeArray*)var133)->values[2] = (val*) var109;
2799 ((struct instance_array__NativeArray*)var133)->values[3] = (val*) var111;
2800 ((struct instance_array__NativeArray*)var133)->values[4] = (val*) var_value;
2801 ((struct instance_array__NativeArray*)var133)->values[5] = (val*) var116;
2802 ((struct instance_array__NativeArray*)var133)->values[6] = (val*) var120;
2803 ((struct instance_array__NativeArray*)var133)->values[7] = (val*) var122;
2804 ((struct instance_array__NativeArray*)var133)->values[8] = (val*) var_mtype;
2805 ((struct instance_array__NativeArray*)var133)->values[9] = (val*) var127;
2806 ((void (*)(val*, val*, long))(var131->class->vft[COLOR_array__Array__with_native]))(var131, var133, var132) /* with_native on <var131:Array[Object]>*/;
2807 }
2808 var134 = ((val* (*)(val*))(var131->class->vft[COLOR_string__Object__to_s]))(var131) /* to_s on <var131:Array[Object]>*/;
2809 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
2810 var = var_res;
2811 goto RET_LABEL;
2812 } else {
2813 var135 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_mtype) /* new_var on <self:GlobalCompilerVisitor>*/;
2814 var_res136 = var135;
2815 if (varonce137) {
2816 var138 = varonce137;
2817 } else {
2818 var139 = "/* ";
2819 var140 = 3;
2820 var141 = string__NativeString__to_s_with_length(var139, var140);
2821 var138 = var141;
2822 varonce137 = var138;
2823 }
2824 if (varonce142) {
2825 var143 = varonce142;
2826 } else {
2827 var144 = " left unintialized (cannot convert ";
2828 var145 = 35;
2829 var146 = string__NativeString__to_s_with_length(var144, var145);
2830 var143 = var146;
2831 varonce142 = var143;
2832 }
2833 var147 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2834 if (varonce148) {
2835 var149 = varonce148;
2836 } else {
2837 var150 = " to ";
2838 var151 = 4;
2839 var152 = string__NativeString__to_s_with_length(var150, var151);
2840 var149 = var152;
2841 varonce148 = var149;
2842 }
2843 if (varonce153) {
2844 var154 = varonce153;
2845 } else {
2846 var155 = ") */";
2847 var156 = 4;
2848 var157 = string__NativeString__to_s_with_length(var155, var156);
2849 var154 = var157;
2850 varonce153 = var154;
2851 }
2852 var158 = NEW_array__Array(&type_array__Arraykernel__Object);
2853 { /* var158 = array_instance Array[Object] */
2854 var159 = 7;
2855 var160 = NEW_array__NativeArray(var159, &type_array__NativeArraykernel__Object);
2856 ((struct instance_array__NativeArray*)var160)->values[0] = (val*) var138;
2857 ((struct instance_array__NativeArray*)var160)->values[1] = (val*) var_res136;
2858 ((struct instance_array__NativeArray*)var160)->values[2] = (val*) var143;
2859 ((struct instance_array__NativeArray*)var160)->values[3] = (val*) var147;
2860 ((struct instance_array__NativeArray*)var160)->values[4] = (val*) var149;
2861 ((struct instance_array__NativeArray*)var160)->values[5] = (val*) var_mtype;
2862 ((struct instance_array__NativeArray*)var160)->values[6] = (val*) var154;
2863 ((void (*)(val*, val*, long))(var158->class->vft[COLOR_array__Array__with_native]))(var158, var160, var159) /* with_native on <var158:Array[Object]>*/;
2864 }
2865 var161 = ((val* (*)(val*))(var158->class->vft[COLOR_string__Object__to_s]))(var158) /* to_s on <var158:Array[Object]>*/;
2866 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var161) /* add on <self:GlobalCompilerVisitor>*/;
2867 if (varonce162) {
2868 var163 = varonce162;
2869 } else {
2870 var164 = "printf(\"Cast error: Cannot cast %s to %s.\\n\", \"";
2871 var165 = 47;
2872 var166 = string__NativeString__to_s_with_length(var164, var165);
2873 var163 = var166;
2874 varonce162 = var163;
2875 }
2876 var167 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2877 if (varonce168) {
2878 var169 = varonce168;
2879 } else {
2880 var170 = "\", \"";
2881 var171 = 4;
2882 var172 = string__NativeString__to_s_with_length(var170, var171);
2883 var169 = var172;
2884 varonce168 = var169;
2885 }
2886 if (varonce173) {
2887 var174 = varonce173;
2888 } else {
2889 var175 = "\"); show_backtrace(1);";
2890 var176 = 22;
2891 var177 = string__NativeString__to_s_with_length(var175, var176);
2892 var174 = var177;
2893 varonce173 = var174;
2894 }
2895 var178 = NEW_array__Array(&type_array__Arraykernel__Object);
2896 { /* var178 = array_instance Array[Object] */
2897 var179 = 5;
2898 var180 = NEW_array__NativeArray(var179, &type_array__NativeArraykernel__Object);
2899 ((struct instance_array__NativeArray*)var180)->values[0] = (val*) var163;
2900 ((struct instance_array__NativeArray*)var180)->values[1] = (val*) var167;
2901 ((struct instance_array__NativeArray*)var180)->values[2] = (val*) var169;
2902 ((struct instance_array__NativeArray*)var180)->values[3] = (val*) var_mtype;
2903 ((struct instance_array__NativeArray*)var180)->values[4] = (val*) var174;
2904 ((void (*)(val*, val*, long))(var178->class->vft[COLOR_array__Array__with_native]))(var178, var180, var179) /* with_native on <var178:Array[Object]>*/;
2905 }
2906 var181 = ((val* (*)(val*))(var178->class->vft[COLOR_string__Object__to_s]))(var178) /* to_s on <var178:Array[Object]>*/;
2907 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var181) /* add on <self:GlobalCompilerVisitor>*/;
2908 var = var_res136;
2909 goto RET_LABEL;
2910 }
2911 }
2912 }
2913 }
2914 RET_LABEL:;
2915 return var;
2916 }
2917 /* method global_compiler#GlobalCompilerVisitor#autobox for (self: Object, RuntimeVariable, MType): RuntimeVariable */
2918 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__autobox(val* self, val* p0, val* p1) {
2919 val* var /* : RuntimeVariable */;
2920 val* var1 /* : RuntimeVariable */;
2921 var1 = global_compiler__GlobalCompilerVisitor__autobox(self, p0, p1);
2922 var = var1;
2923 RET_LABEL:;
2924 return var;
2925 }
2926 /* method global_compiler#GlobalCompilerVisitor#collect_types for (self: GlobalCompilerVisitor, RuntimeVariable): Array[MClassType] */
2927 val* global_compiler__GlobalCompilerVisitor__collect_types(val* self, val* p0) {
2928 val* var /* : Array[MClassType] */;
2929 val* var_recv /* var recv: RuntimeVariable */;
2930 val* var1 /* : MType */;
2931 val* var_mtype /* var mtype: MType */;
2932 short int var2 /* : Bool */;
2933 short int var3 /* : Bool */;
2934 int cltype;
2935 int idtype;
2936 val* var4 /* : AbstractCompiler */;
2937 val* var5 /* : RapidTypeAnalysis */;
2938 val* var6 /* : HashSet[MClassType] */;
2939 short int var7 /* : Bool */;
2940 val* var8 /* : Array[MClassType] */;
2941 long var9 /* : Int */;
2942 val* var_ /* var : Array[MClassType] */;
2943 val* var_types /* var types: Array[MClassType] */;
2944 val* var10 /* : AbstractCompiler */;
2945 val* var11 /* : HashMap[MType, Array[MClassType]] */;
2946 val* var_cache /* var cache: HashMap[MType, Array[MClassType]] */;
2947 short int var12 /* : Bool */;
2948 val* var13 /* : nullable Object */;
2949 val* var14 /* : Array[MClassType] */;
2950 val* var_types15 /* var types: Array[MClassType] */;
2951 val* var16 /* : AbstractCompiler */;
2952 val* var17 /* : MModule */;
2953 val* var_mainmodule /* var mainmodule: MModule */;
2954 val* var18 /* : AbstractCompiler */;
2955 val* var19 /* : RapidTypeAnalysis */;
2956 val* var20 /* : HashSet[MClassType] */;
2957 val* var21 /* : Iterator[nullable Object] */;
2958 short int var22 /* : Bool */;
2959 val* var23 /* : nullable Object */;
2960 val* var_t /* var t: MClassType */;
2961 val* var24 /* : null */;
2962 short int var25 /* : Bool */;
2963 short int var26 /* : Bool */;
2964 var_recv = p0;
2965 var1 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_recv) /* mcasttype on <var_recv:RuntimeVariable>*/;
2966 var_mtype = var1;
2967 var2 = ((short int (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact]))(var_recv) /* is_exact on <var_recv:RuntimeVariable>*/;
2968 if (var2){
2969 /* <var_mtype:MType> isa MClassType */
2970 cltype = type_model__MClassType.color;
2971 idtype = type_model__MClassType.id;
2972 if(cltype >= var_mtype->type->table_size) {
2973 var3 = 0;
2974 } else {
2975 var3 = var_mtype->type->type_table[cltype] == idtype;
2976 }
2977 if (!var3) {
2978 fprintf(stderr, "Runtime error: %s", "Assert failed");
2979 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 286);
2980 show_backtrace(1);
2981 }
2982 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
2983 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var4) /* runtime_type_analysis on <var4:AbstractCompiler(GlobalCompiler)>*/;
2984 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var5) /* live_types on <var5:RapidTypeAnalysis>*/;
2985 var7 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__Collection__has]))(var6, var_mtype) /* has on <var6:HashSet[MClassType]>*/;
2986 if (!var7) {
2987 fprintf(stderr, "Runtime error: %s", "Assert failed");
2988 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 287);
2989 show_backtrace(1);
2990 }
2991 var8 = NEW_array__Array(&type_array__Arraymodel__MClassType);
2992 var9 = 1;
2993 ((void (*)(val*, long))(var8->class->vft[COLOR_array__Array__with_capacity]))(var8, var9) /* with_capacity on <var8:Array[MClassType]>*/;
2994 var_ = var8;
2995 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var_mtype) /* push on <var_:Array[MClassType]>*/;
2996 var_types = var_;
2997 var = var_types;
2998 goto RET_LABEL;
2999 } else {
3000 }
3001 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3002 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_global_compiler__GlobalCompiler__collect_types_cache]))(var10) /* collect_types_cache on <var10:AbstractCompiler(GlobalCompiler)>*/;
3003 var_cache = var11;
3004 var12 = ((short int (*)(val*, val*))(var_cache->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var_cache, var_mtype) /* has_key on <var_cache:HashMap[MType, Array[MClassType]]>*/;
3005 if (var12){
3006 var13 = ((val* (*)(val*, val*))(var_cache->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_cache, var_mtype) /* [] on <var_cache:HashMap[MType, Array[MClassType]]>*/;
3007 var = var13;
3008 goto RET_LABEL;
3009 } else {
3010 }
3011 var14 = NEW_array__Array(&type_array__Arraymodel__MClassType);
3012 ((void (*)(val*))(var14->class->vft[COLOR_array__Array__init]))(var14) /* init on <var14:Array[MClassType]>*/;
3013 var_types15 = var14;
3014 var16 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3015 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var16) /* mainmodule on <var16:AbstractCompiler(GlobalCompiler)>*/;
3016 var_mainmodule = var17;
3017 var18 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3018 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var18) /* runtime_type_analysis on <var18:AbstractCompiler(GlobalCompiler)>*/;
3019 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var19) /* live_types on <var19:RapidTypeAnalysis>*/;
3020 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Collection__iterator]))(var20) /* iterator on <var20:HashSet[MClassType]>*/;
3021 for(;;) {
3022 var22 = ((short int (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var21) /* is_ok on <var21:Iterator[nullable Object]>*/;
3023 if(!var22) break;
3024 var23 = ((val* (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__item]))(var21) /* item on <var21:Iterator[nullable Object]>*/;
3025 var_t = var23;
3026 var24 = NULL;
3027 var25 = ((short int (*)(val*, val*, val*, val*))(var_t->class->vft[COLOR_model__MType__is_subtype]))(var_t, var_mainmodule, var24, var_mtype) /* is_subtype on <var_t:MClassType>*/;
3028 var26 = !var25;
3029 if (var26){
3030 goto CONTINUE_label;
3031 } else {
3032 }
3033 ((void (*)(val*, val*))(var_types15->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_types15, var_t) /* add on <var_types15:Array[MClassType]>*/;
3034 CONTINUE_label: (void)0;
3035 ((void (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__next]))(var21) /* next on <var21:Iterator[nullable Object]>*/;
3036 }
3037 BREAK_label: (void)0;
3038 ((void (*)(val*, val*, val*))(var_cache->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_cache, var_mtype, var_types15) /* []= on <var_cache:HashMap[MType, Array[MClassType]]>*/;
3039 var = var_types15;
3040 goto RET_LABEL;
3041 RET_LABEL:;
3042 return var;
3043 }
3044 /* method global_compiler#GlobalCompilerVisitor#collect_types for (self: Object, RuntimeVariable): Array[MClassType] */
3045 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__collect_types(val* self, val* p0) {
3046 val* var /* : Array[MClassType] */;
3047 val* var1 /* : Array[MClassType] */;
3048 var1 = global_compiler__GlobalCompilerVisitor__collect_types(self, p0);
3049 var = var1;
3050 RET_LABEL:;
3051 return var;
3052 }
3053 /* method global_compiler#GlobalCompilerVisitor#native_array_def for (self: GlobalCompilerVisitor, String, nullable MType, Array[RuntimeVariable]) */
3054 void global_compiler__GlobalCompilerVisitor__native_array_def(val* self, val* p0, val* p1, val* p2) {
3055 val* var_pname /* var pname: String */;
3056 val* var_ret_type /* var ret_type: nullable MType */;
3057 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
3058 val* var /* : nullable Object */;
3059 val* var1 /* : MType */;
3060 val* var_elttype /* var elttype: MType */;
3061 val* var2 /* : Array[Object] */;
3062 long var3 /* : Int */;
3063 val* var_ /* var : Array[Object] */;
3064 static val* varonce;
3065 val* var4 /* : String */;
3066 char* var5 /* : NativeString */;
3067 long var6 /* : Int */;
3068 val* var7 /* : String */;
3069 long var8 /* : Int */;
3070 val* var9 /* : nullable Object */;
3071 val* var10 /* : MType */;
3072 val* var11 /* : String */;
3073 static val* varonce12;
3074 val* var13 /* : String */;
3075 char* var14 /* : NativeString */;
3076 long var15 /* : Int */;
3077 val* var16 /* : String */;
3078 long var17 /* : Int */;
3079 val* var18 /* : nullable Object */;
3080 static val* varonce19;
3081 val* var20 /* : String */;
3082 char* var21 /* : NativeString */;
3083 long var22 /* : Int */;
3084 val* var23 /* : String */;
3085 val* var24 /* : String */;
3086 val* var_recv /* var recv: String */;
3087 static val* varonce25;
3088 val* var26 /* : String */;
3089 char* var27 /* : NativeString */;
3090 long var28 /* : Int */;
3091 val* var29 /* : String */;
3092 short int var30 /* : Bool */;
3093 static val* varonce31;
3094 val* var32 /* : String */;
3095 char* var33 /* : NativeString */;
3096 long var34 /* : Int */;
3097 val* var35 /* : String */;
3098 long var36 /* : Int */;
3099 val* var37 /* : nullable Object */;
3100 static val* varonce38;
3101 val* var39 /* : String */;
3102 char* var40 /* : NativeString */;
3103 long var41 /* : Int */;
3104 val* var42 /* : String */;
3105 val* var43 /* : Array[Object] */;
3106 long var44 /* : Int */;
3107 val* var45 /* : NativeArray[Object] */;
3108 val* var46 /* : String */;
3109 val* var47 /* : RuntimeVariable */;
3110 static val* varonce48;
3111 val* var49 /* : String */;
3112 char* var50 /* : NativeString */;
3113 long var51 /* : Int */;
3114 val* var52 /* : String */;
3115 short int var53 /* : Bool */;
3116 static val* varonce54;
3117 val* var55 /* : String */;
3118 char* var56 /* : NativeString */;
3119 long var57 /* : Int */;
3120 val* var58 /* : String */;
3121 long var59 /* : Int */;
3122 val* var60 /* : nullable Object */;
3123 static val* varonce61;
3124 val* var62 /* : String */;
3125 char* var63 /* : NativeString */;
3126 long var64 /* : Int */;
3127 val* var65 /* : String */;
3128 long var66 /* : Int */;
3129 val* var67 /* : nullable Object */;
3130 static val* varonce68;
3131 val* var69 /* : String */;
3132 char* var70 /* : NativeString */;
3133 long var71 /* : Int */;
3134 val* var72 /* : String */;
3135 val* var73 /* : Array[Object] */;
3136 long var74 /* : Int */;
3137 val* var75 /* : NativeArray[Object] */;
3138 val* var76 /* : String */;
3139 static val* varonce77;
3140 val* var78 /* : String */;
3141 char* var79 /* : NativeString */;
3142 long var80 /* : Int */;
3143 val* var81 /* : String */;
3144 short int var82 /* : Bool */;
3145 val* var83 /* : Array[Object] */;
3146 long var84 /* : Int */;
3147 val* var_85 /* var : Array[Object] */;
3148 static val* varonce86;
3149 val* var87 /* : String */;
3150 char* var88 /* : NativeString */;
3151 long var89 /* : Int */;
3152 val* var90 /* : String */;
3153 long var91 /* : Int */;
3154 val* var92 /* : nullable Object */;
3155 val* var93 /* : MType */;
3156 val* var94 /* : String */;
3157 static val* varonce95;
3158 val* var96 /* : String */;
3159 char* var97 /* : NativeString */;
3160 long var98 /* : Int */;
3161 val* var99 /* : String */;
3162 long var100 /* : Int */;
3163 val* var101 /* : nullable Object */;
3164 static val* varonce102;
3165 val* var103 /* : String */;
3166 char* var104 /* : NativeString */;
3167 long var105 /* : Int */;
3168 val* var106 /* : String */;
3169 val* var107 /* : String */;
3170 val* var_recv1 /* var recv1: String */;
3171 static val* varonce108;
3172 val* var109 /* : String */;
3173 char* var110 /* : NativeString */;
3174 long var111 /* : Int */;
3175 val* var112 /* : String */;
3176 static val* varonce113;
3177 val* var114 /* : String */;
3178 char* var115 /* : NativeString */;
3179 long var116 /* : Int */;
3180 val* var117 /* : String */;
3181 static val* varonce118;
3182 val* var119 /* : String */;
3183 char* var120 /* : NativeString */;
3184 long var121 /* : Int */;
3185 val* var122 /* : String */;
3186 long var123 /* : Int */;
3187 val* var124 /* : nullable Object */;
3188 static val* varonce125;
3189 val* var126 /* : String */;
3190 char* var127 /* : NativeString */;
3191 long var128 /* : Int */;
3192 val* var129 /* : String */;
3193 val* var130 /* : String */;
3194 static val* varonce131;
3195 val* var132 /* : String */;
3196 char* var133 /* : NativeString */;
3197 long var134 /* : Int */;
3198 val* var135 /* : String */;
3199 val* var136 /* : Array[Object] */;
3200 long var137 /* : Int */;
3201 val* var138 /* : NativeArray[Object] */;
3202 val* var139 /* : String */;
3203 var_pname = p0;
3204 var_ret_type = p1;
3205 var_arguments = p2;
3206 var = ((val* (*)(val*))(var_arguments->class->vft[COLOR_abstract_collection__Collection__first]))(var_arguments) /* first on <var_arguments:Array[RuntimeVariable]>*/;
3207 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var) /* mtype on <var:nullable Object(RuntimeVariable)>*/;
3208 var_elttype = var1;
3209 var2 = NEW_array__Array(&type_array__Arraykernel__Object);
3210 var3 = 5;
3211 ((void (*)(val*, long))(var2->class->vft[COLOR_array__Array__with_capacity]))(var2, var3) /* with_capacity on <var2:Array[Object]>*/;
3212 var_ = var2;
3213 if (varonce) {
3214 var4 = varonce;
3215 } else {
3216 var5 = "((struct ";
3217 var6 = 9;
3218 var7 = string__NativeString__to_s_with_length(var5, var6);
3219 var4 = var7;
3220 varonce = var4;
3221 }
3222 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var4) /* add on <var_:Array[Object]>*/;
3223 var8 = 0;
3224 var9 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var8) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3225 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var9) /* mcasttype on <var9:nullable Object(RuntimeVariable)>*/;
3226 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__MType__c_name]))(var10) /* c_name on <var10:MType>*/;
3227 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var11) /* add on <var_:Array[Object]>*/;
3228 if (varonce12) {
3229 var13 = varonce12;
3230 } else {
3231 var14 = "*)";
3232 var15 = 2;
3233 var16 = string__NativeString__to_s_with_length(var14, var15);
3234 var13 = var16;
3235 varonce12 = var13;
3236 }
3237 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var13) /* add on <var_:Array[Object]>*/;
3238 var17 = 0;
3239 var18 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var17) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3240 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var18) /* add on <var_:Array[Object]>*/;
3241 if (varonce19) {
3242 var20 = varonce19;
3243 } else {
3244 var21 = ")->values";
3245 var22 = 9;
3246 var23 = string__NativeString__to_s_with_length(var21, var22);
3247 var20 = var23;
3248 varonce19 = var20;
3249 }
3250 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var20) /* add on <var_:Array[Object]>*/;
3251 var24 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
3252 var_recv = var24;
3253 if (varonce25) {
3254 var26 = varonce25;
3255 } else {
3256 var27 = "[]";
3257 var28 = 2;
3258 var29 = string__NativeString__to_s_with_length(var27, var28);
3259 var26 = var29;
3260 varonce25 = var26;
3261 }
3262 var30 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var26) /* == on <var_pname:String>*/;
3263 if (var30){
3264 if (varonce31) {
3265 var32 = varonce31;
3266 } else {
3267 var33 = "[";
3268 var34 = 1;
3269 var35 = string__NativeString__to_s_with_length(var33, var34);
3270 var32 = var35;
3271 varonce31 = var32;
3272 }
3273 var36 = 1;
3274 var37 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var36) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3275 if (varonce38) {
3276 var39 = varonce38;
3277 } else {
3278 var40 = "]";
3279 var41 = 1;
3280 var42 = string__NativeString__to_s_with_length(var40, var41);
3281 var39 = var42;
3282 varonce38 = var39;
3283 }
3284 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
3285 { /* var43 = array_instance Array[Object] */
3286 var44 = 4;
3287 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
3288 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_recv;
3289 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var32;
3290 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var37;
3291 ((struct instance_array__NativeArray*)var45)->values[3] = (val*) var39;
3292 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
3293 }
3294 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
3295 if (var_ret_type == NULL) {
3296 fprintf(stderr, "Runtime error: %s", "Cast failed");
3297 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 310);
3298 show_backtrace(1);
3299 }
3300 var47 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var46, var_ret_type) /* new_expr on <self:GlobalCompilerVisitor>*/;
3301 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var47) /* ret on <self:GlobalCompilerVisitor>*/;
3302 goto RET_LABEL;
3303 } else {
3304 if (varonce48) {
3305 var49 = varonce48;
3306 } else {
3307 var50 = "[]=";
3308 var51 = 3;
3309 var52 = string__NativeString__to_s_with_length(var50, var51);
3310 var49 = var52;
3311 varonce48 = var49;
3312 }
3313 var53 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var49) /* == on <var_pname:String>*/;
3314 if (var53){
3315 if (varonce54) {
3316 var55 = varonce54;
3317 } else {
3318 var56 = "[";
3319 var57 = 1;
3320 var58 = string__NativeString__to_s_with_length(var56, var57);
3321 var55 = var58;
3322 varonce54 = var55;
3323 }
3324 var59 = 1;
3325 var60 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var59) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3326 if (varonce61) {
3327 var62 = varonce61;
3328 } else {
3329 var63 = "]=";
3330 var64 = 2;
3331 var65 = string__NativeString__to_s_with_length(var63, var64);
3332 var62 = var65;
3333 varonce61 = var62;
3334 }
3335 var66 = 2;
3336 var67 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var66) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3337 if (varonce68) {
3338 var69 = varonce68;
3339 } else {
3340 var70 = ";";
3341 var71 = 1;
3342 var72 = string__NativeString__to_s_with_length(var70, var71);
3343 var69 = var72;
3344 varonce68 = var69;
3345 }
3346 var73 = NEW_array__Array(&type_array__Arraykernel__Object);
3347 { /* var73 = array_instance Array[Object] */
3348 var74 = 6;
3349 var75 = NEW_array__NativeArray(var74, &type_array__NativeArraykernel__Object);
3350 ((struct instance_array__NativeArray*)var75)->values[0] = (val*) var_recv;
3351 ((struct instance_array__NativeArray*)var75)->values[1] = (val*) var55;
3352 ((struct instance_array__NativeArray*)var75)->values[2] = (val*) var60;
3353 ((struct instance_array__NativeArray*)var75)->values[3] = (val*) var62;
3354 ((struct instance_array__NativeArray*)var75)->values[4] = (val*) var67;
3355 ((struct instance_array__NativeArray*)var75)->values[5] = (val*) var69;
3356 ((void (*)(val*, val*, long))(var73->class->vft[COLOR_array__Array__with_native]))(var73, var75, var74) /* with_native on <var73:Array[Object]>*/;
3357 }
3358 var76 = ((val* (*)(val*))(var73->class->vft[COLOR_string__Object__to_s]))(var73) /* to_s on <var73:Array[Object]>*/;
3359 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var76) /* add on <self:GlobalCompilerVisitor>*/;
3360 goto RET_LABEL;
3361 } else {
3362 if (varonce77) {
3363 var78 = varonce77;
3364 } else {
3365 var79 = "copy_to";
3366 var80 = 7;
3367 var81 = string__NativeString__to_s_with_length(var79, var80);
3368 var78 = var81;
3369 varonce77 = var78;
3370 }
3371 var82 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var78) /* == on <var_pname:String>*/;
3372 if (var82){
3373 var83 = NEW_array__Array(&type_array__Arraykernel__Object);
3374 var84 = 5;
3375 ((void (*)(val*, long))(var83->class->vft[COLOR_array__Array__with_capacity]))(var83, var84) /* with_capacity on <var83:Array[Object]>*/;
3376 var_85 = var83;
3377 if (varonce86) {
3378 var87 = varonce86;
3379 } else {
3380 var88 = "((struct ";
3381 var89 = 9;
3382 var90 = string__NativeString__to_s_with_length(var88, var89);
3383 var87 = var90;
3384 varonce86 = var87;
3385 }
3386 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var87) /* add on <var_85:Array[Object]>*/;
3387 var91 = 1;
3388 var92 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var91) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3389 var93 = ((val* (*)(val*))(var92->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var92) /* mcasttype on <var92:nullable Object(RuntimeVariable)>*/;
3390 var94 = ((val* (*)(val*))(var93->class->vft[COLOR_abstract_compiler__MType__c_name]))(var93) /* c_name on <var93:MType>*/;
3391 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var94) /* add on <var_85:Array[Object]>*/;
3392 if (varonce95) {
3393 var96 = varonce95;
3394 } else {
3395 var97 = "*)";
3396 var98 = 2;
3397 var99 = string__NativeString__to_s_with_length(var97, var98);
3398 var96 = var99;
3399 varonce95 = var96;
3400 }
3401 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var96) /* add on <var_85:Array[Object]>*/;
3402 var100 = 1;
3403 var101 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var100) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3404 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var101) /* add on <var_85:Array[Object]>*/;
3405 if (varonce102) {
3406 var103 = varonce102;
3407 } else {
3408 var104 = ")->values";
3409 var105 = 9;
3410 var106 = string__NativeString__to_s_with_length(var104, var105);
3411 var103 = var106;
3412 varonce102 = var103;
3413 }
3414 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var103) /* add on <var_85:Array[Object]>*/;
3415 var107 = ((val* (*)(val*))(var_85->class->vft[COLOR_string__Object__to_s]))(var_85) /* to_s on <var_85:Array[Object]>*/;
3416 var_recv1 = var107;
3417 if (varonce108) {
3418 var109 = varonce108;
3419 } else {
3420 var110 = "memcpy(";
3421 var111 = 7;
3422 var112 = string__NativeString__to_s_with_length(var110, var111);
3423 var109 = var112;
3424 varonce108 = var109;
3425 }
3426 if (varonce113) {
3427 var114 = varonce113;
3428 } else {
3429 var115 = ",";
3430 var116 = 1;
3431 var117 = string__NativeString__to_s_with_length(var115, var116);
3432 var114 = var117;
3433 varonce113 = var114;
3434 }
3435 if (varonce118) {
3436 var119 = varonce118;
3437 } else {
3438 var120 = ",";
3439 var121 = 1;
3440 var122 = string__NativeString__to_s_with_length(var120, var121);
3441 var119 = var122;
3442 varonce118 = var119;
3443 }
3444 var123 = 2;
3445 var124 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var123) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3446 if (varonce125) {
3447 var126 = varonce125;
3448 } else {
3449 var127 = "*sizeof(";
3450 var128 = 8;
3451 var129 = string__NativeString__to_s_with_length(var127, var128);
3452 var126 = var129;
3453 varonce125 = var126;
3454 }
3455 var130 = ((val* (*)(val*))(var_elttype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_elttype) /* ctype on <var_elttype:MType>*/;
3456 if (varonce131) {
3457 var132 = varonce131;
3458 } else {
3459 var133 = "));";
3460 var134 = 3;
3461 var135 = string__NativeString__to_s_with_length(var133, var134);
3462 var132 = var135;
3463 varonce131 = var132;
3464 }
3465 var136 = NEW_array__Array(&type_array__Arraykernel__Object);
3466 { /* var136 = array_instance Array[Object] */
3467 var137 = 9;
3468 var138 = NEW_array__NativeArray(var137, &type_array__NativeArraykernel__Object);
3469 ((struct instance_array__NativeArray*)var138)->values[0] = (val*) var109;
3470 ((struct instance_array__NativeArray*)var138)->values[1] = (val*) var_recv1;
3471 ((struct instance_array__NativeArray*)var138)->values[2] = (val*) var114;
3472 ((struct instance_array__NativeArray*)var138)->values[3] = (val*) var_recv;
3473 ((struct instance_array__NativeArray*)var138)->values[4] = (val*) var119;
3474 ((struct instance_array__NativeArray*)var138)->values[5] = (val*) var124;
3475 ((struct instance_array__NativeArray*)var138)->values[6] = (val*) var126;
3476 ((struct instance_array__NativeArray*)var138)->values[7] = (val*) var130;
3477 ((struct instance_array__NativeArray*)var138)->values[8] = (val*) var132;
3478 ((void (*)(val*, val*, long))(var136->class->vft[COLOR_array__Array__with_native]))(var136, var138, var137) /* with_native on <var136:Array[Object]>*/;
3479 }
3480 var139 = ((val* (*)(val*))(var136->class->vft[COLOR_string__Object__to_s]))(var136) /* to_s on <var136:Array[Object]>*/;
3481 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var139) /* add on <self:GlobalCompilerVisitor>*/;
3482 goto RET_LABEL;
3483 } else {
3484 }
3485 }
3486 }
3487 RET_LABEL:;
3488 }
3489 /* method global_compiler#GlobalCompilerVisitor#native_array_def for (self: Object, String, nullable MType, Array[RuntimeVariable]) */
3490 void VIRTUAL_global_compiler__GlobalCompilerVisitor__native_array_def(val* self, val* p0, val* p1, val* p2) {
3491 global_compiler__GlobalCompilerVisitor__native_array_def(self, p0, p1, p2);
3492 RET_LABEL:;
3493 }
3494 /* method global_compiler#GlobalCompilerVisitor#calloc_array for (self: GlobalCompilerVisitor, MType, Array[RuntimeVariable]) */
3495 void global_compiler__GlobalCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
3496 val* var_ret_type /* var ret_type: MType */;
3497 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
3498 static val* varonce;
3499 val* var /* : String */;
3500 char* var1 /* : NativeString */;
3501 long var2 /* : Int */;
3502 val* var3 /* : String */;
3503 val* var4 /* : String */;
3504 static val* varonce5;
3505 val* var6 /* : String */;
3506 char* var7 /* : NativeString */;
3507 long var8 /* : Int */;
3508 val* var9 /* : String */;
3509 long var10 /* : Int */;
3510 val* var11 /* : nullable Object */;
3511 static val* varonce12;
3512 val* var13 /* : String */;
3513 char* var14 /* : NativeString */;
3514 long var15 /* : Int */;
3515 val* var16 /* : String */;
3516 val* var17 /* : Array[Object] */;
3517 long var18 /* : Int */;
3518 val* var19 /* : NativeArray[Object] */;
3519 val* var20 /* : String */;
3520 val* var21 /* : RuntimeVariable */;
3521 var_ret_type = p0;
3522 var_arguments = p1;
3523 if (varonce) {
3524 var = varonce;
3525 } else {
3526 var1 = "NEW_";
3527 var2 = 4;
3528 var3 = string__NativeString__to_s_with_length(var1, var2);
3529 var = var3;
3530 varonce = var;
3531 }
3532 var4 = ((val* (*)(val*))(var_ret_type->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_ret_type) /* c_name on <var_ret_type:MType>*/;
3533 if (varonce5) {
3534 var6 = varonce5;
3535 } else {
3536 var7 = "(";
3537 var8 = 1;
3538 var9 = string__NativeString__to_s_with_length(var7, var8);
3539 var6 = var9;
3540 varonce5 = var6;
3541 }
3542 var10 = 1;
3543 var11 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var10) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3544 if (varonce12) {
3545 var13 = varonce12;
3546 } else {
3547 var14 = ")";
3548 var15 = 1;
3549 var16 = string__NativeString__to_s_with_length(var14, var15);
3550 var13 = var16;
3551 varonce12 = var13;
3552 }
3553 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
3554 { /* var17 = array_instance Array[Object] */
3555 var18 = 5;
3556 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
3557 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var;
3558 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var4;
3559 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var6;
3560 ((struct instance_array__NativeArray*)var19)->values[3] = (val*) var11;
3561 ((struct instance_array__NativeArray*)var19)->values[4] = (val*) var13;
3562 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
3563 }
3564 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
3565 var21 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var20, var_ret_type) /* new_expr on <self:GlobalCompilerVisitor>*/;
3566 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var21) /* ret on <self:GlobalCompilerVisitor>*/;
3567 RET_LABEL:;
3568 }
3569 /* method global_compiler#GlobalCompilerVisitor#calloc_array for (self: Object, MType, Array[RuntimeVariable]) */
3570 void VIRTUAL_global_compiler__GlobalCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
3571 global_compiler__GlobalCompilerVisitor__calloc_array(self, p0, p1);
3572 RET_LABEL:;
3573 }
3574 /* method global_compiler#GlobalCompilerVisitor#send for (self: GlobalCompilerVisitor, MMethod, Array[RuntimeVariable]): nullable RuntimeVariable */
3575 val* global_compiler__GlobalCompilerVisitor__send(val* self, val* p0, val* p1) {
3576 val* var /* : nullable RuntimeVariable */;
3577 val* var_m /* var m: MMethod */;
3578 val* var_args /* var args: Array[RuntimeVariable] */;
3579 val* var1 /* : nullable Object */;
3580 val* var2 /* : Array[MClassType] */;
3581 val* var_types /* var types: Array[MClassType] */;
3582 val* var3 /* : MPropDef */;
3583 val* var4 /* : nullable MSignature */;
3584 val* var5 /* : nullable MType */;
3585 val* var_ret /* var ret: nullable MType */;
3586 short int var6 /* : Bool */;
3587 val* var7 /* : nullable Object */;
3588 val* var8 /* : MType */;
3589 val* var9 /* : RuntimeVariable */;
3590 val* var_res /* var res: nullable RuntimeVariable */;
3591 val* var10 /* : null */;
3592 short int var11 /* : Bool */;
3593 val* var12 /* : null */;
3594 val* var13 /* : nullable Object */;
3595 val* var14 /* : MType */;
3596 val* var15 /* : RuntimeVariable */;
3597 static val* varonce;
3598 val* var16 /* : String */;
3599 char* var17 /* : NativeString */;
3600 long var18 /* : Int */;
3601 val* var19 /* : String */;
3602 static val* varonce20;
3603 val* var21 /* : String */;
3604 char* var22 /* : NativeString */;
3605 long var23 /* : Int */;
3606 val* var24 /* : String */;
3607 val* var25 /* : nullable Object */;
3608 val* var26 /* : String */;
3609 static val* varonce27;
3610 val* var28 /* : String */;
3611 char* var29 /* : NativeString */;
3612 long var30 /* : Int */;
3613 val* var31 /* : String */;
3614 val* var32 /* : Array[Object] */;
3615 long var33 /* : Int */;
3616 val* var34 /* : NativeArray[Object] */;
3617 val* var35 /* : String */;
3618 val* var36 /* : nullable Object */;
3619 val* var37 /* : MType */;
3620 val* var38 /* : String */;
3621 static val* varonce39;
3622 val* var40 /* : String */;
3623 char* var41 /* : NativeString */;
3624 long var42 /* : Int */;
3625 val* var43 /* : String */;
3626 short int var44 /* : Bool */;
3627 val* var45 /* : nullable Object */;
3628 val* var46 /* : MType */;
3629 short int var47 /* : Bool */;
3630 int cltype;
3631 int idtype;
3632 const char* var_class_name;
3633 val* var_mclasstype /* var mclasstype: MClassType */;
3634 val* var48 /* : AbstractCompiler */;
3635 val* var49 /* : RapidTypeAnalysis */;
3636 val* var50 /* : HashSet[MClassType] */;
3637 short int var51 /* : Bool */;
3638 short int var52 /* : Bool */;
3639 static val* varonce53;
3640 val* var54 /* : String */;
3641 char* var55 /* : NativeString */;
3642 long var56 /* : Int */;
3643 val* var57 /* : String */;
3644 static val* varonce58;
3645 val* var59 /* : String */;
3646 char* var60 /* : NativeString */;
3647 long var61 /* : Int */;
3648 val* var62 /* : String */;
3649 val* var63 /* : Array[Object] */;
3650 long var64 /* : Int */;
3651 val* var65 /* : NativeArray[Object] */;
3652 val* var66 /* : String */;
3653 val* var67 /* : AbstractCompiler */;
3654 val* var68 /* : MModule */;
3655 val* var69 /* : MPropDef */;
3656 val* var_propdef /* var propdef: MMethodDef */;
3657 val* var70 /* : nullable RuntimeVariable */;
3658 val* var_res2 /* var res2: nullable RuntimeVariable */;
3659 val* var71 /* : null */;
3660 short int var72 /* : Bool */;
3661 short int var73 /* : Bool */;
3662 short int var74 /* : Bool */;
3663 val* var75 /* : AbstractCompiler */;
3664 val* var76 /* : ModelBuilder */;
3665 val* var77 /* : ToolContext */;
3666 val* var78 /* : OptionBool */;
3667 val* var79 /* : nullable Object */;
3668 short int var80 /* : Bool */;
3669 short int var81 /* : Bool */;
3670 short int var_ /* var : Bool */;
3671 val* var82 /* : String */;
3672 static val* varonce83;
3673 val* var84 /* : String */;
3674 char* var85 /* : NativeString */;
3675 long var86 /* : Int */;
3676 val* var87 /* : String */;
3677 short int var88 /* : Bool */;
3678 short int var_89 /* var : Bool */;
3679 val* var90 /* : String */;
3680 static val* varonce91;
3681 val* var92 /* : String */;
3682 char* var93 /* : NativeString */;
3683 long var94 /* : Int */;
3684 val* var95 /* : String */;
3685 short int var96 /* : Bool */;
3686 short int var_consider_null /* var consider_null: Bool */;
3687 short int var97 /* : Bool */;
3688 short int var98 /* : Bool */;
3689 val* var99 /* : nullable Object */;
3690 val* var100 /* : MType */;
3691 short int var101 /* : Bool */;
3692 int cltype102;
3693 int idtype103;
3694 short int var_104 /* var : Bool */;
3695 val* var105 /* : nullable Object */;
3696 val* var106 /* : MType */;
3697 short int var107 /* : Bool */;
3698 int cltype108;
3699 int idtype109;
3700 short int var_110 /* var : Bool */;
3701 static val* varonce111;
3702 val* var112 /* : String */;
3703 char* var113 /* : NativeString */;
3704 long var114 /* : Int */;
3705 val* var115 /* : String */;
3706 val* var116 /* : nullable Object */;
3707 static val* varonce117;
3708 val* var118 /* : String */;
3709 char* var119 /* : NativeString */;
3710 long var120 /* : Int */;
3711 val* var121 /* : String */;
3712 val* var122 /* : Array[Object] */;
3713 long var123 /* : Int */;
3714 val* var124 /* : NativeArray[Object] */;
3715 val* var125 /* : String */;
3716 val* var126 /* : String */;
3717 static val* varonce127;
3718 val* var128 /* : String */;
3719 char* var129 /* : NativeString */;
3720 long var130 /* : Int */;
3721 val* var131 /* : String */;
3722 short int var132 /* : Bool */;
3723 val* var133 /* : null */;
3724 short int var134 /* : Bool */;
3725 long var135 /* : Int */;
3726 val* var136 /* : nullable Object */;
3727 val* var137 /* : MType */;
3728 short int var138 /* : Bool */;
3729 int cltype139;
3730 int idtype140;
3731 static val* varonce141;
3732 val* var142 /* : String */;
3733 char* var143 /* : NativeString */;
3734 long var144 /* : Int */;
3735 val* var145 /* : String */;
3736 long var146 /* : Int */;
3737 val* var147 /* : nullable Object */;
3738 static val* varonce148;
3739 val* var149 /* : String */;
3740 char* var150 /* : NativeString */;
3741 long var151 /* : Int */;
3742 val* var152 /* : String */;
3743 val* var153 /* : Array[Object] */;
3744 long var154 /* : Int */;
3745 val* var155 /* : NativeArray[Object] */;
3746 val* var156 /* : String */;
3747 long var157 /* : Int */;
3748 val* var158 /* : nullable Object */;
3749 val* var159 /* : MType */;
3750 short int var160 /* : Bool */;
3751 int cltype161;
3752 int idtype162;
3753 static val* varonce163;
3754 val* var164 /* : String */;
3755 char* var165 /* : NativeString */;
3756 long var166 /* : Int */;
3757 val* var167 /* : String */;
3758 val* var168 /* : Array[Object] */;
3759 long var169 /* : Int */;
3760 val* var170 /* : NativeArray[Object] */;
3761 val* var171 /* : String */;
3762 static val* varonce172;
3763 val* var173 /* : String */;
3764 char* var174 /* : NativeString */;
3765 long var175 /* : Int */;
3766 val* var176 /* : String */;
3767 long var177 /* : Int */;
3768 val* var178 /* : nullable Object */;
3769 val* var179 /* : String */;
3770 static val* varonce180;
3771 val* var181 /* : String */;
3772 char* var182 /* : NativeString */;
3773 long var183 /* : Int */;
3774 val* var184 /* : String */;
3775 val* var185 /* : Array[Object] */;
3776 long var186 /* : Int */;
3777 val* var187 /* : NativeArray[Object] */;
3778 val* var188 /* : String */;
3779 val* var189 /* : String */;
3780 static val* varonce190;
3781 val* var191 /* : String */;
3782 char* var192 /* : NativeString */;
3783 long var193 /* : Int */;
3784 val* var194 /* : String */;
3785 short int var195 /* : Bool */;
3786 val* var196 /* : null */;
3787 short int var197 /* : Bool */;
3788 long var198 /* : Int */;
3789 val* var199 /* : nullable Object */;
3790 val* var200 /* : MType */;
3791 short int var201 /* : Bool */;
3792 int cltype202;
3793 int idtype203;
3794 static val* varonce204;
3795 val* var205 /* : String */;
3796 char* var206 /* : NativeString */;
3797 long var207 /* : Int */;
3798 val* var208 /* : String */;
3799 long var209 /* : Int */;
3800 val* var210 /* : nullable Object */;
3801 static val* varonce211;
3802 val* var212 /* : String */;
3803 char* var213 /* : NativeString */;
3804 long var214 /* : Int */;
3805 val* var215 /* : String */;
3806 val* var216 /* : Array[Object] */;
3807 long var217 /* : Int */;
3808 val* var218 /* : NativeArray[Object] */;
3809 val* var219 /* : String */;
3810 long var220 /* : Int */;
3811 val* var221 /* : nullable Object */;
3812 val* var222 /* : MType */;
3813 short int var223 /* : Bool */;
3814 int cltype224;
3815 int idtype225;
3816 static val* varonce226;
3817 val* var227 /* : String */;
3818 char* var228 /* : NativeString */;
3819 long var229 /* : Int */;
3820 val* var230 /* : String */;
3821 val* var231 /* : Array[Object] */;
3822 long var232 /* : Int */;
3823 val* var233 /* : NativeArray[Object] */;
3824 val* var234 /* : String */;
3825 static val* varonce235;
3826 val* var236 /* : String */;
3827 char* var237 /* : NativeString */;
3828 long var238 /* : Int */;
3829 val* var239 /* : String */;
3830 long var240 /* : Int */;
3831 val* var241 /* : nullable Object */;
3832 val* var242 /* : String */;
3833 static val* varonce243;
3834 val* var244 /* : String */;
3835 char* var245 /* : NativeString */;
3836 long var246 /* : Int */;
3837 val* var247 /* : String */;
3838 val* var248 /* : Array[Object] */;
3839 long var249 /* : Int */;
3840 val* var250 /* : NativeArray[Object] */;
3841 val* var251 /* : String */;
3842 static val* varonce252;
3843 val* var253 /* : String */;
3844 char* var254 /* : NativeString */;
3845 long var255 /* : Int */;
3846 val* var256 /* : String */;
3847 static val* varonce257;
3848 val* var258 /* : String */;
3849 char* var259 /* : NativeString */;
3850 long var260 /* : Int */;
3851 val* var261 /* : String */;
3852 short int var262 /* : Bool */;
3853 static val* varonce263;
3854 val* var264 /* : String */;
3855 char* var265 /* : NativeString */;
3856 long var266 /* : Int */;
3857 val* var267 /* : String */;
3858 static val* varonce268;
3859 val* var269 /* : String */;
3860 char* var270 /* : NativeString */;
3861 long var271 /* : Int */;
3862 val* var272 /* : String */;
3863 val* var273 /* : nullable Object */;
3864 val* var274 /* : String */;
3865 static val* varonce275;
3866 val* var276 /* : String */;
3867 char* var277 /* : NativeString */;
3868 long var278 /* : Int */;
3869 val* var279 /* : String */;
3870 static val* varonce280;
3871 val* var281 /* : String */;
3872 char* var282 /* : NativeString */;
3873 long var283 /* : Int */;
3874 val* var284 /* : String */;
3875 val* var285 /* : Array[Object] */;
3876 long var286 /* : Int */;
3877 val* var287 /* : NativeArray[Object] */;
3878 val* var288 /* : String */;
3879 val* var289 /* : nullable Object */;
3880 static val* varonce290;
3881 val* var291 /* : String */;
3882 char* var292 /* : NativeString */;
3883 long var293 /* : Int */;
3884 val* var294 /* : String */;
3885 static val* varonce295;
3886 val* var296 /* : String */;
3887 char* var297 /* : NativeString */;
3888 long var298 /* : Int */;
3889 val* var299 /* : String */;
3890 val* var300 /* : nullable Object */;
3891 static val* varonce301;
3892 val* var302 /* : String */;
3893 char* var303 /* : NativeString */;
3894 long var304 /* : Int */;
3895 val* var305 /* : String */;
3896 val* var306 /* : Array[Object] */;
3897 long var307 /* : Int */;
3898 val* var308 /* : NativeArray[Object] */;
3899 val* var309 /* : String */;
3900 val* var310 /* : nullable Object */;
3901 val* var_last /* var last: MClassType */;
3902 val* var311 /* : null */;
3903 val* var_defaultpropdef /* var defaultpropdef: nullable MMethodDef */;
3904 val* var312 /* : Iterator[nullable Object] */;
3905 short int var313 /* : Bool */;
3906 val* var314 /* : nullable Object */;
3907 val* var_t /* var t: MClassType */;
3908 val* var315 /* : AbstractCompiler */;
3909 val* var316 /* : MModule */;
3910 val* var317 /* : MPropDef */;
3911 val* var_propdef318 /* var propdef: MMethodDef */;
3912 short int var319 /* : Bool */;
3913 val* var320 /* : MClassDef */;
3914 val* var321 /* : MClass */;
3915 val* var322 /* : String */;
3916 static val* varonce323;
3917 val* var324 /* : String */;
3918 char* var325 /* : NativeString */;
3919 long var326 /* : Int */;
3920 val* var327 /* : String */;
3921 short int var328 /* : Bool */;
3922 short int var_329 /* var : Bool */;
3923 val* var330 /* : String */;
3924 static val* varonce331;
3925 val* var332 /* : String */;
3926 char* var333 /* : NativeString */;
3927 long var334 /* : Int */;
3928 val* var335 /* : String */;
3929 short int var336 /* : Bool */;
3930 short int var337 /* : Bool */;
3931 short int var338 /* : Bool */;
3932 val* var339 /* : AbstractCompiler */;
3933 short int var340 /* : Bool */;
3934 short int var341 /* : Bool */;
3935 short int var_342 /* var : Bool */;
3936 short int var343 /* : Bool */;
3937 short int var_344 /* var : Bool */;
3938 val* var345 /* : null */;
3939 short int var346 /* : Bool */;
3940 static val* varonce347;
3941 val* var348 /* : String */;
3942 char* var349 /* : NativeString */;
3943 long var350 /* : Int */;
3944 val* var351 /* : String */;
3945 static val* varonce352;
3946 val* var353 /* : String */;
3947 char* var354 /* : NativeString */;
3948 long var355 /* : Int */;
3949 val* var356 /* : String */;
3950 val* var357 /* : Array[Object] */;
3951 long var358 /* : Int */;
3952 val* var359 /* : NativeArray[Object] */;
3953 val* var360 /* : String */;
3954 static val* varonce361;
3955 val* var362 /* : String */;
3956 char* var363 /* : NativeString */;
3957 long var364 /* : Int */;
3958 val* var365 /* : String */;
3959 val* var366 /* : AbstractCompiler */;
3960 val* var367 /* : String */;
3961 static val* varonce368;
3962 val* var369 /* : String */;
3963 char* var370 /* : NativeString */;
3964 long var371 /* : Int */;
3965 val* var372 /* : String */;
3966 static val* varonce373;
3967 val* var374 /* : String */;
3968 char* var375 /* : NativeString */;
3969 long var376 /* : Int */;
3970 val* var377 /* : String */;
3971 val* var378 /* : Array[Object] */;
3972 long var379 /* : Int */;
3973 val* var380 /* : NativeArray[Object] */;
3974 val* var381 /* : String */;
3975 val* var382 /* : nullable RuntimeVariable */;
3976 val* var_res2383 /* var res2: nullable RuntimeVariable */;
3977 val* var384 /* : null */;
3978 short int var385 /* : Bool */;
3979 static val* varonce386;
3980 val* var387 /* : String */;
3981 char* var388 /* : NativeString */;
3982 long var389 /* : Int */;
3983 val* var390 /* : String */;
3984 val* var391 /* : null */;
3985 short int var392 /* : Bool */;
3986 static val* varonce393;
3987 val* var394 /* : String */;
3988 char* var395 /* : NativeString */;
3989 long var396 /* : Int */;
3990 val* var397 /* : String */;
3991 val* var398 /* : MClassDef */;
3992 val* var399 /* : MClassType */;
3993 val* var400 /* : nullable RuntimeVariable */;
3994 val* var_res2401 /* var res2: nullable RuntimeVariable */;
3995 val* var402 /* : null */;
3996 short int var403 /* : Bool */;
3997 val* var404 /* : AbstractCompiler */;
3998 short int var405 /* : Bool */;
3999 static val* varonce406;
4000 val* var407 /* : String */;
4001 char* var408 /* : NativeString */;
4002 long var409 /* : Int */;
4003 val* var410 /* : String */;
4004 val* var411 /* : nullable Object */;
4005 static val* varonce412;
4006 val* var413 /* : String */;
4007 char* var414 /* : NativeString */;
4008 long var415 /* : Int */;
4009 val* var416 /* : String */;
4010 var_m = p0;
4011 var_args = p1;
4012 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4013 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var1) /* collect_types on <self:GlobalCompilerVisitor>*/;
4014 var_types = var2;
4015 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__intro]))(var_m) /* intro on <var_m:MMethod>*/;
4016 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MMethodDef__msignature]))(var3) /* msignature on <var3:MPropDef(MMethodDef)>*/;
4017 if (var4 == NULL) {
4018 fprintf(stderr, "Runtime error: %s", "Reciever is null");
4019 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 332);
4020 show_backtrace(1);
4021 } else {
4022 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_model__MSignature__return_mtype]))(var4) /* return_mtype on <var4:nullable MSignature>*/;
4023 }
4024 var_ret = var5;
4025 var6 = ((short int (*)(val*))(var_m->class->vft[COLOR_model__MMethod__is_new]))(var_m) /* is_new on <var_m:MMethod>*/;
4026 if (var6){
4027 var7 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4028 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var7) /* mtype on <var7:nullable Object(RuntimeVariable)>*/;
4029 var_ret = var8;
4030 var9 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
4031 var_res = var9;
4032 } else {
4033 var10 = NULL;
4034 if (var_ret == NULL) {
4035 var11 = 1; /* is null */
4036 } else {
4037 var11 = 0; /* arg is null but recv is not */
4038 }
4039 if (var11){
4040 var12 = NULL;
4041 var_res = var12;
4042 } else {
4043 var13 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4044 var14 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var13) /* resolve_for on <self:GlobalCompilerVisitor>*/;
4045 var_ret = var14;
4046 var15 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
4047 var_res = var15;
4048 }
4049 }
4050 if (varonce) {
4051 var16 = varonce;
4052 } else {
4053 var17 = "/* send ";
4054 var18 = 8;
4055 var19 = string__NativeString__to_s_with_length(var17, var18);
4056 var16 = var19;
4057 varonce = var16;
4058 }
4059 if (varonce20) {
4060 var21 = varonce20;
4061 } else {
4062 var22 = " on ";
4063 var23 = 4;
4064 var24 = string__NativeString__to_s_with_length(var22, var23);
4065 var21 = var24;
4066 varonce20 = var21;
4067 }
4068 var25 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4069 var26 = ((val* (*)(val*))(var25->class->vft[COLOR_string__Object__inspect]))(var25) /* inspect on <var25:nullable Object(RuntimeVariable)>*/;
4070 if (varonce27) {
4071 var28 = varonce27;
4072 } else {
4073 var29 = " */";
4074 var30 = 3;
4075 var31 = string__NativeString__to_s_with_length(var29, var30);
4076 var28 = var31;
4077 varonce27 = var28;
4078 }
4079 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
4080 { /* var32 = array_instance Array[Object] */
4081 var33 = 5;
4082 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
4083 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var16;
4084 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_m;
4085 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var21;
4086 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var26;
4087 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
4088 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
4089 }
4090 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
4091 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var35) /* add on <self:GlobalCompilerVisitor>*/;
4092 var36 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4093 var37 = ((val* (*)(val*))(var36->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var36) /* mtype on <var36:nullable Object(RuntimeVariable)>*/;
4094 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_compiler__MType__ctype]))(var37) /* ctype on <var37:MType>*/;
4095 if (varonce39) {
4096 var40 = varonce39;
4097 } else {
4098 var41 = "val*";
4099 var42 = 4;
4100 var43 = string__NativeString__to_s_with_length(var41, var42);
4101 var40 = var43;
4102 varonce39 = var40;
4103 }
4104 var44 = ((short int (*)(val*, val*))(var38->class->vft[COLOR_kernel__Object___33d_61d]))(var38, var40) /* != on <var38:String>*/;
4105 if (var44){
4106 var45 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4107 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var45) /* mtype on <var45:nullable Object(RuntimeVariable)>*/;
4108 /* <var46:MType> isa MClassType */
4109 cltype = type_model__MClassType.color;
4110 idtype = type_model__MClassType.id;
4111 if(cltype >= var46->type->table_size) {
4112 var47 = 0;
4113 } else {
4114 var47 = var46->type->type_table[cltype] == idtype;
4115 }
4116 if (!var47) {
4117 var_class_name = var46 == NULL ? "null" : var46->type->name;
4118 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
4119 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 345);
4120 show_backtrace(1);
4121 }
4122 var_mclasstype = var46;
4123 var48 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4124 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var48) /* runtime_type_analysis on <var48:AbstractCompiler(GlobalCompiler)>*/;
4125 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var49) /* live_types on <var49:RapidTypeAnalysis>*/;
4126 var51 = ((short int (*)(val*, val*))(var50->class->vft[COLOR_abstract_collection__Collection__has]))(var50, var_mclasstype) /* has on <var50:HashSet[MClassType]>*/;
4127 var52 = !var51;
4128 if (var52){
4129 if (varonce53) {
4130 var54 = varonce53;
4131 } else {
4132 var55 = "/* skip, no method ";
4133 var56 = 19;
4134 var57 = string__NativeString__to_s_with_length(var55, var56);
4135 var54 = var57;
4136 varonce53 = var54;
4137 }
4138 if (varonce58) {
4139 var59 = varonce58;
4140 } else {
4141 var60 = " */";
4142 var61 = 3;
4143 var62 = string__NativeString__to_s_with_length(var60, var61);
4144 var59 = var62;
4145 varonce58 = var59;
4146 }
4147 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
4148 { /* var63 = array_instance Array[Object] */
4149 var64 = 3;
4150 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
4151 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var54;
4152 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var_m;
4153 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var59;
4154 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
4155 }
4156 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
4157 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var66) /* add on <self:GlobalCompilerVisitor>*/;
4158 var = var_res;
4159 goto RET_LABEL;
4160 } else {
4161 }
4162 var67 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4163 var68 = ((val* (*)(val*))(var67->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var67) /* mainmodule on <var67:AbstractCompiler(GlobalCompiler)>*/;
4164 var69 = ((val* (*)(val*, val*, val*))(var_m->class->vft[COLOR_model__MProperty__lookup_first_definition]))(var_m, var68, var_mclasstype) /* lookup_first_definition on <var_m:MMethod>*/;
4165 var_propdef = var69;
4166 var70 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__call]))(self, var_propdef, var_mclasstype, var_args) /* call on <self:GlobalCompilerVisitor>*/;
4167 var_res2 = var70;
4168 var71 = NULL;
4169 if (var_res == NULL) {
4170 var72 = 0; /* is null */
4171 } else {
4172 var72 = 1; /* arg is null and recv is not */
4173 }
4174 if (var72){
4175 if (var_res2 == NULL) {
4176 fprintf(stderr, "Runtime error: %s", "Cast failed");
4177 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 352);
4178 show_backtrace(1);
4179 }
4180 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
4181 } else {
4182 }
4183 var = var_res;
4184 goto RET_LABEL;
4185 } else {
4186 }
4187 var75 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4188 var76 = ((val* (*)(val*))(var75->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var75) /* modelbuilder on <var75:AbstractCompiler(GlobalCompiler)>*/;
4189 var77 = ((val* (*)(val*))(var76->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var76) /* toolcontext on <var76:ModelBuilder>*/;
4190 var78 = ((val* (*)(val*))(var77->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_other]))(var77) /* opt_no_check_other on <var77:ToolContext>*/;
4191 var79 = ((val* (*)(val*))(var78->class->vft[COLOR_opts__Option__value]))(var78) /* value on <var78:OptionBool>*/;
4192 var80 = ((struct instance_kernel__Bool*)var79)->value; /* autounbox from nullable Object to Bool */;
4193 var81 = !var80;
4194 var_ = var81;
4195 if (var81){
4196 var74 = var_;
4197 } else {
4198 var82 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4199 if (varonce83) {
4200 var84 = varonce83;
4201 } else {
4202 var85 = "==";
4203 var86 = 2;
4204 var87 = string__NativeString__to_s_with_length(var85, var86);
4205 var84 = var87;
4206 varonce83 = var84;
4207 }
4208 var88 = ((short int (*)(val*, val*))(var82->class->vft[COLOR_kernel__Object___61d_61d]))(var82, var84) /* == on <var82:String>*/;
4209 var74 = var88;
4210 }
4211 var_89 = var74;
4212 if (var74){
4213 var73 = var_89;
4214 } else {
4215 var90 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4216 if (varonce91) {
4217 var92 = varonce91;
4218 } else {
4219 var93 = "!=";
4220 var94 = 2;
4221 var95 = string__NativeString__to_s_with_length(var93, var94);
4222 var92 = var95;
4223 varonce91 = var92;
4224 }
4225 var96 = ((short int (*)(val*, val*))(var90->class->vft[COLOR_kernel__Object___61d_61d]))(var90, var92) /* == on <var90:String>*/;
4226 var73 = var96;
4227 }
4228 var_consider_null = var73;
4229 var99 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4230 var100 = ((val* (*)(val*))(var99->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var99) /* mcasttype on <var99:nullable Object(RuntimeVariable)>*/;
4231 /* <var100:MType> isa MNullableType */
4232 cltype102 = type_model__MNullableType.color;
4233 idtype103 = type_model__MNullableType.id;
4234 if(cltype102 >= var100->type->table_size) {
4235 var101 = 0;
4236 } else {
4237 var101 = var100->type->type_table[cltype102] == idtype103;
4238 }
4239 var_104 = var101;
4240 if (var101){
4241 var98 = var_104;
4242 } else {
4243 var105 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4244 var106 = ((val* (*)(val*))(var105->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var105) /* mcasttype on <var105:nullable Object(RuntimeVariable)>*/;
4245 /* <var106:MType> isa MNullType */
4246 cltype108 = type_model__MNullType.color;
4247 idtype109 = type_model__MNullType.id;
4248 if(cltype108 >= var106->type->table_size) {
4249 var107 = 0;
4250 } else {
4251 var107 = var106->type->type_table[cltype108] == idtype109;
4252 }
4253 var98 = var107;
4254 }
4255 var_110 = var98;
4256 if (var98){
4257 var97 = var_consider_null;
4258 } else {
4259 var97 = var_110;
4260 }
4261 if (var97){
4262 if (varonce111) {
4263 var112 = varonce111;
4264 } else {
4265 var113 = "if (";
4266 var114 = 4;
4267 var115 = string__NativeString__to_s_with_length(var113, var114);
4268 var112 = var115;
4269 varonce111 = var112;
4270 }
4271 var116 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4272 if (varonce117) {
4273 var118 = varonce117;
4274 } else {
4275 var119 = " == NULL) { /* Special null case */";
4276 var120 = 35;
4277 var121 = string__NativeString__to_s_with_length(var119, var120);
4278 var118 = var121;
4279 varonce117 = var118;
4280 }
4281 var122 = NEW_array__Array(&type_array__Arraykernel__Object);
4282 { /* var122 = array_instance Array[Object] */
4283 var123 = 3;
4284 var124 = NEW_array__NativeArray(var123, &type_array__NativeArraykernel__Object);
4285 ((struct instance_array__NativeArray*)var124)->values[0] = (val*) var112;
4286 ((struct instance_array__NativeArray*)var124)->values[1] = (val*) var116;
4287 ((struct instance_array__NativeArray*)var124)->values[2] = (val*) var118;
4288 ((void (*)(val*, val*, long))(var122->class->vft[COLOR_array__Array__with_native]))(var122, var124, var123) /* with_native on <var122:Array[Object]>*/;
4289 }
4290 var125 = ((val* (*)(val*))(var122->class->vft[COLOR_string__Object__to_s]))(var122) /* to_s on <var122:Array[Object]>*/;
4291 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var125) /* add on <self:GlobalCompilerVisitor>*/;
4292 var126 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4293 if (varonce127) {
4294 var128 = varonce127;
4295 } else {
4296 var129 = "==";
4297 var130 = 2;
4298 var131 = string__NativeString__to_s_with_length(var129, var130);
4299 var128 = var131;
4300 varonce127 = var128;
4301 }
4302 var132 = ((short int (*)(val*, val*))(var126->class->vft[COLOR_kernel__Object___61d_61d]))(var126, var128) /* == on <var126:String>*/;
4303 if (var132){
4304 var133 = NULL;
4305 if (var_res == NULL) {
4306 var134 = 0; /* is null */
4307 } else {
4308 var134 = 1; /* arg is null and recv is not */
4309 }
4310 if (!var134) {
4311 fprintf(stderr, "Runtime error: %s", "Assert failed");
4312 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 360);
4313 show_backtrace(1);
4314 }
4315 var135 = 1;
4316 var136 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var135) /* [] on <var_args:Array[RuntimeVariable]>*/;
4317 var137 = ((val* (*)(val*))(var136->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var136) /* mcasttype on <var136:nullable Object(RuntimeVariable)>*/;
4318 /* <var137:MType> isa MNullableType */
4319 cltype139 = type_model__MNullableType.color;
4320 idtype140 = type_model__MNullableType.id;
4321 if(cltype139 >= var137->type->table_size) {
4322 var138 = 0;
4323 } else {
4324 var138 = var137->type->type_table[cltype139] == idtype140;
4325 }
4326 if (var138){
4327 if (varonce141) {
4328 var142 = varonce141;
4329 } else {
4330 var143 = " = (";
4331 var144 = 4;
4332 var145 = string__NativeString__to_s_with_length(var143, var144);
4333 var142 = var145;
4334 varonce141 = var142;
4335 }
4336 var146 = 1;
4337 var147 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var146) /* [] on <var_args:Array[RuntimeVariable]>*/;
4338 if (varonce148) {
4339 var149 = varonce148;
4340 } else {
4341 var150 = " == NULL);";
4342 var151 = 10;
4343 var152 = string__NativeString__to_s_with_length(var150, var151);
4344 var149 = var152;
4345 varonce148 = var149;
4346 }
4347 var153 = NEW_array__Array(&type_array__Arraykernel__Object);
4348 { /* var153 = array_instance Array[Object] */
4349 var154 = 4;
4350 var155 = NEW_array__NativeArray(var154, &type_array__NativeArraykernel__Object);
4351 ((struct instance_array__NativeArray*)var155)->values[0] = (val*) var_res;
4352 ((struct instance_array__NativeArray*)var155)->values[1] = (val*) var142;
4353 ((struct instance_array__NativeArray*)var155)->values[2] = (val*) var147;
4354 ((struct instance_array__NativeArray*)var155)->values[3] = (val*) var149;
4355 ((void (*)(val*, val*, long))(var153->class->vft[COLOR_array__Array__with_native]))(var153, var155, var154) /* with_native on <var153:Array[Object]>*/;
4356 }
4357 var156 = ((val* (*)(val*))(var153->class->vft[COLOR_string__Object__to_s]))(var153) /* to_s on <var153:Array[Object]>*/;
4358 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var156) /* add on <self:GlobalCompilerVisitor>*/;
4359 } else {
4360 var157 = 1;
4361 var158 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var157) /* [] on <var_args:Array[RuntimeVariable]>*/;
4362 var159 = ((val* (*)(val*))(var158->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var158) /* mcasttype on <var158:nullable Object(RuntimeVariable)>*/;
4363 /* <var159:MType> isa MNullType */
4364 cltype161 = type_model__MNullType.color;
4365 idtype162 = type_model__MNullType.id;
4366 if(cltype161 >= var159->type->table_size) {
4367 var160 = 0;
4368 } else {
4369 var160 = var159->type->type_table[cltype161] == idtype162;
4370 }
4371 if (var160){
4372 if (varonce163) {
4373 var164 = varonce163;
4374 } else {
4375 var165 = " = 1; /* is null */";
4376 var166 = 19;
4377 var167 = string__NativeString__to_s_with_length(var165, var166);
4378 var164 = var167;
4379 varonce163 = var164;
4380 }
4381 var168 = NEW_array__Array(&type_array__Arraykernel__Object);
4382 { /* var168 = array_instance Array[Object] */
4383 var169 = 2;
4384 var170 = NEW_array__NativeArray(var169, &type_array__NativeArraykernel__Object);
4385 ((struct instance_array__NativeArray*)var170)->values[0] = (val*) var_res;
4386 ((struct instance_array__NativeArray*)var170)->values[1] = (val*) var164;
4387 ((void (*)(val*, val*, long))(var168->class->vft[COLOR_array__Array__with_native]))(var168, var170, var169) /* with_native on <var168:Array[Object]>*/;
4388 }
4389 var171 = ((val* (*)(val*))(var168->class->vft[COLOR_string__Object__to_s]))(var168) /* to_s on <var168:Array[Object]>*/;
4390 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
4391 } else {
4392 if (varonce172) {
4393 var173 = varonce172;
4394 } else {
4395 var174 = " = 0; /* ";
4396 var175 = 9;
4397 var176 = string__NativeString__to_s_with_length(var174, var175);
4398 var173 = var176;
4399 varonce172 = var173;
4400 }
4401 var177 = 1;
4402 var178 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var177) /* [] on <var_args:Array[RuntimeVariable]>*/;
4403 var179 = ((val* (*)(val*))(var178->class->vft[COLOR_string__Object__inspect]))(var178) /* inspect on <var178:nullable Object(RuntimeVariable)>*/;
4404 if (varonce180) {
4405 var181 = varonce180;
4406 } else {
4407 var182 = " cannot be null */";
4408 var183 = 18;
4409 var184 = string__NativeString__to_s_with_length(var182, var183);
4410 var181 = var184;
4411 varonce180 = var181;
4412 }
4413 var185 = NEW_array__Array(&type_array__Arraykernel__Object);
4414 { /* var185 = array_instance Array[Object] */
4415 var186 = 4;
4416 var187 = NEW_array__NativeArray(var186, &type_array__NativeArraykernel__Object);
4417 ((struct instance_array__NativeArray*)var187)->values[0] = (val*) var_res;
4418 ((struct instance_array__NativeArray*)var187)->values[1] = (val*) var173;
4419 ((struct instance_array__NativeArray*)var187)->values[2] = (val*) var179;
4420 ((struct instance_array__NativeArray*)var187)->values[3] = (val*) var181;
4421 ((void (*)(val*, val*, long))(var185->class->vft[COLOR_array__Array__with_native]))(var185, var187, var186) /* with_native on <var185:Array[Object]>*/;
4422 }
4423 var188 = ((val* (*)(val*))(var185->class->vft[COLOR_string__Object__to_s]))(var185) /* to_s on <var185:Array[Object]>*/;
4424 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
4425 }
4426 }
4427 } else {
4428 var189 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4429 if (varonce190) {
4430 var191 = varonce190;
4431 } else {
4432 var192 = "!=";
4433 var193 = 2;
4434 var194 = string__NativeString__to_s_with_length(var192, var193);
4435 var191 = var194;
4436 varonce190 = var191;
4437 }
4438 var195 = ((short int (*)(val*, val*))(var189->class->vft[COLOR_kernel__Object___61d_61d]))(var189, var191) /* == on <var189:String>*/;
4439 if (var195){
4440 var196 = NULL;
4441 if (var_res == NULL) {
4442 var197 = 0; /* is null */
4443 } else {
4444 var197 = 1; /* arg is null and recv is not */
4445 }
4446 if (!var197) {
4447 fprintf(stderr, "Runtime error: %s", "Assert failed");
4448 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 369);
4449 show_backtrace(1);
4450 }
4451 var198 = 1;
4452 var199 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var198) /* [] on <var_args:Array[RuntimeVariable]>*/;
4453 var200 = ((val* (*)(val*))(var199->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var199) /* mcasttype on <var199:nullable Object(RuntimeVariable)>*/;
4454 /* <var200:MType> isa MNullableType */
4455 cltype202 = type_model__MNullableType.color;
4456 idtype203 = type_model__MNullableType.id;
4457 if(cltype202 >= var200->type->table_size) {
4458 var201 = 0;
4459 } else {
4460 var201 = var200->type->type_table[cltype202] == idtype203;
4461 }
4462 if (var201){
4463 if (varonce204) {
4464 var205 = varonce204;
4465 } else {
4466 var206 = " = (";
4467 var207 = 4;
4468 var208 = string__NativeString__to_s_with_length(var206, var207);
4469 var205 = var208;
4470 varonce204 = var205;
4471 }
4472 var209 = 1;
4473 var210 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var209) /* [] on <var_args:Array[RuntimeVariable]>*/;
4474 if (varonce211) {
4475 var212 = varonce211;
4476 } else {
4477 var213 = " != NULL);";
4478 var214 = 10;
4479 var215 = string__NativeString__to_s_with_length(var213, var214);
4480 var212 = var215;
4481 varonce211 = var212;
4482 }
4483 var216 = NEW_array__Array(&type_array__Arraykernel__Object);
4484 { /* var216 = array_instance Array[Object] */
4485 var217 = 4;
4486 var218 = NEW_array__NativeArray(var217, &type_array__NativeArraykernel__Object);
4487 ((struct instance_array__NativeArray*)var218)->values[0] = (val*) var_res;
4488 ((struct instance_array__NativeArray*)var218)->values[1] = (val*) var205;
4489 ((struct instance_array__NativeArray*)var218)->values[2] = (val*) var210;
4490 ((struct instance_array__NativeArray*)var218)->values[3] = (val*) var212;
4491 ((void (*)(val*, val*, long))(var216->class->vft[COLOR_array__Array__with_native]))(var216, var218, var217) /* with_native on <var216:Array[Object]>*/;
4492 }
4493 var219 = ((val* (*)(val*))(var216->class->vft[COLOR_string__Object__to_s]))(var216) /* to_s on <var216:Array[Object]>*/;
4494 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var219) /* add on <self:GlobalCompilerVisitor>*/;
4495 } else {
4496 var220 = 1;
4497 var221 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var220) /* [] on <var_args:Array[RuntimeVariable]>*/;
4498 var222 = ((val* (*)(val*))(var221->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var221) /* mcasttype on <var221:nullable Object(RuntimeVariable)>*/;
4499 /* <var222:MType> isa MNullType */
4500 cltype224 = type_model__MNullType.color;
4501 idtype225 = type_model__MNullType.id;
4502 if(cltype224 >= var222->type->table_size) {
4503 var223 = 0;
4504 } else {
4505 var223 = var222->type->type_table[cltype224] == idtype225;
4506 }
4507 if (var223){
4508 if (varonce226) {
4509 var227 = varonce226;
4510 } else {
4511 var228 = " = 0; /* is null */";
4512 var229 = 19;
4513 var230 = string__NativeString__to_s_with_length(var228, var229);
4514 var227 = var230;
4515 varonce226 = var227;
4516 }
4517 var231 = NEW_array__Array(&type_array__Arraykernel__Object);
4518 { /* var231 = array_instance Array[Object] */
4519 var232 = 2;
4520 var233 = NEW_array__NativeArray(var232, &type_array__NativeArraykernel__Object);
4521 ((struct instance_array__NativeArray*)var233)->values[0] = (val*) var_res;
4522 ((struct instance_array__NativeArray*)var233)->values[1] = (val*) var227;
4523 ((void (*)(val*, val*, long))(var231->class->vft[COLOR_array__Array__with_native]))(var231, var233, var232) /* with_native on <var231:Array[Object]>*/;
4524 }
4525 var234 = ((val* (*)(val*))(var231->class->vft[COLOR_string__Object__to_s]))(var231) /* to_s on <var231:Array[Object]>*/;
4526 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var234) /* add on <self:GlobalCompilerVisitor>*/;
4527 } else {
4528 if (varonce235) {
4529 var236 = varonce235;
4530 } else {
4531 var237 = " = 1; /* ";
4532 var238 = 9;
4533 var239 = string__NativeString__to_s_with_length(var237, var238);
4534 var236 = var239;
4535 varonce235 = var236;
4536 }
4537 var240 = 1;
4538 var241 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var240) /* [] on <var_args:Array[RuntimeVariable]>*/;
4539 var242 = ((val* (*)(val*))(var241->class->vft[COLOR_string__Object__inspect]))(var241) /* inspect on <var241:nullable Object(RuntimeVariable)>*/;
4540 if (varonce243) {
4541 var244 = varonce243;
4542 } else {
4543 var245 = " cannot be null */";
4544 var246 = 18;
4545 var247 = string__NativeString__to_s_with_length(var245, var246);
4546 var244 = var247;
4547 varonce243 = var244;
4548 }
4549 var248 = NEW_array__Array(&type_array__Arraykernel__Object);
4550 { /* var248 = array_instance Array[Object] */
4551 var249 = 4;
4552 var250 = NEW_array__NativeArray(var249, &type_array__NativeArraykernel__Object);
4553 ((struct instance_array__NativeArray*)var250)->values[0] = (val*) var_res;
4554 ((struct instance_array__NativeArray*)var250)->values[1] = (val*) var236;
4555 ((struct instance_array__NativeArray*)var250)->values[2] = (val*) var242;
4556 ((struct instance_array__NativeArray*)var250)->values[3] = (val*) var244;
4557 ((void (*)(val*, val*, long))(var248->class->vft[COLOR_array__Array__with_native]))(var248, var250, var249) /* with_native on <var248:Array[Object]>*/;
4558 }
4559 var251 = ((val* (*)(val*))(var248->class->vft[COLOR_string__Object__to_s]))(var248) /* to_s on <var248:Array[Object]>*/;
4560 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var251) /* add on <self:GlobalCompilerVisitor>*/;
4561 }
4562 }
4563 } else {
4564 if (varonce252) {
4565 var253 = varonce252;
4566 } else {
4567 var254 = "Reciever is null";
4568 var255 = 16;
4569 var256 = string__NativeString__to_s_with_length(var254, var255);
4570 var253 = var256;
4571 varonce252 = var253;
4572 }
4573 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var253) /* add_abort on <self:GlobalCompilerVisitor>*/;
4574 }
4575 }
4576 if (varonce257) {
4577 var258 = varonce257;
4578 } else {
4579 var259 = "} else";
4580 var260 = 6;
4581 var261 = string__NativeString__to_s_with_length(var259, var260);
4582 var258 = var261;
4583 varonce257 = var258;
4584 }
4585 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var258) /* add on <self:GlobalCompilerVisitor>*/;
4586 } else {
4587 }
4588 var262 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
4589 if (var262){
4590 if (varonce263) {
4591 var264 = varonce263;
4592 } else {
4593 var265 = "{";
4594 var266 = 1;
4595 var267 = string__NativeString__to_s_with_length(var265, var266);
4596 var264 = var267;
4597 varonce263 = var264;
4598 }
4599 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var264) /* add on <self:GlobalCompilerVisitor>*/;
4600 if (varonce268) {
4601 var269 = varonce268;
4602 } else {
4603 var270 = "/*BUG: no live types for ";
4604 var271 = 25;
4605 var272 = string__NativeString__to_s_with_length(var270, var271);
4606 var269 = var272;
4607 varonce268 = var269;
4608 }
4609 var273 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4610 var274 = ((val* (*)(val*))(var273->class->vft[COLOR_string__Object__inspect]))(var273) /* inspect on <var273:nullable Object(RuntimeVariable)>*/;
4611 if (varonce275) {
4612 var276 = varonce275;
4613 } else {
4614 var277 = " . ";
4615 var278 = 3;
4616 var279 = string__NativeString__to_s_with_length(var277, var278);
4617 var276 = var279;
4618 varonce275 = var276;
4619 }
4620 if (varonce280) {
4621 var281 = varonce280;
4622 } else {
4623 var282 = "*/";
4624 var283 = 2;
4625 var284 = string__NativeString__to_s_with_length(var282, var283);
4626 var281 = var284;
4627 varonce280 = var281;
4628 }
4629 var285 = NEW_array__Array(&type_array__Arraykernel__Object);
4630 { /* var285 = array_instance Array[Object] */
4631 var286 = 5;
4632 var287 = NEW_array__NativeArray(var286, &type_array__NativeArraykernel__Object);
4633 ((struct instance_array__NativeArray*)var287)->values[0] = (val*) var269;
4634 ((struct instance_array__NativeArray*)var287)->values[1] = (val*) var274;
4635 ((struct instance_array__NativeArray*)var287)->values[2] = (val*) var276;
4636 ((struct instance_array__NativeArray*)var287)->values[3] = (val*) var_m;
4637 ((struct instance_array__NativeArray*)var287)->values[4] = (val*) var281;
4638 ((void (*)(val*, val*, long))(var285->class->vft[COLOR_array__Array__with_native]))(var285, var287, var286) /* with_native on <var285:Array[Object]>*/;
4639 }
4640 var288 = ((val* (*)(val*))(var285->class->vft[COLOR_string__Object__to_s]))(var285) /* to_s on <var285:Array[Object]>*/;
4641 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var288) /* add on <self:GlobalCompilerVisitor>*/;
4642 var289 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4643 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var289) /* bugtype on <self:GlobalCompilerVisitor>*/;
4644 if (varonce290) {
4645 var291 = varonce290;
4646 } else {
4647 var292 = "}";
4648 var293 = 1;
4649 var294 = string__NativeString__to_s_with_length(var292, var293);
4650 var291 = var294;
4651 varonce290 = var291;
4652 }
4653 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var291) /* add on <self:GlobalCompilerVisitor>*/;
4654 var = var_res;
4655 goto RET_LABEL;
4656 } else {
4657 }
4658 if (varonce295) {
4659 var296 = varonce295;
4660 } else {
4661 var297 = "switch(";
4662 var298 = 7;
4663 var299 = string__NativeString__to_s_with_length(var297, var298);
4664 var296 = var299;
4665 varonce295 = var296;
4666 }
4667 var300 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4668 if (varonce301) {
4669 var302 = varonce301;
4670 } else {
4671 var303 = "->classid) {";
4672 var304 = 12;
4673 var305 = string__NativeString__to_s_with_length(var303, var304);
4674 var302 = var305;
4675 varonce301 = var302;
4676 }
4677 var306 = NEW_array__Array(&type_array__Arraykernel__Object);
4678 { /* var306 = array_instance Array[Object] */
4679 var307 = 3;
4680 var308 = NEW_array__NativeArray(var307, &type_array__NativeArraykernel__Object);
4681 ((struct instance_array__NativeArray*)var308)->values[0] = (val*) var296;
4682 ((struct instance_array__NativeArray*)var308)->values[1] = (val*) var300;
4683 ((struct instance_array__NativeArray*)var308)->values[2] = (val*) var302;
4684 ((void (*)(val*, val*, long))(var306->class->vft[COLOR_array__Array__with_native]))(var306, var308, var307) /* with_native on <var306:Array[Object]>*/;
4685 }
4686 var309 = ((val* (*)(val*))(var306->class->vft[COLOR_string__Object__to_s]))(var306) /* to_s on <var306:Array[Object]>*/;
4687 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var309) /* add on <self:GlobalCompilerVisitor>*/;
4688 var310 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
4689 var_last = var310;
4690 var311 = NULL;
4691 var_defaultpropdef = var311;
4692 var312 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
4693 for(;;) {
4694 var313 = ((short int (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var312) /* is_ok on <var312:Iterator[nullable Object]>*/;
4695 if(!var313) break;
4696 var314 = ((val* (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__item]))(var312) /* item on <var312:Iterator[nullable Object]>*/;
4697 var_t = var314;
4698 var315 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4699 var316 = ((val* (*)(val*))(var315->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var315) /* mainmodule on <var315:AbstractCompiler(GlobalCompiler)>*/;
4700 var317 = ((val* (*)(val*, val*, val*))(var_m->class->vft[COLOR_model__MProperty__lookup_first_definition]))(var_m, var316, var_t) /* lookup_first_definition on <var_m:MMethod>*/;
4701 var_propdef318 = var317;
4702 var320 = ((val* (*)(val*))(var_propdef318->class->vft[COLOR_model__MPropDef__mclassdef]))(var_propdef318) /* mclassdef on <var_propdef318:MMethodDef>*/;
4703 var321 = ((val* (*)(val*))(var320->class->vft[COLOR_model__MClassDef__mclass]))(var320) /* mclass on <var320:MClassDef>*/;
4704 var322 = ((val* (*)(val*))(var321->class->vft[COLOR_model__MClass__name]))(var321) /* name on <var321:MClass>*/;
4705 if (varonce323) {
4706 var324 = varonce323;
4707 } else {
4708 var325 = "Object";
4709 var326 = 6;
4710 var327 = string__NativeString__to_s_with_length(var325, var326);
4711 var324 = var327;
4712 varonce323 = var324;
4713 }
4714 var328 = ((short int (*)(val*, val*))(var322->class->vft[COLOR_kernel__Object___61d_61d]))(var322, var324) /* == on <var322:String>*/;
4715 var_329 = var328;
4716 if (var328){
4717 var330 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MClassType>*/;
4718 if (varonce331) {
4719 var332 = varonce331;
4720 } else {
4721 var333 = "val*";
4722 var334 = 4;
4723 var335 = string__NativeString__to_s_with_length(var333, var334);
4724 var332 = var335;
4725 varonce331 = var332;
4726 }
4727 var336 = ((short int (*)(val*, val*))(var330->class->vft[COLOR_kernel__Object___61d_61d]))(var330, var332) /* == on <var330:String>*/;
4728 var319 = var336;
4729 } else {
4730 var319 = var_329;
4731 }
4732 if (var319){
4733 var_defaultpropdef = var_propdef318;
4734 goto CONTINUE_label;
4735 } else {
4736 }
4737 var339 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4738 var340 = ((short int (*)(val*))(var339->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var339) /* hardening on <var339:AbstractCompiler(GlobalCompiler)>*/;
4739 var341 = !var340;
4740 var_342 = var341;
4741 if (var341){
4742 var343 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
4743 var338 = var343;
4744 } else {
4745 var338 = var_342;
4746 }
4747 var_344 = var338;
4748 if (var338){
4749 var345 = NULL;
4750 if (var_defaultpropdef == NULL) {
4751 var346 = 1; /* is null */
4752 } else {
4753 var346 = 0; /* arg is null but recv is not */
4754 }
4755 var337 = var346;
4756 } else {
4757 var337 = var_344;
4758 }
4759 if (var337){
4760 if (varonce347) {
4761 var348 = varonce347;
4762 } else {
4763 var349 = "default: /* test ";
4764 var350 = 17;
4765 var351 = string__NativeString__to_s_with_length(var349, var350);
4766 var348 = var351;
4767 varonce347 = var348;
4768 }
4769 if (varonce352) {
4770 var353 = varonce352;
4771 } else {
4772 var354 = " */";
4773 var355 = 3;
4774 var356 = string__NativeString__to_s_with_length(var354, var355);
4775 var353 = var356;
4776 varonce352 = var353;
4777 }
4778 var357 = NEW_array__Array(&type_array__Arraykernel__Object);
4779 { /* var357 = array_instance Array[Object] */
4780 var358 = 3;
4781 var359 = NEW_array__NativeArray(var358, &type_array__NativeArraykernel__Object);
4782 ((struct instance_array__NativeArray*)var359)->values[0] = (val*) var348;
4783 ((struct instance_array__NativeArray*)var359)->values[1] = (val*) var_t;
4784 ((struct instance_array__NativeArray*)var359)->values[2] = (val*) var353;
4785 ((void (*)(val*, val*, long))(var357->class->vft[COLOR_array__Array__with_native]))(var357, var359, var358) /* with_native on <var357:Array[Object]>*/;
4786 }
4787 var360 = ((val* (*)(val*))(var357->class->vft[COLOR_string__Object__to_s]))(var357) /* to_s on <var357:Array[Object]>*/;
4788 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var360) /* add on <self:GlobalCompilerVisitor>*/;
4789 } else {
4790 if (varonce361) {
4791 var362 = varonce361;
4792 } else {
4793 var363 = "case ";
4794 var364 = 5;
4795 var365 = string__NativeString__to_s_with_length(var363, var364);
4796 var362 = var365;
4797 varonce361 = var362;
4798 }
4799 var366 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4800 var367 = ((val* (*)(val*, val*))(var366->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var366, var_t) /* classid on <var366:AbstractCompiler(GlobalCompiler)>*/;
4801 if (varonce368) {
4802 var369 = varonce368;
4803 } else {
4804 var370 = ": /* test ";
4805 var371 = 10;
4806 var372 = string__NativeString__to_s_with_length(var370, var371);
4807 var369 = var372;
4808 varonce368 = var369;
4809 }
4810 if (varonce373) {
4811 var374 = varonce373;
4812 } else {
4813 var375 = " */";
4814 var376 = 3;
4815 var377 = string__NativeString__to_s_with_length(var375, var376);
4816 var374 = var377;
4817 varonce373 = var374;
4818 }
4819 var378 = NEW_array__Array(&type_array__Arraykernel__Object);
4820 { /* var378 = array_instance Array[Object] */
4821 var379 = 5;
4822 var380 = NEW_array__NativeArray(var379, &type_array__NativeArraykernel__Object);
4823 ((struct instance_array__NativeArray*)var380)->values[0] = (val*) var362;
4824 ((struct instance_array__NativeArray*)var380)->values[1] = (val*) var367;
4825 ((struct instance_array__NativeArray*)var380)->values[2] = (val*) var369;
4826 ((struct instance_array__NativeArray*)var380)->values[3] = (val*) var_t;
4827 ((struct instance_array__NativeArray*)var380)->values[4] = (val*) var374;
4828 ((void (*)(val*, val*, long))(var378->class->vft[COLOR_array__Array__with_native]))(var378, var380, var379) /* with_native on <var378:Array[Object]>*/;
4829 }
4830 var381 = ((val* (*)(val*))(var378->class->vft[COLOR_string__Object__to_s]))(var378) /* to_s on <var378:Array[Object]>*/;
4831 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var381) /* add on <self:GlobalCompilerVisitor>*/;
4832 }
4833 var382 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__call]))(self, var_propdef318, var_t, var_args) /* call on <self:GlobalCompilerVisitor>*/;
4834 var_res2383 = var382;
4835 var384 = NULL;
4836 if (var_res == NULL) {
4837 var385 = 0; /* is null */
4838 } else {
4839 var385 = 1; /* arg is null and recv is not */
4840 }
4841 if (var385){
4842 if (var_res2383 == NULL) {
4843 fprintf(stderr, "Runtime error: %s", "Cast failed");
4844 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 405);
4845 show_backtrace(1);
4846 }
4847 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2383) /* assign on <self:GlobalCompilerVisitor>*/;
4848 } else {
4849 }
4850 if (varonce386) {
4851 var387 = varonce386;
4852 } else {
4853 var388 = "break;";
4854 var389 = 6;
4855 var390 = string__NativeString__to_s_with_length(var388, var389);
4856 var387 = var390;
4857 varonce386 = var387;
4858 }
4859 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var387) /* add on <self:GlobalCompilerVisitor>*/;
4860 CONTINUE_label: (void)0;
4861 ((void (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__next]))(var312) /* next on <var312:Iterator[nullable Object]>*/;
4862 }
4863 BREAK_label: (void)0;
4864 var391 = NULL;
4865 if (var_defaultpropdef == NULL) {
4866 var392 = 0; /* is null */
4867 } else {
4868 var392 = 1; /* arg is null and recv is not */
4869 }
4870 if (var392){
4871 if (varonce393) {
4872 var394 = varonce393;
4873 } else {
4874 var395 = "default: /* default is Object */";
4875 var396 = 32;
4876 var397 = string__NativeString__to_s_with_length(var395, var396);
4877 var394 = var397;
4878 varonce393 = var394;
4879 }
4880 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var394) /* add on <self:GlobalCompilerVisitor>*/;
4881 var398 = ((val* (*)(val*))(var_defaultpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_defaultpropdef) /* mclassdef on <var_defaultpropdef:nullable MMethodDef(MMethodDef)>*/;
4882 var399 = ((val* (*)(val*))(var398->class->vft[COLOR_model__MClassDef__bound_mtype]))(var398) /* bound_mtype on <var398:MClassDef>*/;
4883 var400 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__call]))(self, var_defaultpropdef, var399, var_args) /* call on <self:GlobalCompilerVisitor>*/;
4884 var_res2401 = var400;
4885 var402 = NULL;
4886 if (var_res == NULL) {
4887 var403 = 0; /* is null */
4888 } else {
4889 var403 = 1; /* arg is null and recv is not */
4890 }
4891 if (var403){
4892 if (var_res2401 == NULL) {
4893 fprintf(stderr, "Runtime error: %s", "Cast failed");
4894 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 411);
4895 show_backtrace(1);
4896 }
4897 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2401) /* assign on <self:GlobalCompilerVisitor>*/;
4898 } else {
4899 }
4900 } else {
4901 var404 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4902 var405 = ((short int (*)(val*))(var404->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var404) /* hardening on <var404:AbstractCompiler(GlobalCompiler)>*/;
4903 if (var405){
4904 if (varonce406) {
4905 var407 = varonce406;
4906 } else {
4907 var408 = "default: /* bug */";
4908 var409 = 18;
4909 var410 = string__NativeString__to_s_with_length(var408, var409);
4910 var407 = var410;
4911 varonce406 = var407;
4912 }
4913 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var407) /* add on <self:GlobalCompilerVisitor>*/;
4914 var411 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4915 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var411) /* bugtype on <self:GlobalCompilerVisitor>*/;
4916 } else {
4917 }
4918 }
4919 if (varonce412) {
4920 var413 = varonce412;
4921 } else {
4922 var414 = "}";
4923 var415 = 1;
4924 var416 = string__NativeString__to_s_with_length(var414, var415);
4925 var413 = var416;
4926 varonce412 = var413;
4927 }
4928 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var413) /* add on <self:GlobalCompilerVisitor>*/;
4929 var = var_res;
4930 goto RET_LABEL;
4931 RET_LABEL:;
4932 return var;
4933 }
4934 /* method global_compiler#GlobalCompilerVisitor#send for (self: Object, MMethod, Array[RuntimeVariable]): nullable RuntimeVariable */
4935 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__send(val* self, val* p0, val* p1) {
4936 val* var /* : nullable RuntimeVariable */;
4937 val* var1 /* : nullable RuntimeVariable */;
4938 var1 = global_compiler__GlobalCompilerVisitor__send(self, p0, p1);
4939 var = var1;
4940 RET_LABEL:;
4941 return var;
4942 }
4943 /* method global_compiler#GlobalCompilerVisitor#check_valid_reciever for (self: GlobalCompilerVisitor, MClassType) */
4944 void global_compiler__GlobalCompilerVisitor__check_valid_reciever(val* self, val* p0) {
4945 val* var_recvtype /* var recvtype: MClassType */;
4946 short int var /* : Bool */;
4947 val* var1 /* : AbstractCompiler */;
4948 val* var2 /* : RapidTypeAnalysis */;
4949 val* var3 /* : HashSet[MClassType] */;
4950 short int var4 /* : Bool */;
4951 short int var_ /* var : Bool */;
4952 val* var5 /* : MClass */;
4953 val* var6 /* : String */;
4954 static val* varonce;
4955 val* var7 /* : String */;
4956 char* var8 /* : NativeString */;
4957 long var9 /* : Int */;
4958 val* var10 /* : String */;
4959 short int var11 /* : Bool */;
4960 static val* varonce12;
4961 val* var13 /* : String */;
4962 char* var14 /* : NativeString */;
4963 long var15 /* : Int */;
4964 val* var16 /* : String */;
4965 val* var17 /* : Array[Object] */;
4966 long var18 /* : Int */;
4967 val* var19 /* : NativeArray[Object] */;
4968 val* var20 /* : String */;
4969 var_recvtype = p0;
4970 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4971 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var1) /* runtime_type_analysis on <var1:AbstractCompiler(GlobalCompiler)>*/;
4972 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var2) /* live_types on <var2:RapidTypeAnalysis>*/;
4973 var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_recvtype) /* has on <var3:HashSet[MClassType]>*/;
4974 var_ = var4;
4975 if (var4){
4976 var = var_;
4977 } else {
4978 var5 = ((val* (*)(val*))(var_recvtype->class->vft[COLOR_model__MClassType__mclass]))(var_recvtype) /* mclass on <var_recvtype:MClassType>*/;
4979 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MClass__name]))(var5) /* name on <var5:MClass>*/;
4980 if (varonce) {
4981 var7 = varonce;
4982 } else {
4983 var8 = "Object";
4984 var9 = 6;
4985 var10 = string__NativeString__to_s_with_length(var8, var9);
4986 var7 = var10;
4987 varonce = var7;
4988 }
4989 var11 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_kernel__Object___61d_61d]))(var6, var7) /* == on <var6:String>*/;
4990 var = var11;
4991 }
4992 if (var){
4993 goto RET_LABEL;
4994 } else {
4995 }
4996 if (varonce12) {
4997 var13 = varonce12;
4998 } else {
4999 var14 = " is not a live type";
5000 var15 = 19;
5001 var16 = string__NativeString__to_s_with_length(var14, var15);
5002 var13 = var16;
5003 varonce12 = var13;
5004 }
5005 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
5006 { /* var17 = array_instance Array[Object] */
5007 var18 = 2;
5008 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
5009 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var_recvtype;
5010 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var13;
5011 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
5012 }
5013 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
5014 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var20) /* print on <self:GlobalCompilerVisitor>*/;
5015 fprintf(stderr, "Runtime error: %s", "Aborted");
5016 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 424);
5017 show_backtrace(1);
5018 RET_LABEL:;
5019 }
5020 /* method global_compiler#GlobalCompilerVisitor#check_valid_reciever for (self: Object, MClassType) */
5021 void VIRTUAL_global_compiler__GlobalCompilerVisitor__check_valid_reciever(val* self, val* p0) {
5022 global_compiler__GlobalCompilerVisitor__check_valid_reciever(self, p0);
5023 RET_LABEL:;
5024 }
5025 /* method global_compiler#GlobalCompilerVisitor#get_recvtype for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): MClassType */
5026 val* global_compiler__GlobalCompilerVisitor__get_recvtype(val* self, val* p0, val* p1, val* p2) {
5027 val* var /* : MClassType */;
5028 val* var_m /* var m: MMethodDef */;
5029 val* var_recvtype /* var recvtype: MClassType */;
5030 val* var_args /* var args: Array[RuntimeVariable] */;
5031 short int var1 /* : Bool */;
5032 val* var2 /* : MClassDef */;
5033 val* var3 /* : MClass */;
5034 val* var4 /* : String */;
5035 static val* varonce;
5036 val* var5 /* : String */;
5037 char* var6 /* : NativeString */;
5038 long var7 /* : Int */;
5039 val* var8 /* : String */;
5040 short int var9 /* : Bool */;
5041 short int var_ /* var : Bool */;
5042 val* var10 /* : String */;
5043 static val* varonce11;
5044 val* var12 /* : String */;
5045 char* var13 /* : NativeString */;
5046 long var14 /* : Int */;
5047 val* var15 /* : String */;
5048 short int var16 /* : Bool */;
5049 val* var17 /* : MClassDef */;
5050 val* var18 /* : MClassType */;
5051 var_m = p0;
5052 var_recvtype = p1;
5053 var_args = p2;
5054 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__check_valid_reciever]))(self, var_recvtype) /* check_valid_reciever on <self:GlobalCompilerVisitor>*/;
5055 var2 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
5056 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__MClassDef__mclass]))(var2) /* mclass on <var2:MClassDef>*/;
5057 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MClass__name]))(var3) /* name on <var3:MClass>*/;
5058 if (varonce) {
5059 var5 = varonce;
5060 } else {
5061 var6 = "Object";
5062 var7 = 6;
5063 var8 = string__NativeString__to_s_with_length(var6, var7);
5064 var5 = var8;
5065 varonce = var5;
5066 }
5067 var9 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_kernel__Object___61d_61d]))(var4, var5) /* == on <var4:String>*/;
5068 var_ = var9;
5069 if (var9){
5070 var10 = ((val* (*)(val*))(var_recvtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_recvtype) /* ctype on <var_recvtype:MClassType>*/;
5071 if (varonce11) {
5072 var12 = varonce11;
5073 } else {
5074 var13 = "val*";
5075 var14 = 4;
5076 var15 = string__NativeString__to_s_with_length(var13, var14);
5077 var12 = var15;
5078 varonce11 = var12;
5079 }
5080 var16 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___61d_61d]))(var10, var12) /* == on <var10:String>*/;
5081 var1 = var16;
5082 } else {
5083 var1 = var_;
5084 }
5085 if (var1){
5086 var17 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
5087 var18 = ((val* (*)(val*))(var17->class->vft[COLOR_model__MClassDef__bound_mtype]))(var17) /* bound_mtype on <var17:MClassDef>*/;
5088 var_recvtype = var18;
5089 } else {
5090 }
5091 var = var_recvtype;
5092 goto RET_LABEL;
5093 RET_LABEL:;
5094 return var;
5095 }
5096 /* method global_compiler#GlobalCompilerVisitor#get_recvtype for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): MClassType */
5097 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__get_recvtype(val* self, val* p0, val* p1, val* p2) {
5098 val* var /* : MClassType */;
5099 val* var1 /* : MClassType */;
5100 var1 = global_compiler__GlobalCompilerVisitor__get_recvtype(self, p0, p1, p2);
5101 var = var1;
5102 RET_LABEL:;
5103 return var;
5104 }
5105 /* method global_compiler#GlobalCompilerVisitor#get_recv for (self: GlobalCompilerVisitor, MClassType, Array[RuntimeVariable]): RuntimeVariable */
5106 val* global_compiler__GlobalCompilerVisitor__get_recv(val* self, val* p0, val* p1) {
5107 val* var /* : RuntimeVariable */;
5108 val* var_recvtype /* var recvtype: MClassType */;
5109 val* var_args /* var args: Array[RuntimeVariable] */;
5110 val* var1 /* : nullable Object */;
5111 val* var2 /* : RuntimeVariable */;
5112 val* var3 /* : RuntimeVariable */;
5113 var_recvtype = p0;
5114 var_args = p1;
5115 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5116 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var1, var_recvtype) /* autobox on <self:GlobalCompilerVisitor>*/;
5117 var3 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var2, var_recvtype) /* autoadapt on <self:GlobalCompilerVisitor>*/;
5118 var = var3;
5119 goto RET_LABEL;
5120 RET_LABEL:;
5121 return var;
5122 }
5123 /* method global_compiler#GlobalCompilerVisitor#get_recv for (self: Object, MClassType, Array[RuntimeVariable]): RuntimeVariable */
5124 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__get_recv(val* self, val* p0, val* p1) {
5125 val* var /* : RuntimeVariable */;
5126 val* var1 /* : RuntimeVariable */;
5127 var1 = global_compiler__GlobalCompilerVisitor__get_recv(self, p0, p1);
5128 var = var1;
5129 RET_LABEL:;
5130 return var;
5131 }
5132 /* method global_compiler#GlobalCompilerVisitor#finalize_call for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5133 val* global_compiler__GlobalCompilerVisitor__finalize_call(val* self, val* p0, val* p1, val* p2) {
5134 val* var /* : nullable RuntimeVariable */;
5135 val* var_m /* var m: MMethodDef */;
5136 val* var_recvtype /* var recvtype: MClassType */;
5137 val* var_args /* var args: Array[RuntimeVariable] */;
5138 long var1 /* : Int */;
5139 val* var2 /* : nullable MSignature */;
5140 long var3 /* : Int */;
5141 long var4 /* : Int */;
5142 long var5 /* : Int */;
5143 long var7 /* : Int */;
5144 short int var8 /* : Bool */;
5145 short int var10 /* : Bool */;
5146 short int var11 /* : Bool */;
5147 static val* varonce;
5148 val* var12 /* : String */;
5149 char* var13 /* : NativeString */;
5150 long var14 /* : Int */;
5151 val* var15 /* : String */;
5152 static val* varonce16;
5153 val* var17 /* : String */;
5154 char* var18 /* : NativeString */;
5155 long var19 /* : Int */;
5156 val* var20 /* : String */;
5157 long var21 /* : Int */;
5158 static val* varonce22;
5159 val* var23 /* : String */;
5160 char* var24 /* : NativeString */;
5161 long var25 /* : Int */;
5162 val* var26 /* : String */;
5163 val* var27 /* : Array[Object] */;
5164 long var28 /* : Int */;
5165 val* var29 /* : NativeArray[Object] */;
5166 val* var30 /* : Object */;
5167 val* var31 /* : String */;
5168 static val* varonce32;
5169 val* var33 /* : String */;
5170 char* var34 /* : NativeString */;
5171 long var35 /* : Int */;
5172 val* var36 /* : String */;
5173 static val* varonce37;
5174 val* var38 /* : String */;
5175 char* var39 /* : NativeString */;
5176 long var40 /* : Int */;
5177 val* var41 /* : String */;
5178 long var42 /* : Int */;
5179 static val* varonce43;
5180 val* var44 /* : String */;
5181 char* var45 /* : NativeString */;
5182 long var46 /* : Int */;
5183 val* var47 /* : String */;
5184 val* var48 /* : Array[Object] */;
5185 long var49 /* : Int */;
5186 val* var50 /* : NativeArray[Object] */;
5187 val* var51 /* : Object */;
5188 val* var52 /* : String */;
5189 val* var53 /* : null */;
5190 val* var54 /* : CustomizedRuntimeFunction */;
5191 val* var_rm /* var rm: CustomizedRuntimeFunction */;
5192 val* var55 /* : nullable RuntimeVariable */;
5193 var_m = p0;
5194 var_recvtype = p1;
5195 var_args = p2;
5196 var1 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5197 var2 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
5198 if (var2 == NULL) {
5199 fprintf(stderr, "Runtime error: %s", "Reciever is null");
5200 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 450);
5201 show_backtrace(1);
5202 } else {
5203 var3 = ((long (*)(val*))(var2->class->vft[COLOR_model__MSignature__arity]))(var2) /* arity on <var2:nullable MSignature>*/;
5204 }
5205 var4 = 1;
5206 { /* Inline kernel#Int#+ (var3,var4) */
5207 var7 = var3 + var4;
5208 var5 = var7;
5209 goto RET_LABEL6;
5210 RET_LABEL6:(void)0;
5211 }
5212 { /* Inline kernel#Int#!= (var1,var5) */
5213 var10 = var1 == var5;
5214 var11 = !var10;
5215 var8 = var11;
5216 goto RET_LABEL9;
5217 RET_LABEL9:(void)0;
5218 }
5219 if (var8){
5220 if (varonce) {
5221 var12 = varonce;
5222 } else {
5223 var13 = "printf(\"NOT YET IMPLEMENTED: Invalid arity for ";
5224 var14 = 47;
5225 var15 = string__NativeString__to_s_with_length(var13, var14);
5226 var12 = var15;
5227 varonce = var12;
5228 }
5229 if (varonce16) {
5230 var17 = varonce16;
5231 } else {
5232 var18 = ". ";
5233 var19 = 2;
5234 var20 = string__NativeString__to_s_with_length(var18, var19);
5235 var17 = var20;
5236 varonce16 = var17;
5237 }
5238 var21 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5239 if (varonce22) {
5240 var23 = varonce22;
5241 } else {
5242 var24 = " arguments given.\\n\"); show_backtrace(1);";
5243 var25 = 41;
5244 var26 = string__NativeString__to_s_with_length(var24, var25);
5245 var23 = var26;
5246 varonce22 = var23;
5247 }
5248 var27 = NEW_array__Array(&type_array__Arraykernel__Object);
5249 { /* var27 = array_instance Array[Object] */
5250 var28 = 5;
5251 var29 = NEW_array__NativeArray(var28, &type_array__NativeArraykernel__Object);
5252 ((struct instance_array__NativeArray*)var29)->values[0] = (val*) var12;
5253 ((struct instance_array__NativeArray*)var29)->values[1] = (val*) var_m;
5254 ((struct instance_array__NativeArray*)var29)->values[2] = (val*) var17;
5255 var30 = BOX_kernel__Int(var21); /* autobox from Int to Object */
5256 ((struct instance_array__NativeArray*)var29)->values[3] = (val*) var30;
5257 ((struct instance_array__NativeArray*)var29)->values[4] = (val*) var23;
5258 ((void (*)(val*, val*, long))(var27->class->vft[COLOR_array__Array__with_native]))(var27, var29, var28) /* with_native on <var27:Array[Object]>*/;
5259 }
5260 var31 = ((val* (*)(val*))(var27->class->vft[COLOR_string__Object__to_s]))(var27) /* to_s on <var27:Array[Object]>*/;
5261 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var31) /* add on <self:GlobalCompilerVisitor>*/;
5262 if (varonce32) {
5263 var33 = varonce32;
5264 } else {
5265 var34 = "NOT YET IMPLEMENTED: Invalid arity for ";
5266 var35 = 39;
5267 var36 = string__NativeString__to_s_with_length(var34, var35);
5268 var33 = var36;
5269 varonce32 = var33;
5270 }
5271 if (varonce37) {
5272 var38 = varonce37;
5273 } else {
5274 var39 = ". ";
5275 var40 = 2;
5276 var41 = string__NativeString__to_s_with_length(var39, var40);
5277 var38 = var41;
5278 varonce37 = var38;
5279 }
5280 var42 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5281 if (varonce43) {
5282 var44 = varonce43;
5283 } else {
5284 var45 = " arguments given.";
5285 var46 = 17;
5286 var47 = string__NativeString__to_s_with_length(var45, var46);
5287 var44 = var47;
5288 varonce43 = var44;
5289 }
5290 var48 = NEW_array__Array(&type_array__Arraykernel__Object);
5291 { /* var48 = array_instance Array[Object] */
5292 var49 = 5;
5293 var50 = NEW_array__NativeArray(var49, &type_array__NativeArraykernel__Object);
5294 ((struct instance_array__NativeArray*)var50)->values[0] = (val*) var33;
5295 ((struct instance_array__NativeArray*)var50)->values[1] = (val*) var_m;
5296 ((struct instance_array__NativeArray*)var50)->values[2] = (val*) var38;
5297 var51 = BOX_kernel__Int(var42); /* autobox from Int to Object */
5298 ((struct instance_array__NativeArray*)var50)->values[3] = (val*) var51;
5299 ((struct instance_array__NativeArray*)var50)->values[4] = (val*) var44;
5300 ((void (*)(val*, val*, long))(var48->class->vft[COLOR_array__Array__with_native]))(var48, var50, var49) /* with_native on <var48:Array[Object]>*/;
5301 }
5302 var52 = ((val* (*)(val*))(var48->class->vft[COLOR_string__Object__to_s]))(var48) /* to_s on <var48:Array[Object]>*/;
5303 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var52) /* debug on <self:GlobalCompilerVisitor>*/;
5304 var53 = NULL;
5305 var = var53;
5306 goto RET_LABEL;
5307 } else {
5308 }
5309 var54 = NEW_global_compiler__CustomizedRuntimeFunction(&type_global_compiler__CustomizedRuntimeFunction);
5310 ((void (*)(val*, val*, val*))(var54->class->vft[COLOR_global_compiler__CustomizedRuntimeFunction__init]))(var54, var_m, var_recvtype) /* init on <var54:CustomizedRuntimeFunction>*/;
5311 var_rm = var54;
5312 var55 = ((val* (*)(val*, val*, val*))(var_rm->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__call]))(var_rm, self, var_args) /* call on <var_rm:CustomizedRuntimeFunction>*/;
5313 var = var55;
5314 goto RET_LABEL;
5315 RET_LABEL:;
5316 return var;
5317 }
5318 /* method global_compiler#GlobalCompilerVisitor#finalize_call for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5319 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__finalize_call(val* self, val* p0, val* p1, val* p2) {
5320 val* var /* : nullable RuntimeVariable */;
5321 val* var1 /* : nullable RuntimeVariable */;
5322 var1 = global_compiler__GlobalCompilerVisitor__finalize_call(self, p0, p1, p2);
5323 var = var1;
5324 RET_LABEL:;
5325 return var;
5326 }
5327 /* method global_compiler#GlobalCompilerVisitor#call for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5328 val* global_compiler__GlobalCompilerVisitor__call(val* self, val* p0, val* p1, val* p2) {
5329 val* var /* : nullable RuntimeVariable */;
5330 val* var_m /* var m: MMethodDef */;
5331 val* var_recvtype /* var recvtype: MClassType */;
5332 val* var_args /* var args: Array[RuntimeVariable] */;
5333 val* var1 /* : MClassType */;
5334 val* var_recv_type /* var recv_type: MClassType */;
5335 val* var2 /* : RuntimeVariable */;
5336 val* var_recv /* var recv: RuntimeVariable */;
5337 val* var3 /* : Array[nullable Object] */;
5338 val* var_new_args /* var new_args: Array[RuntimeVariable] */;
5339 val* var4 /* : nullable MSignature */;
5340 val* var5 /* : nullable RuntimeVariable */;
5341 var_m = p0;
5342 var_recvtype = p1;
5343 var_args = p2;
5344 var1 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__get_recvtype]))(self, var_m, var_recvtype, var_args) /* get_recvtype on <self:GlobalCompilerVisitor>*/;
5345 var_recv_type = var1;
5346 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__get_recv]))(self, var_recv_type, var_args) /* get_recv on <self:GlobalCompilerVisitor>*/;
5347 var_recv = var2;
5348 var3 = ((val* (*)(val*))(var_args->class->vft[COLOR_array__Collection__to_a]))(var_args) /* to_a on <var_args:Array[RuntimeVariable]>*/;
5349 var_new_args = var3;
5350 var4 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
5351 if (var4 == NULL) {
5352 fprintf(stderr, "Runtime error: %s", "Cast failed");
5353 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 465);
5354 show_backtrace(1);
5355 }
5356 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__varargize]))(self, var_m, var4, var_new_args) /* varargize on <self:GlobalCompilerVisitor>*/;
5357 ((void (*)(val*, val*))(var_new_args->class->vft[COLOR_abstract_collection__Sequence__first_61d]))(var_new_args, var_recv) /* first= on <var_new_args:Array[RuntimeVariable]>*/;
5358 var5 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__finalize_call]))(self, var_m, var_recv_type, var_new_args) /* finalize_call on <self:GlobalCompilerVisitor>*/;
5359 var = var5;
5360 goto RET_LABEL;
5361 RET_LABEL:;
5362 return var;
5363 }
5364 /* method global_compiler#GlobalCompilerVisitor#call for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5365 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__call(val* self, val* p0, val* p1, val* p2) {
5366 val* var /* : nullable RuntimeVariable */;
5367 val* var1 /* : nullable RuntimeVariable */;
5368 var1 = global_compiler__GlobalCompilerVisitor__call(self, p0, p1, p2);
5369 var = var1;
5370 RET_LABEL:;
5371 return var;
5372 }
5373 /* method global_compiler#GlobalCompilerVisitor#call_without_varargize for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5374 val* global_compiler__GlobalCompilerVisitor__call_without_varargize(val* self, val* p0, val* p1, val* p2) {
5375 val* var /* : nullable RuntimeVariable */;
5376 val* var_m /* var m: MMethodDef */;
5377 val* var_recvtype /* var recvtype: MClassType */;
5378 val* var_args /* var args: Array[RuntimeVariable] */;
5379 val* var1 /* : MClassType */;
5380 val* var_recv_type /* var recv_type: MClassType */;
5381 val* var2 /* : RuntimeVariable */;
5382 val* var_recv /* var recv: RuntimeVariable */;
5383 val* var3 /* : Array[nullable Object] */;
5384 val* var_new_args /* var new_args: Array[RuntimeVariable] */;
5385 val* var4 /* : nullable RuntimeVariable */;
5386 var_m = p0;
5387 var_recvtype = p1;
5388 var_args = p2;
5389 var1 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__get_recvtype]))(self, var_m, var_recvtype, var_args) /* get_recvtype on <self:GlobalCompilerVisitor>*/;
5390 var_recv_type = var1;
5391 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__get_recv]))(self, var_recv_type, var_args) /* get_recv on <self:GlobalCompilerVisitor>*/;
5392 var_recv = var2;
5393 var3 = ((val* (*)(val*))(var_args->class->vft[COLOR_array__Collection__to_a]))(var_args) /* to_a on <var_args:Array[RuntimeVariable]>*/;
5394 var_new_args = var3;
5395 ((void (*)(val*, val*))(var_new_args->class->vft[COLOR_abstract_collection__Sequence__first_61d]))(var_new_args, var_recv) /* first= on <var_new_args:Array[RuntimeVariable]>*/;
5396 var4 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__finalize_call]))(self, var_m, var_recv_type, var_new_args) /* finalize_call on <self:GlobalCompilerVisitor>*/;
5397 var = var4;
5398 goto RET_LABEL;
5399 RET_LABEL:;
5400 return var;
5401 }
5402 /* method global_compiler#GlobalCompilerVisitor#call_without_varargize for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5403 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__call_without_varargize(val* self, val* p0, val* p1, val* p2) {
5404 val* var /* : nullable RuntimeVariable */;
5405 val* var1 /* : nullable RuntimeVariable */;
5406 var1 = global_compiler__GlobalCompilerVisitor__call_without_varargize(self, p0, p1, p2);
5407 var = var1;
5408 RET_LABEL:;
5409 return var;
5410 }
5411 /* method global_compiler#GlobalCompilerVisitor#supercall for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5412 val* global_compiler__GlobalCompilerVisitor__supercall(val* self, val* p0, val* p1, val* p2) {
5413 val* var /* : nullable RuntimeVariable */;
5414 val* var_m /* var m: MMethodDef */;
5415 val* var_recvtype /* var recvtype: MClassType */;
5416 val* var_args /* var args: Array[RuntimeVariable] */;
5417 val* var1 /* : nullable Object */;
5418 val* var2 /* : Array[MClassType] */;
5419 val* var_types /* var types: Array[MClassType] */;
5420 val* var3 /* : MProperty */;
5421 val* var4 /* : MPropDef */;
5422 val* var5 /* : nullable MSignature */;
5423 val* var6 /* : nullable MType */;
5424 val* var_ret /* var ret: nullable MType */;
5425 val* var7 /* : null */;
5426 short int var8 /* : Bool */;
5427 val* var9 /* : null */;
5428 val* var_res /* var res: nullable RuntimeVariable */;
5429 val* var10 /* : nullable Object */;
5430 val* var11 /* : MType */;
5431 val* var12 /* : RuntimeVariable */;
5432 static val* varonce;
5433 val* var13 /* : String */;
5434 char* var14 /* : NativeString */;
5435 long var15 /* : Int */;
5436 val* var16 /* : String */;
5437 static val* varonce17;
5438 val* var18 /* : String */;
5439 char* var19 /* : NativeString */;
5440 long var20 /* : Int */;
5441 val* var21 /* : String */;
5442 val* var22 /* : nullable Object */;
5443 val* var23 /* : String */;
5444 static val* varonce24;
5445 val* var25 /* : String */;
5446 char* var26 /* : NativeString */;
5447 long var27 /* : Int */;
5448 val* var28 /* : String */;
5449 val* var29 /* : Array[Object] */;
5450 long var30 /* : Int */;
5451 val* var31 /* : NativeArray[Object] */;
5452 val* var32 /* : String */;
5453 val* var33 /* : nullable Object */;
5454 val* var34 /* : MType */;
5455 val* var35 /* : String */;
5456 static val* varonce36;
5457 val* var37 /* : String */;
5458 char* var38 /* : NativeString */;
5459 long var39 /* : Int */;
5460 val* var40 /* : String */;
5461 short int var41 /* : Bool */;
5462 val* var42 /* : nullable Object */;
5463 val* var43 /* : MType */;
5464 short int var44 /* : Bool */;
5465 int cltype;
5466 int idtype;
5467 const char* var_class_name;
5468 val* var_mclasstype /* var mclasstype: MClassType */;
5469 val* var45 /* : AbstractCompiler */;
5470 val* var46 /* : RapidTypeAnalysis */;
5471 val* var47 /* : HashSet[MClassType] */;
5472 short int var48 /* : Bool */;
5473 short int var49 /* : Bool */;
5474 static val* varonce50;
5475 val* var51 /* : String */;
5476 char* var52 /* : NativeString */;
5477 long var53 /* : Int */;
5478 val* var54 /* : String */;
5479 static val* varonce55;
5480 val* var56 /* : String */;
5481 char* var57 /* : NativeString */;
5482 long var58 /* : Int */;
5483 val* var59 /* : String */;
5484 val* var60 /* : Array[Object] */;
5485 long var61 /* : Int */;
5486 val* var62 /* : NativeArray[Object] */;
5487 val* var63 /* : String */;
5488 val* var64 /* : AbstractCompiler */;
5489 val* var65 /* : MModule */;
5490 val* var66 /* : MPropDef */;
5491 val* var_propdef /* var propdef: MMethodDef */;
5492 val* var67 /* : nullable RuntimeVariable */;
5493 val* var_res2 /* var res2: nullable RuntimeVariable */;
5494 val* var68 /* : null */;
5495 short int var69 /* : Bool */;
5496 short int var70 /* : Bool */;
5497 static val* varonce71;
5498 val* var72 /* : String */;
5499 char* var73 /* : NativeString */;
5500 long var74 /* : Int */;
5501 val* var75 /* : String */;
5502 static val* varonce76;
5503 val* var77 /* : String */;
5504 char* var78 /* : NativeString */;
5505 long var79 /* : Int */;
5506 val* var80 /* : String */;
5507 val* var81 /* : nullable Object */;
5508 val* var82 /* : String */;
5509 static val* varonce83;
5510 val* var84 /* : String */;
5511 char* var85 /* : NativeString */;
5512 long var86 /* : Int */;
5513 val* var87 /* : String */;
5514 static val* varonce88;
5515 val* var89 /* : String */;
5516 char* var90 /* : NativeString */;
5517 long var91 /* : Int */;
5518 val* var92 /* : String */;
5519 val* var93 /* : Array[Object] */;
5520 long var94 /* : Int */;
5521 val* var95 /* : NativeArray[Object] */;
5522 val* var96 /* : String */;
5523 val* var97 /* : nullable Object */;
5524 static val* varonce98;
5525 val* var99 /* : String */;
5526 char* var100 /* : NativeString */;
5527 long var101 /* : Int */;
5528 val* var102 /* : String */;
5529 static val* varonce103;
5530 val* var104 /* : String */;
5531 char* var105 /* : NativeString */;
5532 long var106 /* : Int */;
5533 val* var107 /* : String */;
5534 val* var108 /* : nullable Object */;
5535 static val* varonce109;
5536 val* var110 /* : String */;
5537 char* var111 /* : NativeString */;
5538 long var112 /* : Int */;
5539 val* var113 /* : String */;
5540 val* var114 /* : Array[Object] */;
5541 long var115 /* : Int */;
5542 val* var116 /* : NativeArray[Object] */;
5543 val* var117 /* : String */;
5544 val* var118 /* : nullable Object */;
5545 val* var_last /* var last: MClassType */;
5546 val* var119 /* : Iterator[nullable Object] */;
5547 short int var120 /* : Bool */;
5548 val* var121 /* : nullable Object */;
5549 val* var_t /* var t: MClassType */;
5550 val* var122 /* : AbstractCompiler */;
5551 val* var123 /* : MModule */;
5552 val* var124 /* : MPropDef */;
5553 val* var_propdef125 /* var propdef: MMethodDef */;
5554 short int var126 /* : Bool */;
5555 val* var127 /* : AbstractCompiler */;
5556 short int var128 /* : Bool */;
5557 short int var129 /* : Bool */;
5558 short int var_ /* var : Bool */;
5559 short int var130 /* : Bool */;
5560 static val* varonce131;
5561 val* var132 /* : String */;
5562 char* var133 /* : NativeString */;
5563 long var134 /* : Int */;
5564 val* var135 /* : String */;
5565 static val* varonce136;
5566 val* var137 /* : String */;
5567 char* var138 /* : NativeString */;
5568 long var139 /* : Int */;
5569 val* var140 /* : String */;
5570 val* var141 /* : Array[Object] */;
5571 long var142 /* : Int */;
5572 val* var143 /* : NativeArray[Object] */;
5573 val* var144 /* : String */;
5574 static val* varonce145;
5575 val* var146 /* : String */;
5576 char* var147 /* : NativeString */;
5577 long var148 /* : Int */;
5578 val* var149 /* : String */;
5579 val* var150 /* : AbstractCompiler */;
5580 val* var151 /* : String */;
5581 static val* varonce152;
5582 val* var153 /* : String */;
5583 char* var154 /* : NativeString */;
5584 long var155 /* : Int */;
5585 val* var156 /* : String */;
5586 static val* varonce157;
5587 val* var158 /* : String */;
5588 char* var159 /* : NativeString */;
5589 long var160 /* : Int */;
5590 val* var161 /* : String */;
5591 val* var162 /* : Array[Object] */;
5592 long var163 /* : Int */;
5593 val* var164 /* : NativeArray[Object] */;
5594 val* var165 /* : String */;
5595 val* var166 /* : nullable RuntimeVariable */;
5596 val* var_res2167 /* var res2: nullable RuntimeVariable */;
5597 val* var168 /* : null */;
5598 short int var169 /* : Bool */;
5599 static val* varonce170;
5600 val* var171 /* : String */;
5601 char* var172 /* : NativeString */;
5602 long var173 /* : Int */;
5603 val* var174 /* : String */;
5604 val* var175 /* : AbstractCompiler */;
5605 short int var176 /* : Bool */;
5606 static val* varonce177;
5607 val* var178 /* : String */;
5608 char* var179 /* : NativeString */;
5609 long var180 /* : Int */;
5610 val* var181 /* : String */;
5611 val* var182 /* : nullable Object */;
5612 static val* varonce183;
5613 val* var184 /* : String */;
5614 char* var185 /* : NativeString */;
5615 long var186 /* : Int */;
5616 val* var187 /* : String */;
5617 var_m = p0;
5618 var_recvtype = p1;
5619 var_args = p2;
5620 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5621 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var1) /* collect_types on <self:GlobalCompilerVisitor>*/;
5622 var_types = var2;
5623 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mproperty]))(var_m) /* mproperty on <var_m:MMethodDef>*/;
5624 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MProperty__intro]))(var3) /* intro on <var3:MProperty(MMethod)>*/;
5625 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_model__MMethodDef__msignature]))(var4) /* msignature on <var4:MPropDef(MMethodDef)>*/;
5626 if (var5 == NULL) {
5627 fprintf(stderr, "Runtime error: %s", "Reciever is null");
5628 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 486);
5629 show_backtrace(1);
5630 } else {
5631 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MSignature__return_mtype]))(var5) /* return_mtype on <var5:nullable MSignature>*/;
5632 }
5633 var_ret = var6;
5634 var7 = NULL;
5635 if (var_ret == NULL) {
5636 var8 = 1; /* is null */
5637 } else {
5638 var8 = 0; /* arg is null but recv is not */
5639 }
5640 if (var8){
5641 var9 = NULL;
5642 var_res = var9;
5643 } else {
5644 var10 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5645 var11 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var10) /* resolve_for on <self:GlobalCompilerVisitor>*/;
5646 var_ret = var11;
5647 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
5648 var_res = var12;
5649 }
5650 if (varonce) {
5651 var13 = varonce;
5652 } else {
5653 var14 = "/* super ";
5654 var15 = 9;
5655 var16 = string__NativeString__to_s_with_length(var14, var15);
5656 var13 = var16;
5657 varonce = var13;
5658 }
5659 if (varonce17) {
5660 var18 = varonce17;
5661 } else {
5662 var19 = " on ";
5663 var20 = 4;
5664 var21 = string__NativeString__to_s_with_length(var19, var20);
5665 var18 = var21;
5666 varonce17 = var18;
5667 }
5668 var22 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5669 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__inspect]))(var22) /* inspect on <var22:nullable Object(RuntimeVariable)>*/;
5670 if (varonce24) {
5671 var25 = varonce24;
5672 } else {
5673 var26 = " */";
5674 var27 = 3;
5675 var28 = string__NativeString__to_s_with_length(var26, var27);
5676 var25 = var28;
5677 varonce24 = var25;
5678 }
5679 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
5680 { /* var29 = array_instance Array[Object] */
5681 var30 = 5;
5682 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
5683 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var13;
5684 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var_m;
5685 ((struct instance_array__NativeArray*)var31)->values[2] = (val*) var18;
5686 ((struct instance_array__NativeArray*)var31)->values[3] = (val*) var23;
5687 ((struct instance_array__NativeArray*)var31)->values[4] = (val*) var25;
5688 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
5689 }
5690 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
5691 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var32) /* add on <self:GlobalCompilerVisitor>*/;
5692 var33 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5693 var34 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var33) /* mtype on <var33:nullable Object(RuntimeVariable)>*/;
5694 var35 = ((val* (*)(val*))(var34->class->vft[COLOR_abstract_compiler__MType__ctype]))(var34) /* ctype on <var34:MType>*/;
5695 if (varonce36) {
5696 var37 = varonce36;
5697 } else {
5698 var38 = "val*";
5699 var39 = 4;
5700 var40 = string__NativeString__to_s_with_length(var38, var39);
5701 var37 = var40;
5702 varonce36 = var37;
5703 }
5704 var41 = ((short int (*)(val*, val*))(var35->class->vft[COLOR_kernel__Object___33d_61d]))(var35, var37) /* != on <var35:String>*/;
5705 if (var41){
5706 var42 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5707 var43 = ((val* (*)(val*))(var42->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var42) /* mtype on <var42:nullable Object(RuntimeVariable)>*/;
5708 /* <var43:MType> isa MClassType */
5709 cltype = type_model__MClassType.color;
5710 idtype = type_model__MClassType.id;
5711 if(cltype >= var43->type->table_size) {
5712 var44 = 0;
5713 } else {
5714 var44 = var43->type->type_table[cltype] == idtype;
5715 }
5716 if (!var44) {
5717 var_class_name = var43 == NULL ? "null" : var43->type->name;
5718 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
5719 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 496);
5720 show_backtrace(1);
5721 }
5722 var_mclasstype = var43;
5723 var45 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5724 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var45) /* runtime_type_analysis on <var45:AbstractCompiler(GlobalCompiler)>*/;
5725 var47 = ((val* (*)(val*))(var46->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var46) /* live_types on <var46:RapidTypeAnalysis>*/;
5726 var48 = ((short int (*)(val*, val*))(var47->class->vft[COLOR_abstract_collection__Collection__has]))(var47, var_mclasstype) /* has on <var47:HashSet[MClassType]>*/;
5727 var49 = !var48;
5728 if (var49){
5729 if (varonce50) {
5730 var51 = varonce50;
5731 } else {
5732 var52 = "/* skip, no method ";
5733 var53 = 19;
5734 var54 = string__NativeString__to_s_with_length(var52, var53);
5735 var51 = var54;
5736 varonce50 = var51;
5737 }
5738 if (varonce55) {
5739 var56 = varonce55;
5740 } else {
5741 var57 = " */";
5742 var58 = 3;
5743 var59 = string__NativeString__to_s_with_length(var57, var58);
5744 var56 = var59;
5745 varonce55 = var56;
5746 }
5747 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
5748 { /* var60 = array_instance Array[Object] */
5749 var61 = 3;
5750 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
5751 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var51;
5752 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_m;
5753 ((struct instance_array__NativeArray*)var62)->values[2] = (val*) var56;
5754 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
5755 }
5756 var63 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
5757 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var63) /* add on <self:GlobalCompilerVisitor>*/;
5758 var = var_res;
5759 goto RET_LABEL;
5760 } else {
5761 }
5762 var64 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5763 var65 = ((val* (*)(val*))(var64->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var64) /* mainmodule on <var64:AbstractCompiler(GlobalCompiler)>*/;
5764 var66 = ((val* (*)(val*, val*, val*))(var_m->class->vft[COLOR_model__MPropDef__lookup_next_definition]))(var_m, var65, var_mclasstype) /* lookup_next_definition on <var_m:MMethodDef>*/;
5765 var_propdef = var66;
5766 var67 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__call_without_varargize]))(self, var_propdef, var_mclasstype, var_args) /* call_without_varargize on <self:GlobalCompilerVisitor>*/;
5767 var_res2 = var67;
5768 var68 = NULL;
5769 if (var_res == NULL) {
5770 var69 = 0; /* is null */
5771 } else {
5772 var69 = 1; /* arg is null and recv is not */
5773 }
5774 if (var69){
5775 if (var_res2 == NULL) {
5776 fprintf(stderr, "Runtime error: %s", "Cast failed");
5777 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 503);
5778 show_backtrace(1);
5779 }
5780 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
5781 } else {
5782 }
5783 var = var_res;
5784 goto RET_LABEL;
5785 } else {
5786 }
5787 var70 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
5788 if (var70){
5789 if (varonce71) {
5790 var72 = varonce71;
5791 } else {
5792 var73 = "{";
5793 var74 = 1;
5794 var75 = string__NativeString__to_s_with_length(var73, var74);
5795 var72 = var75;
5796 varonce71 = var72;
5797 }
5798 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var72) /* add on <self:GlobalCompilerVisitor>*/;
5799 if (varonce76) {
5800 var77 = varonce76;
5801 } else {
5802 var78 = "/*BUG: no live types for ";
5803 var79 = 25;
5804 var80 = string__NativeString__to_s_with_length(var78, var79);
5805 var77 = var80;
5806 varonce76 = var77;
5807 }
5808 var81 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5809 var82 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__inspect]))(var81) /* inspect on <var81:nullable Object(RuntimeVariable)>*/;
5810 if (varonce83) {
5811 var84 = varonce83;
5812 } else {
5813 var85 = " . ";
5814 var86 = 3;
5815 var87 = string__NativeString__to_s_with_length(var85, var86);
5816 var84 = var87;
5817 varonce83 = var84;
5818 }
5819 if (varonce88) {
5820 var89 = varonce88;
5821 } else {
5822 var90 = "*/";
5823 var91 = 2;
5824 var92 = string__NativeString__to_s_with_length(var90, var91);
5825 var89 = var92;
5826 varonce88 = var89;
5827 }
5828 var93 = NEW_array__Array(&type_array__Arraykernel__Object);
5829 { /* var93 = array_instance Array[Object] */
5830 var94 = 5;
5831 var95 = NEW_array__NativeArray(var94, &type_array__NativeArraykernel__Object);
5832 ((struct instance_array__NativeArray*)var95)->values[0] = (val*) var77;
5833 ((struct instance_array__NativeArray*)var95)->values[1] = (val*) var82;
5834 ((struct instance_array__NativeArray*)var95)->values[2] = (val*) var84;
5835 ((struct instance_array__NativeArray*)var95)->values[3] = (val*) var_m;
5836 ((struct instance_array__NativeArray*)var95)->values[4] = (val*) var89;
5837 ((void (*)(val*, val*, long))(var93->class->vft[COLOR_array__Array__with_native]))(var93, var95, var94) /* with_native on <var93:Array[Object]>*/;
5838 }
5839 var96 = ((val* (*)(val*))(var93->class->vft[COLOR_string__Object__to_s]))(var93) /* to_s on <var93:Array[Object]>*/;
5840 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var96) /* add on <self:GlobalCompilerVisitor>*/;
5841 var97 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5842 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var97) /* bugtype on <self:GlobalCompilerVisitor>*/;
5843 if (varonce98) {
5844 var99 = varonce98;
5845 } else {
5846 var100 = "}";
5847 var101 = 1;
5848 var102 = string__NativeString__to_s_with_length(var100, var101);
5849 var99 = var102;
5850 varonce98 = var99;
5851 }
5852 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var99) /* add on <self:GlobalCompilerVisitor>*/;
5853 var = var_res;
5854 goto RET_LABEL;
5855 } else {
5856 }
5857 if (varonce103) {
5858 var104 = varonce103;
5859 } else {
5860 var105 = "switch(";
5861 var106 = 7;
5862 var107 = string__NativeString__to_s_with_length(var105, var106);
5863 var104 = var107;
5864 varonce103 = var104;
5865 }
5866 var108 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5867 if (varonce109) {
5868 var110 = varonce109;
5869 } else {
5870 var111 = "->classid) {";
5871 var112 = 12;
5872 var113 = string__NativeString__to_s_with_length(var111, var112);
5873 var110 = var113;
5874 varonce109 = var110;
5875 }
5876 var114 = NEW_array__Array(&type_array__Arraykernel__Object);
5877 { /* var114 = array_instance Array[Object] */
5878 var115 = 3;
5879 var116 = NEW_array__NativeArray(var115, &type_array__NativeArraykernel__Object);
5880 ((struct instance_array__NativeArray*)var116)->values[0] = (val*) var104;
5881 ((struct instance_array__NativeArray*)var116)->values[1] = (val*) var108;
5882 ((struct instance_array__NativeArray*)var116)->values[2] = (val*) var110;
5883 ((void (*)(val*, val*, long))(var114->class->vft[COLOR_array__Array__with_native]))(var114, var116, var115) /* with_native on <var114:Array[Object]>*/;
5884 }
5885 var117 = ((val* (*)(val*))(var114->class->vft[COLOR_string__Object__to_s]))(var114) /* to_s on <var114:Array[Object]>*/;
5886 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var117) /* add on <self:GlobalCompilerVisitor>*/;
5887 var118 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
5888 var_last = var118;
5889 var119 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
5890 for(;;) {
5891 var120 = ((short int (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var119) /* is_ok on <var119:Iterator[nullable Object]>*/;
5892 if(!var120) break;
5893 var121 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__item]))(var119) /* item on <var119:Iterator[nullable Object]>*/;
5894 var_t = var121;
5895 var122 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5896 var123 = ((val* (*)(val*))(var122->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var122) /* mainmodule on <var122:AbstractCompiler(GlobalCompiler)>*/;
5897 var124 = ((val* (*)(val*, val*, val*))(var_m->class->vft[COLOR_model__MPropDef__lookup_next_definition]))(var_m, var123, var_t) /* lookup_next_definition on <var_m:MMethodDef>*/;
5898 var_propdef125 = var124;
5899 var127 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5900 var128 = ((short int (*)(val*))(var127->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var127) /* hardening on <var127:AbstractCompiler(GlobalCompiler)>*/;
5901 var129 = !var128;
5902 var_ = var129;
5903 if (var129){
5904 var130 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
5905 var126 = var130;
5906 } else {
5907 var126 = var_;
5908 }
5909 if (var126){
5910 if (varonce131) {
5911 var132 = varonce131;
5912 } else {
5913 var133 = "default: /* test ";
5914 var134 = 17;
5915 var135 = string__NativeString__to_s_with_length(var133, var134);
5916 var132 = var135;
5917 varonce131 = var132;
5918 }
5919 if (varonce136) {
5920 var137 = varonce136;
5921 } else {
5922 var138 = " */";
5923 var139 = 3;
5924 var140 = string__NativeString__to_s_with_length(var138, var139);
5925 var137 = var140;
5926 varonce136 = var137;
5927 }
5928 var141 = NEW_array__Array(&type_array__Arraykernel__Object);
5929 { /* var141 = array_instance Array[Object] */
5930 var142 = 3;
5931 var143 = NEW_array__NativeArray(var142, &type_array__NativeArraykernel__Object);
5932 ((struct instance_array__NativeArray*)var143)->values[0] = (val*) var132;
5933 ((struct instance_array__NativeArray*)var143)->values[1] = (val*) var_t;
5934 ((struct instance_array__NativeArray*)var143)->values[2] = (val*) var137;
5935 ((void (*)(val*, val*, long))(var141->class->vft[COLOR_array__Array__with_native]))(var141, var143, var142) /* with_native on <var141:Array[Object]>*/;
5936 }
5937 var144 = ((val* (*)(val*))(var141->class->vft[COLOR_string__Object__to_s]))(var141) /* to_s on <var141:Array[Object]>*/;
5938 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var144) /* add on <self:GlobalCompilerVisitor>*/;
5939 } else {
5940 if (varonce145) {
5941 var146 = varonce145;
5942 } else {
5943 var147 = "case ";
5944 var148 = 5;
5945 var149 = string__NativeString__to_s_with_length(var147, var148);
5946 var146 = var149;
5947 varonce145 = var146;
5948 }
5949 var150 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5950 var151 = ((val* (*)(val*, val*))(var150->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var150, var_t) /* classid on <var150:AbstractCompiler(GlobalCompiler)>*/;
5951 if (varonce152) {
5952 var153 = varonce152;
5953 } else {
5954 var154 = ": /* test ";
5955 var155 = 10;
5956 var156 = string__NativeString__to_s_with_length(var154, var155);
5957 var153 = var156;
5958 varonce152 = var153;
5959 }
5960 if (varonce157) {
5961 var158 = varonce157;
5962 } else {
5963 var159 = " */";
5964 var160 = 3;
5965 var161 = string__NativeString__to_s_with_length(var159, var160);
5966 var158 = var161;
5967 varonce157 = var158;
5968 }
5969 var162 = NEW_array__Array(&type_array__Arraykernel__Object);
5970 { /* var162 = array_instance Array[Object] */
5971 var163 = 5;
5972 var164 = NEW_array__NativeArray(var163, &type_array__NativeArraykernel__Object);
5973 ((struct instance_array__NativeArray*)var164)->values[0] = (val*) var146;
5974 ((struct instance_array__NativeArray*)var164)->values[1] = (val*) var151;
5975 ((struct instance_array__NativeArray*)var164)->values[2] = (val*) var153;
5976 ((struct instance_array__NativeArray*)var164)->values[3] = (val*) var_t;
5977 ((struct instance_array__NativeArray*)var164)->values[4] = (val*) var158;
5978 ((void (*)(val*, val*, long))(var162->class->vft[COLOR_array__Array__with_native]))(var162, var164, var163) /* with_native on <var162:Array[Object]>*/;
5979 }
5980 var165 = ((val* (*)(val*))(var162->class->vft[COLOR_string__Object__to_s]))(var162) /* to_s on <var162:Array[Object]>*/;
5981 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var165) /* add on <self:GlobalCompilerVisitor>*/;
5982 }
5983 var166 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__call_without_varargize]))(self, var_propdef125, var_t, var_args) /* call_without_varargize on <self:GlobalCompilerVisitor>*/;
5984 var_res2167 = var166;
5985 var168 = NULL;
5986 if (var_res == NULL) {
5987 var169 = 0; /* is null */
5988 } else {
5989 var169 = 1; /* arg is null and recv is not */
5990 }
5991 if (var169){
5992 if (var_res2167 == NULL) {
5993 fprintf(stderr, "Runtime error: %s", "Cast failed");
5994 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 525);
5995 show_backtrace(1);
5996 }
5997 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2167) /* assign on <self:GlobalCompilerVisitor>*/;
5998 } else {
5999 }
6000 if (varonce170) {
6001 var171 = varonce170;
6002 } else {
6003 var172 = "break;";
6004 var173 = 6;
6005 var174 = string__NativeString__to_s_with_length(var172, var173);
6006 var171 = var174;
6007 varonce170 = var171;
6008 }
6009 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
6010 CONTINUE_label: (void)0;
6011 ((void (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__next]))(var119) /* next on <var119:Iterator[nullable Object]>*/;
6012 }
6013 BREAK_label: (void)0;
6014 var175 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6015 var176 = ((short int (*)(val*))(var175->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var175) /* hardening on <var175:AbstractCompiler(GlobalCompiler)>*/;
6016 if (var176){
6017 if (varonce177) {
6018 var178 = varonce177;
6019 } else {
6020 var179 = "default: /* bug */";
6021 var180 = 18;
6022 var181 = string__NativeString__to_s_with_length(var179, var180);
6023 var178 = var181;
6024 varonce177 = var178;
6025 }
6026 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var178) /* add on <self:GlobalCompilerVisitor>*/;
6027 var182 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6028 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var182) /* bugtype on <self:GlobalCompilerVisitor>*/;
6029 } else {
6030 }
6031 if (varonce183) {
6032 var184 = varonce183;
6033 } else {
6034 var185 = "}";
6035 var186 = 1;
6036 var187 = string__NativeString__to_s_with_length(var185, var186);
6037 var184 = var187;
6038 varonce183 = var184;
6039 }
6040 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var184) /* add on <self:GlobalCompilerVisitor>*/;
6041 var = var_res;
6042 goto RET_LABEL;
6043 RET_LABEL:;
6044 return var;
6045 }
6046 /* method global_compiler#GlobalCompilerVisitor#supercall for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
6047 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__supercall(val* self, val* p0, val* p1, val* p2) {
6048 val* var /* : nullable RuntimeVariable */;
6049 val* var1 /* : nullable RuntimeVariable */;
6050 var1 = global_compiler__GlobalCompilerVisitor__supercall(self, p0, p1, p2);
6051 var = var1;
6052 RET_LABEL:;
6053 return var;
6054 }
6055 /* method global_compiler#GlobalCompilerVisitor#adapt_signature for (self: GlobalCompilerVisitor, MMethodDef, Array[RuntimeVariable]) */
6056 void global_compiler__GlobalCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
6057 val* var_m /* var m: MMethodDef */;
6058 val* var_args /* var args: Array[RuntimeVariable] */;
6059 val* var /* : nullable Object */;
6060 val* var_recv /* var recv: RuntimeVariable */;
6061 val* var1 /* : Range[Int] */;
6062 long var2 /* : Int */;
6063 val* var3 /* : nullable MSignature */;
6064 long var4 /* : Int */;
6065 val* var5 /* : Discrete */;
6066 val* var6 /* : Discrete */;
6067 val* var7 /* : Iterator[nullable Object] */;
6068 short int var8 /* : Bool */;
6069 val* var9 /* : nullable Object */;
6070 long var_i /* var i: Int */;
6071 long var10 /* : Int */;
6072 val* var11 /* : nullable MSignature */;
6073 val* var12 /* : Array[MParameter] */;
6074 val* var13 /* : nullable Object */;
6075 val* var14 /* : MType */;
6076 val* var_t /* var t: MType */;
6077 val* var15 /* : nullable MSignature */;
6078 long var16 /* : Int */;
6079 short int var17 /* : Bool */;
6080 short int var19 /* : Bool */;
6081 long var20 /* : Int */;
6082 long var21 /* : Int */;
6083 long var23 /* : Int */;
6084 val* var24 /* : nullable Object */;
6085 val* var25 /* : MType */;
6086 val* var26 /* : MType */;
6087 long var27 /* : Int */;
6088 long var28 /* : Int */;
6089 long var30 /* : Int */;
6090 long var31 /* : Int */;
6091 long var32 /* : Int */;
6092 long var34 /* : Int */;
6093 val* var35 /* : nullable Object */;
6094 val* var36 /* : RuntimeVariable */;
6095 var_m = p0;
6096 var_args = p1;
6097 var = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6098 var_recv = var;
6099 var1 = NEW_range__Range(&type_range__Rangekernel__Int);
6100 var2 = 0;
6101 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6102 if (var3 == NULL) {
6103 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6104 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 539);
6105 show_backtrace(1);
6106 } else {
6107 var4 = ((long (*)(val*))(var3->class->vft[COLOR_model__MSignature__arity]))(var3) /* arity on <var3:nullable MSignature>*/;
6108 }
6109 var5 = BOX_kernel__Int(var2); /* autobox from Int to Discrete */
6110 var6 = BOX_kernel__Int(var4); /* autobox from Int to Discrete */
6111 ((void (*)(val*, val*, val*))(var1->class->vft[COLOR_range__Range__without_last]))(var1, var5, var6) /* without_last on <var1:Range[Int]>*/;
6112 var7 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__iterator]))(var1) /* iterator on <var1:Range[Int]>*/;
6113 for(;;) {
6114 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
6115 if(!var8) break;
6116 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
6117 var10 = ((struct instance_kernel__Int*)var9)->value; /* autounbox from nullable Object to Int */;
6118 var_i = var10;
6119 var11 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6120 if (var11 == NULL) {
6121 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6122 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 540);
6123 show_backtrace(1);
6124 } else {
6125 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_model__MSignature__mparameters]))(var11) /* mparameters on <var11:nullable MSignature>*/;
6126 }
6127 var13 = ((val* (*)(val*, long))(var12->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var12, var_i) /* [] on <var12:Array[MParameter]>*/;
6128 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_model__MParameter__mtype]))(var13) /* mtype on <var13:nullable Object(MParameter)>*/;
6129 var_t = var14;
6130 var15 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6131 if (var15 == NULL) {
6132 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6133 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 541);
6134 show_backtrace(1);
6135 } else {
6136 var16 = ((long (*)(val*))(var15->class->vft[COLOR_model__MSignature__vararg_rank]))(var15) /* vararg_rank on <var15:nullable MSignature>*/;
6137 }
6138 { /* Inline kernel#Int#== (var_i,var16) */
6139 var19 = var_i == var16;
6140 var17 = var19;
6141 goto RET_LABEL18;
6142 RET_LABEL18:(void)0;
6143 }
6144 if (var17){
6145 var20 = 1;
6146 { /* Inline kernel#Int#+ (var_i,var20) */
6147 var23 = var_i + var20;
6148 var21 = var23;
6149 goto RET_LABEL22;
6150 RET_LABEL22:(void)0;
6151 }
6152 var24 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var21) /* [] on <var_args:Array[RuntimeVariable]>*/;
6153 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var24) /* mtype on <var24:nullable Object(RuntimeVariable)>*/;
6154 var_t = var25;
6155 } else {
6156 }
6157 var26 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_t, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6158 var_t = var26;
6159 var27 = 1;
6160 { /* Inline kernel#Int#+ (var_i,var27) */
6161 var30 = var_i + var27;
6162 var28 = var30;
6163 goto RET_LABEL29;
6164 RET_LABEL29:(void)0;
6165 }
6166 var31 = 1;
6167 { /* Inline kernel#Int#+ (var_i,var31) */
6168 var34 = var_i + var31;
6169 var32 = var34;
6170 goto RET_LABEL33;
6171 RET_LABEL33:(void)0;
6172 }
6173 var35 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var32) /* [] on <var_args:Array[RuntimeVariable]>*/;
6174 var36 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var35, var_t) /* autobox on <self:GlobalCompilerVisitor>*/;
6175 ((void (*)(val*, long, val*))(var_args->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_args, var28, var36) /* []= on <var_args:Array[RuntimeVariable]>*/;
6176 CONTINUE_label: (void)0;
6177 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
6178 }
6179 BREAK_label: (void)0;
6180 RET_LABEL:;
6181 }
6182 /* method global_compiler#GlobalCompilerVisitor#adapt_signature for (self: Object, MMethodDef, Array[RuntimeVariable]) */
6183 void VIRTUAL_global_compiler__GlobalCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
6184 global_compiler__GlobalCompilerVisitor__adapt_signature(self, p0, p1);
6185 RET_LABEL:;
6186 }
6187 /* method global_compiler#GlobalCompilerVisitor#vararg_instance for (self: GlobalCompilerVisitor, MPropDef, RuntimeVariable, Array[RuntimeVariable], MType): RuntimeVariable */
6188 val* global_compiler__GlobalCompilerVisitor__vararg_instance(val* self, val* p0, val* p1, val* p2, val* p3) {
6189 val* var /* : RuntimeVariable */;
6190 val* var_mpropdef /* var mpropdef: MPropDef */;
6191 val* var_recv /* var recv: RuntimeVariable */;
6192 val* var_varargs /* var varargs: Array[RuntimeVariable] */;
6193 val* var_elttype /* var elttype: MType */;
6194 val* var1 /* : MType */;
6195 val* var2 /* : RuntimeVariable */;
6196 var_mpropdef = p0;
6197 var_recv = p1;
6198 var_varargs = p2;
6199 var_elttype = p3;
6200 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_elttype, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6201 var_elttype = var1;
6202 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__array_instance]))(self, var_varargs, var_elttype) /* array_instance on <self:GlobalCompilerVisitor>*/;
6203 var = var2;
6204 goto RET_LABEL;
6205 RET_LABEL:;
6206 return var;
6207 }
6208 /* method global_compiler#GlobalCompilerVisitor#vararg_instance for (self: Object, MPropDef, RuntimeVariable, Array[RuntimeVariable], MType): RuntimeVariable */
6209 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__vararg_instance(val* self, val* p0, val* p1, val* p2, val* p3) {
6210 val* var /* : RuntimeVariable */;
6211 val* var1 /* : RuntimeVariable */;
6212 var1 = global_compiler__GlobalCompilerVisitor__vararg_instance(self, p0, p1, p2, p3);
6213 var = var1;
6214 RET_LABEL:;
6215 return var;
6216 }
6217 /* method global_compiler#GlobalCompilerVisitor#bugtype for (self: GlobalCompilerVisitor, RuntimeVariable) */
6218 void global_compiler__GlobalCompilerVisitor__bugtype(val* self, val* p0) {
6219 val* var_recv /* var recv: RuntimeVariable */;
6220 val* var /* : MType */;
6221 val* var1 /* : String */;
6222 static val* varonce;
6223 val* var2 /* : String */;
6224 char* var3 /* : NativeString */;
6225 long var4 /* : Int */;
6226 val* var5 /* : String */;
6227 short int var6 /* : Bool */;
6228 static val* varonce7;
6229 val* var8 /* : String */;
6230 char* var9 /* : NativeString */;
6231 long var10 /* : Int */;
6232 val* var11 /* : String */;
6233 static val* varonce12;
6234 val* var13 /* : String */;
6235 char* var14 /* : NativeString */;
6236 long var15 /* : Int */;
6237 val* var16 /* : String */;
6238 val* var17 /* : MType */;
6239 static val* varonce18;
6240 val* var19 /* : String */;
6241 char* var20 /* : NativeString */;
6242 long var21 /* : Int */;
6243 val* var22 /* : String */;
6244 val* var23 /* : Array[Object] */;
6245 long var24 /* : Int */;
6246 val* var25 /* : NativeArray[Object] */;
6247 val* var26 /* : String */;
6248 static val* varonce27;
6249 val* var28 /* : String */;
6250 char* var29 /* : NativeString */;
6251 long var30 /* : Int */;
6252 val* var31 /* : String */;
6253 var_recv = p0;
6254 var = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6255 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__MType__ctype]))(var) /* ctype on <var:MType>*/;
6256 if (varonce) {
6257 var2 = varonce;
6258 } else {
6259 var3 = "val*";
6260 var4 = 4;
6261 var5 = string__NativeString__to_s_with_length(var3, var4);
6262 var2 = var5;
6263 varonce = var2;
6264 }
6265 var6 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___33d_61d]))(var1, var2) /* != on <var1:String>*/;
6266 if (var6){
6267 goto RET_LABEL;
6268 } else {
6269 }
6270 if (varonce7) {
6271 var8 = varonce7;
6272 } else {
6273 var9 = "fprintf(stderr, \"BTD BUG: Dynamic type is %s, static type is %s\\n\", class_names[";
6274 var10 = 80;
6275 var11 = string__NativeString__to_s_with_length(var9, var10);
6276 var8 = var11;
6277 varonce7 = var8;
6278 }
6279 if (varonce12) {
6280 var13 = varonce12;
6281 } else {
6282 var14 = "->classid], \"";
6283 var15 = 13;
6284 var16 = string__NativeString__to_s_with_length(var14, var15);
6285 var13 = var16;
6286 varonce12 = var13;
6287 }
6288 var17 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_recv) /* mcasttype on <var_recv:RuntimeVariable>*/;
6289 if (varonce18) {
6290 var19 = varonce18;
6291 } else {
6292 var20 = "\");";
6293 var21 = 3;
6294 var22 = string__NativeString__to_s_with_length(var20, var21);
6295 var19 = var22;
6296 varonce18 = var19;
6297 }
6298 var23 = NEW_array__Array(&type_array__Arraykernel__Object);
6299 { /* var23 = array_instance Array[Object] */
6300 var24 = 5;
6301 var25 = NEW_array__NativeArray(var24, &type_array__NativeArraykernel__Object);
6302 ((struct instance_array__NativeArray*)var25)->values[0] = (val*) var8;
6303 ((struct instance_array__NativeArray*)var25)->values[1] = (val*) var_recv;
6304 ((struct instance_array__NativeArray*)var25)->values[2] = (val*) var13;
6305 ((struct instance_array__NativeArray*)var25)->values[3] = (val*) var17;
6306 ((struct instance_array__NativeArray*)var25)->values[4] = (val*) var19;
6307 ((void (*)(val*, val*, long))(var23->class->vft[COLOR_array__Array__with_native]))(var23, var25, var24) /* with_native on <var23:Array[Object]>*/;
6308 }
6309 var26 = ((val* (*)(val*))(var23->class->vft[COLOR_string__Object__to_s]))(var23) /* to_s on <var23:Array[Object]>*/;
6310 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var26) /* add on <self:GlobalCompilerVisitor>*/;
6311 if (varonce27) {
6312 var28 = varonce27;
6313 } else {
6314 var29 = "show_backtrace(1);";
6315 var30 = 18;
6316 var31 = string__NativeString__to_s_with_length(var29, var30);
6317 var28 = var31;
6318 varonce27 = var28;
6319 }
6320 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var28) /* add on <self:GlobalCompilerVisitor>*/;
6321 RET_LABEL:;
6322 }
6323 /* method global_compiler#GlobalCompilerVisitor#bugtype for (self: Object, RuntimeVariable) */
6324 void VIRTUAL_global_compiler__GlobalCompilerVisitor__bugtype(val* self, val* p0) {
6325 global_compiler__GlobalCompilerVisitor__bugtype(self, p0);
6326 RET_LABEL:;
6327 }
6328 /* method global_compiler#GlobalCompilerVisitor#isset_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable): RuntimeVariable */
6329 val* global_compiler__GlobalCompilerVisitor__isset_attribute(val* self, val* p0, val* p1) {
6330 val* var /* : RuntimeVariable */;
6331 val* var_a /* var a: MAttribute */;
6332 val* var_recv /* var recv: RuntimeVariable */;
6333 val* var1 /* : Array[MClassType] */;
6334 val* var_types /* var types: Array[MClassType] */;
6335 val* var2 /* : MClassType */;
6336 val* var3 /* : RuntimeVariable */;
6337 val* var_res /* var res: RuntimeVariable */;
6338 short int var4 /* : Bool */;
6339 static val* varonce;
6340 val* var5 /* : String */;
6341 char* var6 /* : NativeString */;
6342 long var7 /* : Int */;
6343 val* var8 /* : String */;
6344 val* var9 /* : String */;
6345 static val* varonce10;
6346 val* var11 /* : String */;
6347 char* var12 /* : NativeString */;
6348 long var13 /* : Int */;
6349 val* var14 /* : String */;
6350 static val* varonce15;
6351 val* var16 /* : String */;
6352 char* var17 /* : NativeString */;
6353 long var18 /* : Int */;
6354 val* var19 /* : String */;
6355 val* var20 /* : Array[Object] */;
6356 long var21 /* : Int */;
6357 val* var22 /* : NativeArray[Object] */;
6358 val* var23 /* : String */;
6359 static val* varonce24;
6360 val* var25 /* : String */;
6361 char* var26 /* : NativeString */;
6362 long var27 /* : Int */;
6363 val* var28 /* : String */;
6364 static val* varonce29;
6365 val* var30 /* : String */;
6366 char* var31 /* : NativeString */;
6367 long var32 /* : Int */;
6368 val* var33 /* : String */;
6369 val* var34 /* : String */;
6370 static val* varonce35;
6371 val* var36 /* : String */;
6372 char* var37 /* : NativeString */;
6373 long var38 /* : Int */;
6374 val* var39 /* : String */;
6375 val* var40 /* : Array[Object] */;
6376 long var41 /* : Int */;
6377 val* var42 /* : NativeArray[Object] */;
6378 val* var43 /* : String */;
6379 static val* varonce44;
6380 val* var45 /* : String */;
6381 char* var46 /* : NativeString */;
6382 long var47 /* : Int */;
6383 val* var48 /* : String */;
6384 static val* varonce49;
6385 val* var50 /* : String */;
6386 char* var51 /* : NativeString */;
6387 long var52 /* : Int */;
6388 val* var53 /* : String */;
6389 val* var54 /* : Array[Object] */;
6390 long var55 /* : Int */;
6391 val* var56 /* : NativeArray[Object] */;
6392 val* var57 /* : String */;
6393 val* var58 /* : nullable Object */;
6394 val* var_last /* var last: MClassType */;
6395 val* var59 /* : Iterator[nullable Object] */;
6396 short int var60 /* : Bool */;
6397 val* var61 /* : nullable Object */;
6398 val* var_t /* var t: MClassType */;
6399 short int var62 /* : Bool */;
6400 val* var63 /* : AbstractCompiler */;
6401 short int var64 /* : Bool */;
6402 short int var65 /* : Bool */;
6403 short int var_ /* var : Bool */;
6404 short int var66 /* : Bool */;
6405 static val* varonce67;
6406 val* var68 /* : String */;
6407 char* var69 /* : NativeString */;
6408 long var70 /* : Int */;
6409 val* var71 /* : String */;
6410 val* var72 /* : AbstractCompiler */;
6411 val* var73 /* : String */;
6412 static val* varonce74;
6413 val* var75 /* : String */;
6414 char* var76 /* : NativeString */;
6415 long var77 /* : Int */;
6416 val* var78 /* : String */;
6417 val* var79 /* : Array[Object] */;
6418 long var80 /* : Int */;
6419 val* var81 /* : NativeArray[Object] */;
6420 val* var82 /* : String */;
6421 static val* varonce83;
6422 val* var84 /* : String */;
6423 char* var85 /* : NativeString */;
6424 long var86 /* : Int */;
6425 val* var87 /* : String */;
6426 val* var88 /* : AbstractCompiler */;
6427 val* var89 /* : String */;
6428 static val* varonce90;
6429 val* var91 /* : String */;
6430 char* var92 /* : NativeString */;
6431 long var93 /* : Int */;
6432 val* var94 /* : String */;
6433 val* var95 /* : Array[Object] */;
6434 long var96 /* : Int */;
6435 val* var97 /* : NativeArray[Object] */;
6436 val* var98 /* : String */;
6437 val* var99 /* : RuntimeVariable */;
6438 val* var_recv2 /* var recv2: RuntimeVariable */;
6439 val* var100 /* : MPropDef */;
6440 val* var101 /* : nullable MType */;
6441 val* var_ta /* var ta: MType */;
6442 val* var102 /* : MType */;
6443 static val* varonce103;
6444 val* var104 /* : String */;
6445 char* var105 /* : NativeString */;
6446 long var106 /* : Int */;
6447 val* var107 /* : String */;
6448 val* var108 /* : String */;
6449 static val* varonce109;
6450 val* var110 /* : String */;
6451 char* var111 /* : NativeString */;
6452 long var112 /* : Int */;
6453 val* var113 /* : String */;
6454 static val* varonce114;
6455 val* var115 /* : String */;
6456 char* var116 /* : NativeString */;
6457 long var117 /* : Int */;
6458 val* var118 /* : String */;
6459 val* var119 /* : MPropDef */;
6460 val* var120 /* : String */;
6461 val* var121 /* : Array[Object] */;
6462 long var122 /* : Int */;
6463 val* var123 /* : NativeArray[Object] */;
6464 val* var124 /* : String */;
6465 val* var125 /* : RuntimeVariable */;
6466 val* var_attr /* var attr: RuntimeVariable */;
6467 short int var126 /* : Bool */;
6468 int cltype;
6469 int idtype;
6470 short int var127 /* : Bool */;
6471 val* var128 /* : String */;
6472 static val* varonce129;
6473 val* var130 /* : String */;
6474 char* var131 /* : NativeString */;
6475 long var132 /* : Int */;
6476 val* var133 /* : String */;
6477 short int var134 /* : Bool */;
6478 static val* varonce135;
6479 val* var136 /* : String */;
6480 char* var137 /* : NativeString */;
6481 long var138 /* : Int */;
6482 val* var139 /* : String */;
6483 static val* varonce140;
6484 val* var141 /* : String */;
6485 char* var142 /* : NativeString */;
6486 long var143 /* : Int */;
6487 val* var144 /* : String */;
6488 val* var145 /* : Array[Object] */;
6489 long var146 /* : Int */;
6490 val* var147 /* : NativeArray[Object] */;
6491 val* var148 /* : String */;
6492 static val* varonce149;
6493 val* var150 /* : String */;
6494 char* var151 /* : NativeString */;
6495 long var152 /* : Int */;
6496 val* var153 /* : String */;
6497 val* var154 /* : Array[Object] */;
6498 long var155 /* : Int */;
6499 val* var156 /* : NativeArray[Object] */;
6500 val* var157 /* : String */;
6501 static val* varonce158;
6502 val* var159 /* : String */;
6503 char* var160 /* : NativeString */;
6504 long var161 /* : Int */;
6505 val* var162 /* : String */;
6506 val* var163 /* : AbstractCompiler */;
6507 short int var164 /* : Bool */;
6508 static val* varonce165;
6509 val* var166 /* : String */;
6510 char* var167 /* : NativeString */;
6511 long var168 /* : Int */;
6512 val* var169 /* : String */;
6513 static val* varonce170;
6514 val* var171 /* : String */;
6515 char* var172 /* : NativeString */;
6516 long var173 /* : Int */;
6517 val* var174 /* : String */;
6518 var_a = p0;
6519 var_recv = p1;
6520 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
6521 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
6522 var_types = var1;
6523 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
6524 var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var2) /* new_var on <self:GlobalCompilerVisitor>*/;
6525 var_res = var3;
6526 var4 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
6527 if (var4){
6528 if (varonce) {
6529 var5 = varonce;
6530 } else {
6531 var6 = "/*BUG: no live types for ";
6532 var7 = 25;
6533 var8 = string__NativeString__to_s_with_length(var6, var7);
6534 var5 = var8;
6535 varonce = var5;
6536 }
6537 var9 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
6538 if (varonce10) {
6539 var11 = varonce10;
6540 } else {
6541 var12 = " . ";
6542 var13 = 3;
6543 var14 = string__NativeString__to_s_with_length(var12, var13);
6544 var11 = var14;
6545 varonce10 = var11;
6546 }
6547 if (varonce15) {
6548 var16 = varonce15;
6549 } else {
6550 var17 = "*/";
6551 var18 = 2;
6552 var19 = string__NativeString__to_s_with_length(var17, var18);
6553 var16 = var19;
6554 varonce15 = var16;
6555 }
6556 var20 = NEW_array__Array(&type_array__Arraykernel__Object);
6557 { /* var20 = array_instance Array[Object] */
6558 var21 = 5;
6559 var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
6560 ((struct instance_array__NativeArray*)var22)->values[0] = (val*) var5;
6561 ((struct instance_array__NativeArray*)var22)->values[1] = (val*) var9;
6562 ((struct instance_array__NativeArray*)var22)->values[2] = (val*) var11;
6563 ((struct instance_array__NativeArray*)var22)->values[3] = (val*) var_a;
6564 ((struct instance_array__NativeArray*)var22)->values[4] = (val*) var16;
6565 ((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
6566 }
6567 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
6568 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var23) /* add on <self:GlobalCompilerVisitor>*/;
6569 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
6570 var = var_res;
6571 goto RET_LABEL;
6572 } else {
6573 }
6574 if (varonce24) {
6575 var25 = varonce24;
6576 } else {
6577 var26 = "/* isset ";
6578 var27 = 9;
6579 var28 = string__NativeString__to_s_with_length(var26, var27);
6580 var25 = var28;
6581 varonce24 = var25;
6582 }
6583 if (varonce29) {
6584 var30 = varonce29;
6585 } else {
6586 var31 = " on ";
6587 var32 = 4;
6588 var33 = string__NativeString__to_s_with_length(var31, var32);
6589 var30 = var33;
6590 varonce29 = var30;
6591 }
6592 var34 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
6593 if (varonce35) {
6594 var36 = varonce35;
6595 } else {
6596 var37 = " */";
6597 var38 = 3;
6598 var39 = string__NativeString__to_s_with_length(var37, var38);
6599 var36 = var39;
6600 varonce35 = var36;
6601 }
6602 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
6603 { /* var40 = array_instance Array[Object] */
6604 var41 = 5;
6605 var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
6606 ((struct instance_array__NativeArray*)var42)->values[0] = (val*) var25;
6607 ((struct instance_array__NativeArray*)var42)->values[1] = (val*) var_a;
6608 ((struct instance_array__NativeArray*)var42)->values[2] = (val*) var30;
6609 ((struct instance_array__NativeArray*)var42)->values[3] = (val*) var34;
6610 ((struct instance_array__NativeArray*)var42)->values[4] = (val*) var36;
6611 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
6612 }
6613 var43 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
6614 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var43) /* add on <self:GlobalCompilerVisitor>*/;
6615 if (varonce44) {
6616 var45 = varonce44;
6617 } else {
6618 var46 = "switch(";
6619 var47 = 7;
6620 var48 = string__NativeString__to_s_with_length(var46, var47);
6621 var45 = var48;
6622 varonce44 = var45;
6623 }
6624 if (varonce49) {
6625 var50 = varonce49;
6626 } else {
6627 var51 = "->classid) {";
6628 var52 = 12;
6629 var53 = string__NativeString__to_s_with_length(var51, var52);
6630 var50 = var53;
6631 varonce49 = var50;
6632 }
6633 var54 = NEW_array__Array(&type_array__Arraykernel__Object);
6634 { /* var54 = array_instance Array[Object] */
6635 var55 = 3;
6636 var56 = NEW_array__NativeArray(var55, &type_array__NativeArraykernel__Object);
6637 ((struct instance_array__NativeArray*)var56)->values[0] = (val*) var45;
6638 ((struct instance_array__NativeArray*)var56)->values[1] = (val*) var_recv;
6639 ((struct instance_array__NativeArray*)var56)->values[2] = (val*) var50;
6640 ((void (*)(val*, val*, long))(var54->class->vft[COLOR_array__Array__with_native]))(var54, var56, var55) /* with_native on <var54:Array[Object]>*/;
6641 }
6642 var57 = ((val* (*)(val*))(var54->class->vft[COLOR_string__Object__to_s]))(var54) /* to_s on <var54:Array[Object]>*/;
6643 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var57) /* add on <self:GlobalCompilerVisitor>*/;
6644 var58 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
6645 var_last = var58;
6646 var59 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
6647 for(;;) {
6648 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var59) /* is_ok on <var59:Iterator[nullable Object]>*/;
6649 if(!var60) break;
6650 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__item]))(var59) /* item on <var59:Iterator[nullable Object]>*/;
6651 var_t = var61;
6652 var63 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6653 var64 = ((short int (*)(val*))(var63->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var63) /* hardening on <var63:AbstractCompiler(GlobalCompiler)>*/;
6654 var65 = !var64;
6655 var_ = var65;
6656 if (var65){
6657 var66 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
6658 var62 = var66;
6659 } else {
6660 var62 = var_;
6661 }
6662 if (var62){
6663 if (varonce67) {
6664 var68 = varonce67;
6665 } else {
6666 var69 = "default: /*";
6667 var70 = 11;
6668 var71 = string__NativeString__to_s_with_length(var69, var70);
6669 var68 = var71;
6670 varonce67 = var68;
6671 }
6672 var72 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6673 var73 = ((val* (*)(val*, val*))(var72->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var72, var_t) /* classid on <var72:AbstractCompiler(GlobalCompiler)>*/;
6674 if (varonce74) {
6675 var75 = varonce74;
6676 } else {
6677 var76 = "*/";
6678 var77 = 2;
6679 var78 = string__NativeString__to_s_with_length(var76, var77);
6680 var75 = var78;
6681 varonce74 = var75;
6682 }
6683 var79 = NEW_array__Array(&type_array__Arraykernel__Object);
6684 { /* var79 = array_instance Array[Object] */
6685 var80 = 3;
6686 var81 = NEW_array__NativeArray(var80, &type_array__NativeArraykernel__Object);
6687 ((struct instance_array__NativeArray*)var81)->values[0] = (val*) var68;
6688 ((struct instance_array__NativeArray*)var81)->values[1] = (val*) var73;
6689 ((struct instance_array__NativeArray*)var81)->values[2] = (val*) var75;
6690 ((void (*)(val*, val*, long))(var79->class->vft[COLOR_array__Array__with_native]))(var79, var81, var80) /* with_native on <var79:Array[Object]>*/;
6691 }
6692 var82 = ((val* (*)(val*))(var79->class->vft[COLOR_string__Object__to_s]))(var79) /* to_s on <var79:Array[Object]>*/;
6693 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var82) /* add on <self:GlobalCompilerVisitor>*/;
6694 } else {
6695 if (varonce83) {
6696 var84 = varonce83;
6697 } else {
6698 var85 = "case ";
6699 var86 = 5;
6700 var87 = string__NativeString__to_s_with_length(var85, var86);
6701 var84 = var87;
6702 varonce83 = var84;
6703 }
6704 var88 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6705 var89 = ((val* (*)(val*, val*))(var88->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var88, var_t) /* classid on <var88:AbstractCompiler(GlobalCompiler)>*/;
6706 if (varonce90) {
6707 var91 = varonce90;
6708 } else {
6709 var92 = ":";
6710 var93 = 1;
6711 var94 = string__NativeString__to_s_with_length(var92, var93);
6712 var91 = var94;
6713 varonce90 = var91;
6714 }
6715 var95 = NEW_array__Array(&type_array__Arraykernel__Object);
6716 { /* var95 = array_instance Array[Object] */
6717 var96 = 3;
6718 var97 = NEW_array__NativeArray(var96, &type_array__NativeArraykernel__Object);
6719 ((struct instance_array__NativeArray*)var97)->values[0] = (val*) var84;
6720 ((struct instance_array__NativeArray*)var97)->values[1] = (val*) var89;
6721 ((struct instance_array__NativeArray*)var97)->values[2] = (val*) var91;
6722 ((void (*)(val*, val*, long))(var95->class->vft[COLOR_array__Array__with_native]))(var95, var97, var96) /* with_native on <var95:Array[Object]>*/;
6723 }
6724 var98 = ((val* (*)(val*))(var95->class->vft[COLOR_string__Object__to_s]))(var95) /* to_s on <var95:Array[Object]>*/;
6725 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var98) /* add on <self:GlobalCompilerVisitor>*/;
6726 }
6727 var99 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
6728 var_recv2 = var99;
6729 var100 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
6730 var101 = ((val* (*)(val*))(var100->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var100) /* static_mtype on <var100:MPropDef(MAttributeDef)>*/;
6731 if (var101 == NULL) {
6732 fprintf(stderr, "Runtime error: %s", "Cast failed");
6733 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 585);
6734 show_backtrace(1);
6735 }
6736 var_ta = var101;
6737 var102 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6738 var_ta = var102;
6739 if (varonce103) {
6740 var104 = varonce103;
6741 } else {
6742 var105 = "((struct ";
6743 var106 = 9;
6744 var107 = string__NativeString__to_s_with_length(var105, var106);
6745 var104 = var107;
6746 varonce103 = var104;
6747 }
6748 var108 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
6749 if (varonce109) {
6750 var110 = varonce109;
6751 } else {
6752 var111 = "*)";
6753 var112 = 2;
6754 var113 = string__NativeString__to_s_with_length(var111, var112);
6755 var110 = var113;
6756 varonce109 = var110;
6757 }
6758 if (varonce114) {
6759 var115 = varonce114;
6760 } else {
6761 var116 = ")->";
6762 var117 = 3;
6763 var118 = string__NativeString__to_s_with_length(var116, var117);
6764 var115 = var118;
6765 varonce114 = var115;
6766 }
6767 var119 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
6768 var120 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var119) /* c_name on <var119:MPropDef(MAttributeDef)>*/;
6769 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
6770 { /* var121 = array_instance Array[Object] */
6771 var122 = 6;
6772 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
6773 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var104;
6774 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var108;
6775 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var110;
6776 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var_recv;
6777 ((struct instance_array__NativeArray*)var123)->values[4] = (val*) var115;
6778 ((struct instance_array__NativeArray*)var123)->values[5] = (val*) var120;
6779 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
6780 }
6781 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
6782 var125 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var124, var_ta) /* new_expr on <self:GlobalCompilerVisitor>*/;
6783 var_attr = var125;
6784 /* <var_ta:MType> isa MNullableType */
6785 cltype = type_model__MNullableType.color;
6786 idtype = type_model__MNullableType.id;
6787 if(cltype >= var_ta->type->table_size) {
6788 var126 = 0;
6789 } else {
6790 var126 = var_ta->type->type_table[cltype] == idtype;
6791 }
6792 var127 = !var126;
6793 if (var127){
6794 var128 = ((val* (*)(val*))(var_ta->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_ta) /* ctype on <var_ta:MType>*/;
6795 if (varonce129) {
6796 var130 = varonce129;
6797 } else {
6798 var131 = "val*";
6799 var132 = 4;
6800 var133 = string__NativeString__to_s_with_length(var131, var132);
6801 var130 = var133;
6802 varonce129 = var130;
6803 }
6804 var134 = ((short int (*)(val*, val*))(var128->class->vft[COLOR_kernel__Object___61d_61d]))(var128, var130) /* == on <var128:String>*/;
6805 if (var134){
6806 if (varonce135) {
6807 var136 = varonce135;
6808 } else {
6809 var137 = " = (";
6810 var138 = 4;
6811 var139 = string__NativeString__to_s_with_length(var137, var138);
6812 var136 = var139;
6813 varonce135 = var136;
6814 }
6815 if (varonce140) {
6816 var141 = varonce140;
6817 } else {
6818 var142 = " != NULL);";
6819 var143 = 10;
6820 var144 = string__NativeString__to_s_with_length(var142, var143);
6821 var141 = var144;
6822 varonce140 = var141;
6823 }
6824 var145 = NEW_array__Array(&type_array__Arraykernel__Object);
6825 { /* var145 = array_instance Array[Object] */
6826 var146 = 4;
6827 var147 = NEW_array__NativeArray(var146, &type_array__NativeArraykernel__Object);
6828 ((struct instance_array__NativeArray*)var147)->values[0] = (val*) var_res;
6829 ((struct instance_array__NativeArray*)var147)->values[1] = (val*) var136;
6830 ((struct instance_array__NativeArray*)var147)->values[2] = (val*) var_attr;
6831 ((struct instance_array__NativeArray*)var147)->values[3] = (val*) var141;
6832 ((void (*)(val*, val*, long))(var145->class->vft[COLOR_array__Array__with_native]))(var145, var147, var146) /* with_native on <var145:Array[Object]>*/;
6833 }
6834 var148 = ((val* (*)(val*))(var145->class->vft[COLOR_string__Object__to_s]))(var145) /* to_s on <var145:Array[Object]>*/;
6835 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var148) /* add on <self:GlobalCompilerVisitor>*/;
6836 } else {
6837 if (varonce149) {
6838 var150 = varonce149;
6839 } else {
6840 var151 = " = 1; /*NOTYET isset on primitive attributes*/";
6841 var152 = 46;
6842 var153 = string__NativeString__to_s_with_length(var151, var152);
6843 var150 = var153;
6844 varonce149 = var150;
6845 }
6846 var154 = NEW_array__Array(&type_array__Arraykernel__Object);
6847 { /* var154 = array_instance Array[Object] */
6848 var155 = 2;
6849 var156 = NEW_array__NativeArray(var155, &type_array__NativeArraykernel__Object);
6850 ((struct instance_array__NativeArray*)var156)->values[0] = (val*) var_res;
6851 ((struct instance_array__NativeArray*)var156)->values[1] = (val*) var150;
6852 ((void (*)(val*, val*, long))(var154->class->vft[COLOR_array__Array__with_native]))(var154, var156, var155) /* with_native on <var154:Array[Object]>*/;
6853 }
6854 var157 = ((val* (*)(val*))(var154->class->vft[COLOR_string__Object__to_s]))(var154) /* to_s on <var154:Array[Object]>*/;
6855 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var157) /* add on <self:GlobalCompilerVisitor>*/;
6856 }
6857 } else {
6858 }
6859 if (varonce158) {
6860 var159 = varonce158;
6861 } else {
6862 var160 = "break;";
6863 var161 = 6;
6864 var162 = string__NativeString__to_s_with_length(var160, var161);
6865 var159 = var162;
6866 varonce158 = var159;
6867 }
6868 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var159) /* add on <self:GlobalCompilerVisitor>*/;
6869 CONTINUE_label: (void)0;
6870 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__next]))(var59) /* next on <var59:Iterator[nullable Object]>*/;
6871 }
6872 BREAK_label: (void)0;
6873 var163 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6874 var164 = ((short int (*)(val*))(var163->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var163) /* hardening on <var163:AbstractCompiler(GlobalCompiler)>*/;
6875 if (var164){
6876 if (varonce165) {
6877 var166 = varonce165;
6878 } else {
6879 var167 = "default: /* Bug */";
6880 var168 = 18;
6881 var169 = string__NativeString__to_s_with_length(var167, var168);
6882 var166 = var169;
6883 varonce165 = var166;
6884 }
6885 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var166) /* add on <self:GlobalCompilerVisitor>*/;
6886 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
6887 } else {
6888 }
6889 if (varonce170) {
6890 var171 = varonce170;
6891 } else {
6892 var172 = "}";
6893 var173 = 1;
6894 var174 = string__NativeString__to_s_with_length(var172, var173);
6895 var171 = var174;
6896 varonce170 = var171;
6897 }
6898 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
6899 var = var_res;
6900 goto RET_LABEL;
6901 RET_LABEL:;
6902 return var;
6903 }
6904 /* method global_compiler#GlobalCompilerVisitor#isset_attribute for (self: Object, MAttribute, RuntimeVariable): RuntimeVariable */
6905 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__isset_attribute(val* self, val* p0, val* p1) {
6906 val* var /* : RuntimeVariable */;
6907 val* var1 /* : RuntimeVariable */;
6908 var1 = global_compiler__GlobalCompilerVisitor__isset_attribute(self, p0, p1);
6909 var = var1;
6910 RET_LABEL:;
6911 return var;
6912 }
6913 /* method global_compiler#GlobalCompilerVisitor#read_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable): RuntimeVariable */
6914 val* global_compiler__GlobalCompilerVisitor__read_attribute(val* self, val* p0, val* p1) {
6915 val* var /* : RuntimeVariable */;
6916 val* var_a /* var a: MAttribute */;
6917 val* var_recv /* var recv: RuntimeVariable */;
6918 val* var1 /* : Array[MClassType] */;
6919 val* var_types /* var types: Array[MClassType] */;
6920 val* var2 /* : MPropDef */;
6921 val* var3 /* : nullable MType */;
6922 val* var_ret /* var ret: MType */;
6923 val* var4 /* : MType */;
6924 val* var5 /* : RuntimeVariable */;
6925 val* var_res /* var res: RuntimeVariable */;
6926 short int var6 /* : Bool */;
6927 static val* varonce;
6928 val* var7 /* : String */;
6929 char* var8 /* : NativeString */;
6930 long var9 /* : Int */;
6931 val* var10 /* : String */;
6932 val* var11 /* : String */;
6933 static val* varonce12;
6934 val* var13 /* : String */;
6935 char* var14 /* : NativeString */;
6936 long var15 /* : Int */;
6937 val* var16 /* : String */;
6938 static val* varonce17;
6939 val* var18 /* : String */;
6940 char* var19 /* : NativeString */;
6941 long var20 /* : Int */;
6942 val* var21 /* : String */;
6943 val* var22 /* : Array[Object] */;
6944 long var23 /* : Int */;
6945 val* var24 /* : NativeArray[Object] */;
6946 val* var25 /* : String */;
6947 static val* varonce26;
6948 val* var27 /* : String */;
6949 char* var28 /* : NativeString */;
6950 long var29 /* : Int */;
6951 val* var30 /* : String */;
6952 static val* varonce31;
6953 val* var32 /* : String */;
6954 char* var33 /* : NativeString */;
6955 long var34 /* : Int */;
6956 val* var35 /* : String */;
6957 val* var36 /* : String */;
6958 static val* varonce37;
6959 val* var38 /* : String */;
6960 char* var39 /* : NativeString */;
6961 long var40 /* : Int */;
6962 val* var41 /* : String */;
6963 val* var42 /* : Array[Object] */;
6964 long var43 /* : Int */;
6965 val* var44 /* : NativeArray[Object] */;
6966 val* var45 /* : String */;
6967 static val* varonce46;
6968 val* var47 /* : String */;
6969 char* var48 /* : NativeString */;
6970 long var49 /* : Int */;
6971 val* var50 /* : String */;
6972 static val* varonce51;
6973 val* var52 /* : String */;
6974 char* var53 /* : NativeString */;
6975 long var54 /* : Int */;
6976 val* var55 /* : String */;
6977 val* var56 /* : Array[Object] */;
6978 long var57 /* : Int */;
6979 val* var58 /* : NativeArray[Object] */;
6980 val* var59 /* : String */;
6981 val* var60 /* : nullable Object */;
6982 val* var_last /* var last: MClassType */;
6983 val* var61 /* : Iterator[nullable Object] */;
6984 short int var62 /* : Bool */;
6985 val* var63 /* : nullable Object */;
6986 val* var_t /* var t: MClassType */;
6987 short int var64 /* : Bool */;
6988 val* var65 /* : AbstractCompiler */;
6989 short int var66 /* : Bool */;
6990 short int var67 /* : Bool */;
6991 short int var_ /* var : Bool */;
6992 short int var68 /* : Bool */;
6993 static val* varonce69;
6994 val* var70 /* : String */;
6995 char* var71 /* : NativeString */;
6996 long var72 /* : Int */;
6997 val* var73 /* : String */;
6998 val* var74 /* : AbstractCompiler */;
6999 val* var75 /* : String */;
7000 static val* varonce76;
7001 val* var77 /* : String */;
7002 char* var78 /* : NativeString */;
7003 long var79 /* : Int */;
7004 val* var80 /* : String */;
7005 val* var81 /* : Array[Object] */;
7006 long var82 /* : Int */;
7007 val* var83 /* : NativeArray[Object] */;
7008 val* var84 /* : String */;
7009 static val* varonce85;
7010 val* var86 /* : String */;
7011 char* var87 /* : NativeString */;
7012 long var88 /* : Int */;
7013 val* var89 /* : String */;
7014 val* var90 /* : AbstractCompiler */;
7015 val* var91 /* : String */;
7016 static val* varonce92;
7017 val* var93 /* : String */;
7018 char* var94 /* : NativeString */;
7019 long var95 /* : Int */;
7020 val* var96 /* : String */;
7021 val* var97 /* : Array[Object] */;
7022 long var98 /* : Int */;
7023 val* var99 /* : NativeArray[Object] */;
7024 val* var100 /* : String */;
7025 val* var101 /* : RuntimeVariable */;
7026 val* var_recv2 /* var recv2: RuntimeVariable */;
7027 val* var102 /* : MPropDef */;
7028 val* var103 /* : nullable MType */;
7029 val* var_ta /* var ta: MType */;
7030 val* var104 /* : MType */;
7031 static val* varonce105;
7032 val* var106 /* : String */;
7033 char* var107 /* : NativeString */;
7034 long var108 /* : Int */;
7035 val* var109 /* : String */;
7036 val* var110 /* : String */;
7037 static val* varonce111;
7038 val* var112 /* : String */;
7039 char* var113 /* : NativeString */;
7040 long var114 /* : Int */;
7041 val* var115 /* : String */;
7042 static val* varonce116;
7043 val* var117 /* : String */;
7044 char* var118 /* : NativeString */;
7045 long var119 /* : Int */;
7046 val* var120 /* : String */;
7047 val* var121 /* : MPropDef */;
7048 val* var122 /* : String */;
7049 val* var123 /* : Array[Object] */;
7050 long var124 /* : Int */;
7051 val* var125 /* : NativeArray[Object] */;
7052 val* var126 /* : String */;
7053 val* var127 /* : RuntimeVariable */;
7054 val* var_res2 /* var res2: RuntimeVariable */;
7055 short int var128 /* : Bool */;
7056 short int var129 /* : Bool */;
7057 int cltype;
7058 int idtype;
7059 short int var130 /* : Bool */;
7060 short int var_131 /* var : Bool */;
7061 val* var132 /* : AbstractCompiler */;
7062 val* var133 /* : ModelBuilder */;
7063 val* var134 /* : ToolContext */;
7064 val* var135 /* : OptionBool */;
7065 val* var136 /* : nullable Object */;
7066 short int var137 /* : Bool */;
7067 short int var138 /* : Bool */;
7068 val* var139 /* : String */;
7069 static val* varonce140;
7070 val* var141 /* : String */;
7071 char* var142 /* : NativeString */;
7072 long var143 /* : Int */;
7073 val* var144 /* : String */;
7074 short int var145 /* : Bool */;
7075 static val* varonce146;
7076 val* var147 /* : String */;
7077 char* var148 /* : NativeString */;
7078 long var149 /* : Int */;
7079 val* var150 /* : String */;
7080 static val* varonce151;
7081 val* var152 /* : String */;
7082 char* var153 /* : NativeString */;
7083 long var154 /* : Int */;
7084 val* var155 /* : String */;
7085 val* var156 /* : Array[Object] */;
7086 long var157 /* : Int */;
7087 val* var158 /* : NativeArray[Object] */;
7088 val* var159 /* : String */;
7089 static val* varonce160;
7090 val* var161 /* : String */;
7091 char* var162 /* : NativeString */;
7092 long var163 /* : Int */;
7093 val* var164 /* : String */;
7094 val* var165 /* : String */;
7095 val* var166 /* : Array[Object] */;
7096 long var167 /* : Int */;
7097 val* var168 /* : NativeArray[Object] */;
7098 val* var169 /* : String */;
7099 static val* varonce170;
7100 val* var171 /* : String */;
7101 char* var172 /* : NativeString */;
7102 long var173 /* : Int */;
7103 val* var174 /* : String */;
7104 static val* varonce175;
7105 val* var176 /* : String */;
7106 char* var177 /* : NativeString */;
7107 long var178 /* : Int */;
7108 val* var179 /* : String */;
7109 static val* varonce180;
7110 val* var181 /* : String */;
7111 char* var182 /* : NativeString */;
7112 long var183 /* : Int */;
7113 val* var184 /* : String */;
7114 val* var185 /* : AbstractCompiler */;
7115 short int var186 /* : Bool */;
7116 static val* varonce187;
7117 val* var188 /* : String */;
7118 char* var189 /* : NativeString */;
7119 long var190 /* : Int */;
7120 val* var191 /* : String */;
7121 static val* varonce192;
7122 val* var193 /* : String */;
7123 char* var194 /* : NativeString */;
7124 long var195 /* : Int */;
7125 val* var196 /* : String */;
7126 var_a = p0;
7127 var_recv = p1;
7128 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
7129 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
7130 var_types = var1;
7131 var2 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7132 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var2) /* static_mtype on <var2:MPropDef(MAttributeDef)>*/;
7133 if (var3 == NULL) {
7134 fprintf(stderr, "Runtime error: %s", "Cast failed");
7135 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 612);
7136 show_backtrace(1);
7137 }
7138 var_ret = var3;
7139 var4 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7140 var_ret = var4;
7141 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
7142 var_res = var5;
7143 var6 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
7144 if (var6){
7145 if (varonce) {
7146 var7 = varonce;
7147 } else {
7148 var8 = "/*BUG: no live types for ";
7149 var9 = 25;
7150 var10 = string__NativeString__to_s_with_length(var8, var9);
7151 var7 = var10;
7152 varonce = var7;
7153 }
7154 var11 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7155 if (varonce12) {
7156 var13 = varonce12;
7157 } else {
7158 var14 = " . ";
7159 var15 = 3;
7160 var16 = string__NativeString__to_s_with_length(var14, var15);
7161 var13 = var16;
7162 varonce12 = var13;
7163 }
7164 if (varonce17) {
7165 var18 = varonce17;
7166 } else {
7167 var19 = "*/";
7168 var20 = 2;
7169 var21 = string__NativeString__to_s_with_length(var19, var20);
7170 var18 = var21;
7171 varonce17 = var18;
7172 }
7173 var22 = NEW_array__Array(&type_array__Arraykernel__Object);
7174 { /* var22 = array_instance Array[Object] */
7175 var23 = 5;
7176 var24 = NEW_array__NativeArray(var23, &type_array__NativeArraykernel__Object);
7177 ((struct instance_array__NativeArray*)var24)->values[0] = (val*) var7;
7178 ((struct instance_array__NativeArray*)var24)->values[1] = (val*) var11;
7179 ((struct instance_array__NativeArray*)var24)->values[2] = (val*) var13;
7180 ((struct instance_array__NativeArray*)var24)->values[3] = (val*) var_a;
7181 ((struct instance_array__NativeArray*)var24)->values[4] = (val*) var18;
7182 ((void (*)(val*, val*, long))(var22->class->vft[COLOR_array__Array__with_native]))(var22, var24, var23) /* with_native on <var22:Array[Object]>*/;
7183 }
7184 var25 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__to_s]))(var22) /* to_s on <var22:Array[Object]>*/;
7185 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var25) /* add on <self:GlobalCompilerVisitor>*/;
7186 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7187 var = var_res;
7188 goto RET_LABEL;
7189 } else {
7190 }
7191 if (varonce26) {
7192 var27 = varonce26;
7193 } else {
7194 var28 = "/* read ";
7195 var29 = 8;
7196 var30 = string__NativeString__to_s_with_length(var28, var29);
7197 var27 = var30;
7198 varonce26 = var27;
7199 }
7200 if (varonce31) {
7201 var32 = varonce31;
7202 } else {
7203 var33 = " on ";
7204 var34 = 4;
7205 var35 = string__NativeString__to_s_with_length(var33, var34);
7206 var32 = var35;
7207 varonce31 = var32;
7208 }
7209 var36 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7210 if (varonce37) {
7211 var38 = varonce37;
7212 } else {
7213 var39 = " */";
7214 var40 = 3;
7215 var41 = string__NativeString__to_s_with_length(var39, var40);
7216 var38 = var41;
7217 varonce37 = var38;
7218 }
7219 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
7220 { /* var42 = array_instance Array[Object] */
7221 var43 = 5;
7222 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
7223 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var27;
7224 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_a;
7225 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var32;
7226 ((struct instance_array__NativeArray*)var44)->values[3] = (val*) var36;
7227 ((struct instance_array__NativeArray*)var44)->values[4] = (val*) var38;
7228 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
7229 }
7230 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
7231 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var45) /* add on <self:GlobalCompilerVisitor>*/;
7232 if (varonce46) {
7233 var47 = varonce46;
7234 } else {
7235 var48 = "switch(";
7236 var49 = 7;
7237 var50 = string__NativeString__to_s_with_length(var48, var49);
7238 var47 = var50;
7239 varonce46 = var47;
7240 }
7241 if (varonce51) {
7242 var52 = varonce51;
7243 } else {
7244 var53 = "->classid) {";
7245 var54 = 12;
7246 var55 = string__NativeString__to_s_with_length(var53, var54);
7247 var52 = var55;
7248 varonce51 = var52;
7249 }
7250 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
7251 { /* var56 = array_instance Array[Object] */
7252 var57 = 3;
7253 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
7254 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var47;
7255 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var_recv;
7256 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var52;
7257 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
7258 }
7259 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
7260 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
7261 var60 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
7262 var_last = var60;
7263 var61 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
7264 for(;;) {
7265 var62 = ((short int (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var61) /* is_ok on <var61:Iterator[nullable Object]>*/;
7266 if(!var62) break;
7267 var63 = ((val* (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__item]))(var61) /* item on <var61:Iterator[nullable Object]>*/;
7268 var_t = var63;
7269 var65 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7270 var66 = ((short int (*)(val*))(var65->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var65) /* hardening on <var65:AbstractCompiler(GlobalCompiler)>*/;
7271 var67 = !var66;
7272 var_ = var67;
7273 if (var67){
7274 var68 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
7275 var64 = var68;
7276 } else {
7277 var64 = var_;
7278 }
7279 if (var64){
7280 if (varonce69) {
7281 var70 = varonce69;
7282 } else {
7283 var71 = "default: /*";
7284 var72 = 11;
7285 var73 = string__NativeString__to_s_with_length(var71, var72);
7286 var70 = var73;
7287 varonce69 = var70;
7288 }
7289 var74 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7290 var75 = ((val* (*)(val*, val*))(var74->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var74, var_t) /* classid on <var74:AbstractCompiler(GlobalCompiler)>*/;
7291 if (varonce76) {
7292 var77 = varonce76;
7293 } else {
7294 var78 = "*/";
7295 var79 = 2;
7296 var80 = string__NativeString__to_s_with_length(var78, var79);
7297 var77 = var80;
7298 varonce76 = var77;
7299 }
7300 var81 = NEW_array__Array(&type_array__Arraykernel__Object);
7301 { /* var81 = array_instance Array[Object] */
7302 var82 = 3;
7303 var83 = NEW_array__NativeArray(var82, &type_array__NativeArraykernel__Object);
7304 ((struct instance_array__NativeArray*)var83)->values[0] = (val*) var70;
7305 ((struct instance_array__NativeArray*)var83)->values[1] = (val*) var75;
7306 ((struct instance_array__NativeArray*)var83)->values[2] = (val*) var77;
7307 ((void (*)(val*, val*, long))(var81->class->vft[COLOR_array__Array__with_native]))(var81, var83, var82) /* with_native on <var81:Array[Object]>*/;
7308 }
7309 var84 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__to_s]))(var81) /* to_s on <var81:Array[Object]>*/;
7310 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var84) /* add on <self:GlobalCompilerVisitor>*/;
7311 } else {
7312 if (varonce85) {
7313 var86 = varonce85;
7314 } else {
7315 var87 = "case ";
7316 var88 = 5;
7317 var89 = string__NativeString__to_s_with_length(var87, var88);
7318 var86 = var89;
7319 varonce85 = var86;
7320 }
7321 var90 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7322 var91 = ((val* (*)(val*, val*))(var90->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var90, var_t) /* classid on <var90:AbstractCompiler(GlobalCompiler)>*/;
7323 if (varonce92) {
7324 var93 = varonce92;
7325 } else {
7326 var94 = ":";
7327 var95 = 1;
7328 var96 = string__NativeString__to_s_with_length(var94, var95);
7329 var93 = var96;
7330 varonce92 = var93;
7331 }
7332 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
7333 { /* var97 = array_instance Array[Object] */
7334 var98 = 3;
7335 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
7336 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var86;
7337 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var91;
7338 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
7339 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
7340 }
7341 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
7342 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var100) /* add on <self:GlobalCompilerVisitor>*/;
7343 }
7344 var101 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
7345 var_recv2 = var101;
7346 var102 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7347 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var102) /* static_mtype on <var102:MPropDef(MAttributeDef)>*/;
7348 if (var103 == NULL) {
7349 fprintf(stderr, "Runtime error: %s", "Cast failed");
7350 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 631);
7351 show_backtrace(1);
7352 }
7353 var_ta = var103;
7354 var104 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7355 var_ta = var104;
7356 if (varonce105) {
7357 var106 = varonce105;
7358 } else {
7359 var107 = "((struct ";
7360 var108 = 9;
7361 var109 = string__NativeString__to_s_with_length(var107, var108);
7362 var106 = var109;
7363 varonce105 = var106;
7364 }
7365 var110 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
7366 if (varonce111) {
7367 var112 = varonce111;
7368 } else {
7369 var113 = "*)";
7370 var114 = 2;
7371 var115 = string__NativeString__to_s_with_length(var113, var114);
7372 var112 = var115;
7373 varonce111 = var112;
7374 }
7375 if (varonce116) {
7376 var117 = varonce116;
7377 } else {
7378 var118 = ")->";
7379 var119 = 3;
7380 var120 = string__NativeString__to_s_with_length(var118, var119);
7381 var117 = var120;
7382 varonce116 = var117;
7383 }
7384 var121 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7385 var122 = ((val* (*)(val*))(var121->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var121) /* c_name on <var121:MPropDef(MAttributeDef)>*/;
7386 var123 = NEW_array__Array(&type_array__Arraykernel__Object);
7387 { /* var123 = array_instance Array[Object] */
7388 var124 = 6;
7389 var125 = NEW_array__NativeArray(var124, &type_array__NativeArraykernel__Object);
7390 ((struct instance_array__NativeArray*)var125)->values[0] = (val*) var106;
7391 ((struct instance_array__NativeArray*)var125)->values[1] = (val*) var110;
7392 ((struct instance_array__NativeArray*)var125)->values[2] = (val*) var112;
7393 ((struct instance_array__NativeArray*)var125)->values[3] = (val*) var_recv;
7394 ((struct instance_array__NativeArray*)var125)->values[4] = (val*) var117;
7395 ((struct instance_array__NativeArray*)var125)->values[5] = (val*) var122;
7396 ((void (*)(val*, val*, long))(var123->class->vft[COLOR_array__Array__with_native]))(var123, var125, var124) /* with_native on <var123:Array[Object]>*/;
7397 }
7398 var126 = ((val* (*)(val*))(var123->class->vft[COLOR_string__Object__to_s]))(var123) /* to_s on <var123:Array[Object]>*/;
7399 var127 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var126, var_ta) /* new_expr on <self:GlobalCompilerVisitor>*/;
7400 var_res2 = var127;
7401 /* <var_ta:MType> isa MNullableType */
7402 cltype = type_model__MNullableType.color;
7403 idtype = type_model__MNullableType.id;
7404 if(cltype >= var_ta->type->table_size) {
7405 var129 = 0;
7406 } else {
7407 var129 = var_ta->type->type_table[cltype] == idtype;
7408 }
7409 var130 = !var129;
7410 var_131 = var130;
7411 if (var130){
7412 var132 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7413 var133 = ((val* (*)(val*))(var132->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var132) /* modelbuilder on <var132:AbstractCompiler(GlobalCompiler)>*/;
7414 var134 = ((val* (*)(val*))(var133->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var133) /* toolcontext on <var133:ModelBuilder>*/;
7415 var135 = ((val* (*)(val*))(var134->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_other]))(var134) /* opt_no_check_other on <var134:ToolContext>*/;
7416 var136 = ((val* (*)(val*))(var135->class->vft[COLOR_opts__Option__value]))(var135) /* value on <var135:OptionBool>*/;
7417 var137 = ((struct instance_kernel__Bool*)var136)->value; /* autounbox from nullable Object to Bool */;
7418 var138 = !var137;
7419 var128 = var138;
7420 } else {
7421 var128 = var_131;
7422 }
7423 if (var128){
7424 var139 = ((val* (*)(val*))(var_ta->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_ta) /* ctype on <var_ta:MType>*/;
7425 if (varonce140) {
7426 var141 = varonce140;
7427 } else {
7428 var142 = "val*";
7429 var143 = 4;
7430 var144 = string__NativeString__to_s_with_length(var142, var143);
7431 var141 = var144;
7432 varonce140 = var141;
7433 }
7434 var145 = ((short int (*)(val*, val*))(var139->class->vft[COLOR_kernel__Object___61d_61d]))(var139, var141) /* == on <var139:String>*/;
7435 if (var145){
7436 if (varonce146) {
7437 var147 = varonce146;
7438 } else {
7439 var148 = "if (";
7440 var149 = 4;
7441 var150 = string__NativeString__to_s_with_length(var148, var149);
7442 var147 = var150;
7443 varonce146 = var147;
7444 }
7445 if (varonce151) {
7446 var152 = varonce151;
7447 } else {
7448 var153 = " == NULL) {";
7449 var154 = 11;
7450 var155 = string__NativeString__to_s_with_length(var153, var154);
7451 var152 = var155;
7452 varonce151 = var152;
7453 }
7454 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
7455 { /* var156 = array_instance Array[Object] */
7456 var157 = 3;
7457 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
7458 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var147;
7459 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var_res2;
7460 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var152;
7461 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
7462 }
7463 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
7464 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var159) /* add on <self:GlobalCompilerVisitor>*/;
7465 if (varonce160) {
7466 var161 = varonce160;
7467 } else {
7468 var162 = "Uninitialized attribute ";
7469 var163 = 24;
7470 var164 = string__NativeString__to_s_with_length(var162, var163);
7471 var161 = var164;
7472 varonce160 = var161;
7473 }
7474 var165 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__name]))(var_a) /* name on <var_a:MAttribute>*/;
7475 var166 = NEW_array__Array(&type_array__Arraykernel__Object);
7476 { /* var166 = array_instance Array[Object] */
7477 var167 = 2;
7478 var168 = NEW_array__NativeArray(var167, &type_array__NativeArraykernel__Object);
7479 ((struct instance_array__NativeArray*)var168)->values[0] = (val*) var161;
7480 ((struct instance_array__NativeArray*)var168)->values[1] = (val*) var165;
7481 ((void (*)(val*, val*, long))(var166->class->vft[COLOR_array__Array__with_native]))(var166, var168, var167) /* with_native on <var166:Array[Object]>*/;
7482 }
7483 var169 = ((val* (*)(val*))(var166->class->vft[COLOR_string__Object__to_s]))(var166) /* to_s on <var166:Array[Object]>*/;
7484 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var169) /* add_abort on <self:GlobalCompilerVisitor>*/;
7485 if (varonce170) {
7486 var171 = varonce170;
7487 } else {
7488 var172 = "}";
7489 var173 = 1;
7490 var174 = string__NativeString__to_s_with_length(var172, var173);
7491 var171 = var174;
7492 varonce170 = var171;
7493 }
7494 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
7495 } else {
7496 if (varonce175) {
7497 var176 = varonce175;
7498 } else {
7499 var177 = "/*NOTYET isset on primitive attributes*/";
7500 var178 = 40;
7501 var179 = string__NativeString__to_s_with_length(var177, var178);
7502 var176 = var179;
7503 varonce175 = var176;
7504 }
7505 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var176) /* add on <self:GlobalCompilerVisitor>*/;
7506 }
7507 } else {
7508 }
7509 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
7510 if (varonce180) {
7511 var181 = varonce180;
7512 } else {
7513 var182 = "break;";
7514 var183 = 6;
7515 var184 = string__NativeString__to_s_with_length(var182, var183);
7516 var181 = var184;
7517 varonce180 = var181;
7518 }
7519 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var181) /* add on <self:GlobalCompilerVisitor>*/;
7520 CONTINUE_label: (void)0;
7521 ((void (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__next]))(var61) /* next on <var61:Iterator[nullable Object]>*/;
7522 }
7523 BREAK_label: (void)0;
7524 var185 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7525 var186 = ((short int (*)(val*))(var185->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var185) /* hardening on <var185:AbstractCompiler(GlobalCompiler)>*/;
7526 if (var186){
7527 if (varonce187) {
7528 var188 = varonce187;
7529 } else {
7530 var189 = "default: /* Bug */";
7531 var190 = 18;
7532 var191 = string__NativeString__to_s_with_length(var189, var190);
7533 var188 = var191;
7534 varonce187 = var188;
7535 }
7536 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
7537 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7538 } else {
7539 }
7540 if (varonce192) {
7541 var193 = varonce192;
7542 } else {
7543 var194 = "}";
7544 var195 = 1;
7545 var196 = string__NativeString__to_s_with_length(var194, var195);
7546 var193 = var196;
7547 varonce192 = var193;
7548 }
7549 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var193) /* add on <self:GlobalCompilerVisitor>*/;
7550 var = var_res;
7551 goto RET_LABEL;
7552 RET_LABEL:;
7553 return var;
7554 }
7555 /* method global_compiler#GlobalCompilerVisitor#read_attribute for (self: Object, MAttribute, RuntimeVariable): RuntimeVariable */
7556 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__read_attribute(val* self, val* p0, val* p1) {
7557 val* var /* : RuntimeVariable */;
7558 val* var1 /* : RuntimeVariable */;
7559 var1 = global_compiler__GlobalCompilerVisitor__read_attribute(self, p0, p1);
7560 var = var1;
7561 RET_LABEL:;
7562 return var;
7563 }
7564 /* method global_compiler#GlobalCompilerVisitor#write_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable, RuntimeVariable) */
7565 void global_compiler__GlobalCompilerVisitor__write_attribute(val* self, val* p0, val* p1, val* p2) {
7566 val* var_a /* var a: MAttribute */;
7567 val* var_recv /* var recv: RuntimeVariable */;
7568 val* var_value /* var value: RuntimeVariable */;
7569 val* var /* : Array[MClassType] */;
7570 val* var_types /* var types: Array[MClassType] */;
7571 short int var1 /* : Bool */;
7572 static val* varonce;
7573 val* var2 /* : String */;
7574 char* var3 /* : NativeString */;
7575 long var4 /* : Int */;
7576 val* var5 /* : String */;
7577 val* var6 /* : String */;
7578 static val* varonce7;
7579 val* var8 /* : String */;
7580 char* var9 /* : NativeString */;
7581 long var10 /* : Int */;
7582 val* var11 /* : String */;
7583 static val* varonce12;
7584 val* var13 /* : String */;
7585 char* var14 /* : NativeString */;
7586 long var15 /* : Int */;
7587 val* var16 /* : String */;
7588 val* var17 /* : Array[Object] */;
7589 long var18 /* : Int */;
7590 val* var19 /* : NativeArray[Object] */;
7591 val* var20 /* : String */;
7592 static val* varonce21;
7593 val* var22 /* : String */;
7594 char* var23 /* : NativeString */;
7595 long var24 /* : Int */;
7596 val* var25 /* : String */;
7597 static val* varonce26;
7598 val* var27 /* : String */;
7599 char* var28 /* : NativeString */;
7600 long var29 /* : Int */;
7601 val* var30 /* : String */;
7602 val* var31 /* : String */;
7603 static val* varonce32;
7604 val* var33 /* : String */;
7605 char* var34 /* : NativeString */;
7606 long var35 /* : Int */;
7607 val* var36 /* : String */;
7608 val* var37 /* : Array[Object] */;
7609 long var38 /* : Int */;
7610 val* var39 /* : NativeArray[Object] */;
7611 val* var40 /* : String */;
7612 static val* varonce41;
7613 val* var42 /* : String */;
7614 char* var43 /* : NativeString */;
7615 long var44 /* : Int */;
7616 val* var45 /* : String */;
7617 static val* varonce46;
7618 val* var47 /* : String */;
7619 char* var48 /* : NativeString */;
7620 long var49 /* : Int */;
7621 val* var50 /* : String */;
7622 val* var51 /* : Array[Object] */;
7623 long var52 /* : Int */;
7624 val* var53 /* : NativeArray[Object] */;
7625 val* var54 /* : String */;
7626 val* var55 /* : nullable Object */;
7627 val* var_last /* var last: MClassType */;
7628 val* var56 /* : Iterator[nullable Object] */;
7629 short int var57 /* : Bool */;
7630 val* var58 /* : nullable Object */;
7631 val* var_t /* var t: MClassType */;
7632 short int var59 /* : Bool */;
7633 val* var60 /* : AbstractCompiler */;
7634 short int var61 /* : Bool */;
7635 short int var62 /* : Bool */;
7636 short int var_ /* var : Bool */;
7637 short int var63 /* : Bool */;
7638 static val* varonce64;
7639 val* var65 /* : String */;
7640 char* var66 /* : NativeString */;
7641 long var67 /* : Int */;
7642 val* var68 /* : String */;
7643 val* var69 /* : AbstractCompiler */;
7644 val* var70 /* : String */;
7645 static val* varonce71;
7646 val* var72 /* : String */;
7647 char* var73 /* : NativeString */;
7648 long var74 /* : Int */;
7649 val* var75 /* : String */;
7650 val* var76 /* : Array[Object] */;
7651 long var77 /* : Int */;
7652 val* var78 /* : NativeArray[Object] */;
7653 val* var79 /* : String */;
7654 static val* varonce80;
7655 val* var81 /* : String */;
7656 char* var82 /* : NativeString */;
7657 long var83 /* : Int */;
7658 val* var84 /* : String */;
7659 val* var85 /* : AbstractCompiler */;
7660 val* var86 /* : String */;
7661 static val* varonce87;
7662 val* var88 /* : String */;
7663 char* var89 /* : NativeString */;
7664 long var90 /* : Int */;
7665 val* var91 /* : String */;
7666 val* var92 /* : Array[Object] */;
7667 long var93 /* : Int */;
7668 val* var94 /* : NativeArray[Object] */;
7669 val* var95 /* : String */;
7670 val* var96 /* : RuntimeVariable */;
7671 val* var_recv2 /* var recv2: RuntimeVariable */;
7672 val* var97 /* : MPropDef */;
7673 val* var98 /* : nullable MType */;
7674 val* var_ta /* var ta: MType */;
7675 val* var99 /* : MType */;
7676 static val* varonce100;
7677 val* var101 /* : String */;
7678 char* var102 /* : NativeString */;
7679 long var103 /* : Int */;
7680 val* var104 /* : String */;
7681 val* var105 /* : String */;
7682 static val* varonce106;
7683 val* var107 /* : String */;
7684 char* var108 /* : NativeString */;
7685 long var109 /* : Int */;
7686 val* var110 /* : String */;
7687 static val* varonce111;
7688 val* var112 /* : String */;
7689 char* var113 /* : NativeString */;
7690 long var114 /* : Int */;
7691 val* var115 /* : String */;
7692 val* var116 /* : MPropDef */;
7693 val* var117 /* : String */;
7694 static val* varonce118;
7695 val* var119 /* : String */;
7696 char* var120 /* : NativeString */;
7697 long var121 /* : Int */;
7698 val* var122 /* : String */;
7699 val* var123 /* : RuntimeVariable */;
7700 static val* varonce124;
7701 val* var125 /* : String */;
7702 char* var126 /* : NativeString */;
7703 long var127 /* : Int */;
7704 val* var128 /* : String */;
7705 val* var129 /* : Array[Object] */;
7706 long var130 /* : Int */;
7707 val* var131 /* : NativeArray[Object] */;
7708 val* var132 /* : String */;
7709 static val* varonce133;
7710 val* var134 /* : String */;
7711 char* var135 /* : NativeString */;
7712 long var136 /* : Int */;
7713 val* var137 /* : String */;
7714 val* var138 /* : AbstractCompiler */;
7715 short int var139 /* : Bool */;
7716 static val* varonce140;
7717 val* var141 /* : String */;
7718 char* var142 /* : NativeString */;
7719 long var143 /* : Int */;
7720 val* var144 /* : String */;
7721 static val* varonce145;
7722 val* var146 /* : String */;
7723 char* var147 /* : NativeString */;
7724 long var148 /* : Int */;
7725 val* var149 /* : String */;
7726 var_a = p0;
7727 var_recv = p1;
7728 var_value = p2;
7729 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
7730 var = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
7731 var_types = var;
7732 var1 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
7733 if (var1){
7734 if (varonce) {
7735 var2 = varonce;
7736 } else {
7737 var3 = "/*BUG: no live types for ";
7738 var4 = 25;
7739 var5 = string__NativeString__to_s_with_length(var3, var4);
7740 var2 = var5;
7741 varonce = var2;
7742 }
7743 var6 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7744 if (varonce7) {
7745 var8 = varonce7;
7746 } else {
7747 var9 = " . ";
7748 var10 = 3;
7749 var11 = string__NativeString__to_s_with_length(var9, var10);
7750 var8 = var11;
7751 varonce7 = var8;
7752 }
7753 if (varonce12) {
7754 var13 = varonce12;
7755 } else {
7756 var14 = "*/";
7757 var15 = 2;
7758 var16 = string__NativeString__to_s_with_length(var14, var15);
7759 var13 = var16;
7760 varonce12 = var13;
7761 }
7762 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
7763 { /* var17 = array_instance Array[Object] */
7764 var18 = 5;
7765 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
7766 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var2;
7767 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var6;
7768 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var8;
7769 ((struct instance_array__NativeArray*)var19)->values[3] = (val*) var_a;
7770 ((struct instance_array__NativeArray*)var19)->values[4] = (val*) var13;
7771 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
7772 }
7773 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
7774 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var20) /* add on <self:GlobalCompilerVisitor>*/;
7775 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7776 goto RET_LABEL;
7777 } else {
7778 }
7779 if (varonce21) {
7780 var22 = varonce21;
7781 } else {
7782 var23 = "/* write ";
7783 var24 = 9;
7784 var25 = string__NativeString__to_s_with_length(var23, var24);
7785 var22 = var25;
7786 varonce21 = var22;
7787 }
7788 if (varonce26) {
7789 var27 = varonce26;
7790 } else {
7791 var28 = " on ";
7792 var29 = 4;
7793 var30 = string__NativeString__to_s_with_length(var28, var29);
7794 var27 = var30;
7795 varonce26 = var27;
7796 }
7797 var31 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7798 if (varonce32) {
7799 var33 = varonce32;
7800 } else {
7801 var34 = " */";
7802 var35 = 3;
7803 var36 = string__NativeString__to_s_with_length(var34, var35);
7804 var33 = var36;
7805 varonce32 = var33;
7806 }
7807 var37 = NEW_array__Array(&type_array__Arraykernel__Object);
7808 { /* var37 = array_instance Array[Object] */
7809 var38 = 5;
7810 var39 = NEW_array__NativeArray(var38, &type_array__NativeArraykernel__Object);
7811 ((struct instance_array__NativeArray*)var39)->values[0] = (val*) var22;
7812 ((struct instance_array__NativeArray*)var39)->values[1] = (val*) var_a;
7813 ((struct instance_array__NativeArray*)var39)->values[2] = (val*) var27;
7814 ((struct instance_array__NativeArray*)var39)->values[3] = (val*) var31;
7815 ((struct instance_array__NativeArray*)var39)->values[4] = (val*) var33;
7816 ((void (*)(val*, val*, long))(var37->class->vft[COLOR_array__Array__with_native]))(var37, var39, var38) /* with_native on <var37:Array[Object]>*/;
7817 }
7818 var40 = ((val* (*)(val*))(var37->class->vft[COLOR_string__Object__to_s]))(var37) /* to_s on <var37:Array[Object]>*/;
7819 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var40) /* add on <self:GlobalCompilerVisitor>*/;
7820 if (varonce41) {
7821 var42 = varonce41;
7822 } else {
7823 var43 = "switch(";
7824 var44 = 7;
7825 var45 = string__NativeString__to_s_with_length(var43, var44);
7826 var42 = var45;
7827 varonce41 = var42;
7828 }
7829 if (varonce46) {
7830 var47 = varonce46;
7831 } else {
7832 var48 = "->classid) {";
7833 var49 = 12;
7834 var50 = string__NativeString__to_s_with_length(var48, var49);
7835 var47 = var50;
7836 varonce46 = var47;
7837 }
7838 var51 = NEW_array__Array(&type_array__Arraykernel__Object);
7839 { /* var51 = array_instance Array[Object] */
7840 var52 = 3;
7841 var53 = NEW_array__NativeArray(var52, &type_array__NativeArraykernel__Object);
7842 ((struct instance_array__NativeArray*)var53)->values[0] = (val*) var42;
7843 ((struct instance_array__NativeArray*)var53)->values[1] = (val*) var_recv;
7844 ((struct instance_array__NativeArray*)var53)->values[2] = (val*) var47;
7845 ((void (*)(val*, val*, long))(var51->class->vft[COLOR_array__Array__with_native]))(var51, var53, var52) /* with_native on <var51:Array[Object]>*/;
7846 }
7847 var54 = ((val* (*)(val*))(var51->class->vft[COLOR_string__Object__to_s]))(var51) /* to_s on <var51:Array[Object]>*/;
7848 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var54) /* add on <self:GlobalCompilerVisitor>*/;
7849 var55 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
7850 var_last = var55;
7851 var56 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
7852 for(;;) {
7853 var57 = ((short int (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var56) /* is_ok on <var56:Iterator[nullable Object]>*/;
7854 if(!var57) break;
7855 var58 = ((val* (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__item]))(var56) /* item on <var56:Iterator[nullable Object]>*/;
7856 var_t = var58;
7857 var60 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7858 var61 = ((short int (*)(val*))(var60->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var60) /* hardening on <var60:AbstractCompiler(GlobalCompiler)>*/;
7859 var62 = !var61;
7860 var_ = var62;
7861 if (var62){
7862 var63 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
7863 var59 = var63;
7864 } else {
7865 var59 = var_;
7866 }
7867 if (var59){
7868 if (varonce64) {
7869 var65 = varonce64;
7870 } else {
7871 var66 = "default: /*";
7872 var67 = 11;
7873 var68 = string__NativeString__to_s_with_length(var66, var67);
7874 var65 = var68;
7875 varonce64 = var65;
7876 }
7877 var69 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7878 var70 = ((val* (*)(val*, val*))(var69->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var69, var_t) /* classid on <var69:AbstractCompiler(GlobalCompiler)>*/;
7879 if (varonce71) {
7880 var72 = varonce71;
7881 } else {
7882 var73 = "*/";
7883 var74 = 2;
7884 var75 = string__NativeString__to_s_with_length(var73, var74);
7885 var72 = var75;
7886 varonce71 = var72;
7887 }
7888 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
7889 { /* var76 = array_instance Array[Object] */
7890 var77 = 3;
7891 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
7892 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var65;
7893 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var70;
7894 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var72;
7895 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
7896 }
7897 var79 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
7898 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var79) /* add on <self:GlobalCompilerVisitor>*/;
7899 } else {
7900 if (varonce80) {
7901 var81 = varonce80;
7902 } else {
7903 var82 = "case ";
7904 var83 = 5;
7905 var84 = string__NativeString__to_s_with_length(var82, var83);
7906 var81 = var84;
7907 varonce80 = var81;
7908 }
7909 var85 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7910 var86 = ((val* (*)(val*, val*))(var85->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var85, var_t) /* classid on <var85:AbstractCompiler(GlobalCompiler)>*/;
7911 if (varonce87) {
7912 var88 = varonce87;
7913 } else {
7914 var89 = ":";
7915 var90 = 1;
7916 var91 = string__NativeString__to_s_with_length(var89, var90);
7917 var88 = var91;
7918 varonce87 = var88;
7919 }
7920 var92 = NEW_array__Array(&type_array__Arraykernel__Object);
7921 { /* var92 = array_instance Array[Object] */
7922 var93 = 3;
7923 var94 = NEW_array__NativeArray(var93, &type_array__NativeArraykernel__Object);
7924 ((struct instance_array__NativeArray*)var94)->values[0] = (val*) var81;
7925 ((struct instance_array__NativeArray*)var94)->values[1] = (val*) var86;
7926 ((struct instance_array__NativeArray*)var94)->values[2] = (val*) var88;
7927 ((void (*)(val*, val*, long))(var92->class->vft[COLOR_array__Array__with_native]))(var92, var94, var93) /* with_native on <var92:Array[Object]>*/;
7928 }
7929 var95 = ((val* (*)(val*))(var92->class->vft[COLOR_string__Object__to_s]))(var92) /* to_s on <var92:Array[Object]>*/;
7930 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var95) /* add on <self:GlobalCompilerVisitor>*/;
7931 }
7932 var96 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
7933 var_recv2 = var96;
7934 var97 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7935 var98 = ((val* (*)(val*))(var97->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var97) /* static_mtype on <var97:MPropDef(MAttributeDef)>*/;
7936 if (var98 == NULL) {
7937 fprintf(stderr, "Runtime error: %s", "Cast failed");
7938 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 676);
7939 show_backtrace(1);
7940 }
7941 var_ta = var98;
7942 var99 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7943 var_ta = var99;
7944 if (varonce100) {
7945 var101 = varonce100;
7946 } else {
7947 var102 = "((struct ";
7948 var103 = 9;
7949 var104 = string__NativeString__to_s_with_length(var102, var103);
7950 var101 = var104;
7951 varonce100 = var101;
7952 }
7953 var105 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
7954 if (varonce106) {
7955 var107 = varonce106;
7956 } else {
7957 var108 = "*)";
7958 var109 = 2;
7959 var110 = string__NativeString__to_s_with_length(var108, var109);
7960 var107 = var110;
7961 varonce106 = var107;
7962 }
7963 if (varonce111) {
7964 var112 = varonce111;
7965 } else {
7966 var113 = ")->";
7967 var114 = 3;
7968 var115 = string__NativeString__to_s_with_length(var113, var114);
7969 var112 = var115;
7970 varonce111 = var112;
7971 }
7972 var116 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7973 var117 = ((val* (*)(val*))(var116->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var116) /* c_name on <var116:MPropDef(MAttributeDef)>*/;
7974 if (varonce118) {
7975 var119 = varonce118;
7976 } else {
7977 var120 = " = ";
7978 var121 = 3;
7979 var122 = string__NativeString__to_s_with_length(var120, var121);
7980 var119 = var122;
7981 varonce118 = var119;
7982 }
7983 var123 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var_value, var_ta) /* autobox on <self:GlobalCompilerVisitor>*/;
7984 if (varonce124) {
7985 var125 = varonce124;
7986 } else {
7987 var126 = ";";
7988 var127 = 1;
7989 var128 = string__NativeString__to_s_with_length(var126, var127);
7990 var125 = var128;
7991 varonce124 = var125;
7992 }
7993 var129 = NEW_array__Array(&type_array__Arraykernel__Object);
7994 { /* var129 = array_instance Array[Object] */
7995 var130 = 9;
7996 var131 = NEW_array__NativeArray(var130, &type_array__NativeArraykernel__Object);
7997 ((struct instance_array__NativeArray*)var131)->values[0] = (val*) var101;
7998 ((struct instance_array__NativeArray*)var131)->values[1] = (val*) var105;
7999 ((struct instance_array__NativeArray*)var131)->values[2] = (val*) var107;
8000 ((struct instance_array__NativeArray*)var131)->values[3] = (val*) var_recv;
8001 ((struct instance_array__NativeArray*)var131)->values[4] = (val*) var112;
8002 ((struct instance_array__NativeArray*)var131)->values[5] = (val*) var117;
8003 ((struct instance_array__NativeArray*)var131)->values[6] = (val*) var119;
8004 ((struct instance_array__NativeArray*)var131)->values[7] = (val*) var123;
8005 ((struct instance_array__NativeArray*)var131)->values[8] = (val*) var125;
8006 ((void (*)(val*, val*, long))(var129->class->vft[COLOR_array__Array__with_native]))(var129, var131, var130) /* with_native on <var129:Array[Object]>*/;
8007 }
8008 var132 = ((val* (*)(val*))(var129->class->vft[COLOR_string__Object__to_s]))(var129) /* to_s on <var129:Array[Object]>*/;
8009 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var132) /* add on <self:GlobalCompilerVisitor>*/;
8010 if (varonce133) {
8011 var134 = varonce133;
8012 } else {
8013 var135 = "break;";
8014 var136 = 6;
8015 var137 = string__NativeString__to_s_with_length(var135, var136);
8016 var134 = var137;
8017 varonce133 = var134;
8018 }
8019 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
8020 CONTINUE_label: (void)0;
8021 ((void (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__next]))(var56) /* next on <var56:Iterator[nullable Object]>*/;
8022 }
8023 BREAK_label: (void)0;
8024 var138 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8025 var139 = ((short int (*)(val*))(var138->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var138) /* hardening on <var138:AbstractCompiler(GlobalCompiler)>*/;
8026 if (var139){
8027 if (varonce140) {
8028 var141 = varonce140;
8029 } else {
8030 var142 = "default: /* Bug*/";
8031 var143 = 17;
8032 var144 = string__NativeString__to_s_with_length(var142, var143);
8033 var141 = var144;
8034 varonce140 = var141;
8035 }
8036 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var141) /* add on <self:GlobalCompilerVisitor>*/;
8037 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
8038 } else {
8039 }
8040 if (varonce145) {
8041 var146 = varonce145;
8042 } else {
8043 var147 = "}";
8044 var148 = 1;
8045 var149 = string__NativeString__to_s_with_length(var147, var148);
8046 var146 = var149;
8047 varonce145 = var146;
8048 }
8049 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var146) /* add on <self:GlobalCompilerVisitor>*/;
8050 RET_LABEL:;
8051 }
8052 /* method global_compiler#GlobalCompilerVisitor#write_attribute for (self: Object, MAttribute, RuntimeVariable, RuntimeVariable) */
8053 void VIRTUAL_global_compiler__GlobalCompilerVisitor__write_attribute(val* self, val* p0, val* p1, val* p2) {
8054 global_compiler__GlobalCompilerVisitor__write_attribute(self, p0, p1, p2);
8055 RET_LABEL:;
8056 }
8057 /* method global_compiler#GlobalCompilerVisitor#init_instance for (self: GlobalCompilerVisitor, MClassType): RuntimeVariable */
8058 val* global_compiler__GlobalCompilerVisitor__init_instance(val* self, val* p0) {
8059 val* var /* : RuntimeVariable */;
8060 val* var_mtype /* var mtype: MClassType */;
8061 val* var1 /* : MType */;
8062 short int var2 /* : Bool */;
8063 int cltype;
8064 int idtype;
8065 const char* var_class_name;
8066 val* var3 /* : AbstractCompiler */;
8067 val* var4 /* : RapidTypeAnalysis */;
8068 val* var5 /* : HashSet[MClassType] */;
8069 short int var6 /* : Bool */;
8070 short int var7 /* : Bool */;
8071 static val* varonce;
8072 val* var8 /* : String */;
8073 char* var9 /* : NativeString */;
8074 long var10 /* : Int */;
8075 val* var11 /* : String */;
8076 static val* varonce12;
8077 val* var13 /* : String */;
8078 char* var14 /* : NativeString */;
8079 long var15 /* : Int */;
8080 val* var16 /* : String */;
8081 val* var17 /* : Array[Object] */;
8082 long var18 /* : Int */;
8083 val* var19 /* : NativeArray[Object] */;
8084 val* var20 /* : String */;
8085 static val* varonce21;
8086 val* var22 /* : String */;
8087 char* var23 /* : NativeString */;
8088 long var24 /* : Int */;
8089 val* var25 /* : String */;
8090 val* var26 /* : String */;
8091 static val* varonce27;
8092 val* var28 /* : String */;
8093 char* var29 /* : NativeString */;
8094 long var30 /* : Int */;
8095 val* var31 /* : String */;
8096 val* var32 /* : Array[Object] */;
8097 long var33 /* : Int */;
8098 val* var34 /* : NativeArray[Object] */;
8099 val* var35 /* : String */;
8100 val* var36 /* : RuntimeVariable */;
8101 val* var_res /* var res: RuntimeVariable */;
8102 short int var37 /* : Bool */;
8103 var_mtype = p0;
8104 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_mtype) /* anchor on <self:GlobalCompilerVisitor>*/;
8105 /* <var1:MType> isa MClassType */
8106 cltype = type_model__MClassType.color;
8107 idtype = type_model__MClassType.id;
8108 if(cltype >= var1->type->table_size) {
8109 var2 = 0;
8110 } else {
8111 var2 = var1->type->type_table[cltype] == idtype;
8112 }
8113 if (!var2) {
8114 var_class_name = var1 == NULL ? "null" : var1->type->name;
8115 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
8116 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 690);
8117 show_backtrace(1);
8118 }
8119 var_mtype = var1;
8120 var3 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8121 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var3) /* runtime_type_analysis on <var3:AbstractCompiler(GlobalCompiler)>*/;
8122 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var4) /* live_types on <var4:RapidTypeAnalysis>*/;
8123 var6 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__Collection__has]))(var5, var_mtype) /* has on <var5:HashSet[MClassType]>*/;
8124 var7 = !var6;
8125 if (var7){
8126 if (varonce) {
8127 var8 = varonce;
8128 } else {
8129 var9 = "problem: ";
8130 var10 = 9;
8131 var11 = string__NativeString__to_s_with_length(var9, var10);
8132 var8 = var11;
8133 varonce = var8;
8134 }
8135 if (varonce12) {
8136 var13 = varonce12;
8137 } else {
8138 var14 = " was detected dead";
8139 var15 = 18;
8140 var16 = string__NativeString__to_s_with_length(var14, var15);
8141 var13 = var16;
8142 varonce12 = var13;
8143 }
8144 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
8145 { /* var17 = array_instance Array[Object] */
8146 var18 = 3;
8147 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
8148 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var8;
8149 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var_mtype;
8150 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var13;
8151 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
8152 }
8153 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
8154 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var20) /* debug on <self:GlobalCompilerVisitor>*/;
8155 } else {
8156 }
8157 if (varonce21) {
8158 var22 = varonce21;
8159 } else {
8160 var23 = "NEW_";
8161 var24 = 4;
8162 var25 = string__NativeString__to_s_with_length(var23, var24);
8163 var22 = var25;
8164 varonce21 = var22;
8165 }
8166 var26 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
8167 if (varonce27) {
8168 var28 = varonce27;
8169 } else {
8170 var29 = "()";
8171 var30 = 2;
8172 var31 = string__NativeString__to_s_with_length(var29, var30);
8173 var28 = var31;
8174 varonce27 = var28;
8175 }
8176 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
8177 { /* var32 = array_instance Array[Object] */
8178 var33 = 3;
8179 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
8180 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var22;
8181 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var26;
8182 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var28;
8183 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
8184 }
8185 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
8186 var36 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var35, var_mtype) /* new_expr on <self:GlobalCompilerVisitor>*/;
8187 var_res = var36;
8188 var37 = 1;
8189 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var37) /* is_exact= on <var_res:RuntimeVariable>*/;
8190 var = var_res;
8191 goto RET_LABEL;
8192 RET_LABEL:;
8193 return var;
8194 }
8195 /* method global_compiler#GlobalCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
8196 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__init_instance(val* self, val* p0) {
8197 val* var /* : RuntimeVariable */;
8198 val* var1 /* : RuntimeVariable */;
8199 var1 = global_compiler__GlobalCompilerVisitor__init_instance(self, p0);
8200 var = var1;
8201 RET_LABEL:;
8202 return var;
8203 }
8204 /* method global_compiler#GlobalCompilerVisitor#type_test for (self: GlobalCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
8205 val* global_compiler__GlobalCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
8206 val* var /* : RuntimeVariable */;
8207 val* var_value /* var value: RuntimeVariable */;
8208 val* var_mtype /* var mtype: MType */;
8209 val* var_tag /* var tag: String */;
8210 val* var1 /* : MType */;
8211 val* var_mclasstype /* var mclasstype: MType */;
8212 short int var2 /* : Bool */;
8213 int cltype;
8214 int idtype;
8215 val* var3 /* : MType */;
8216 short int var4 /* : Bool */;
8217 int cltype5;
8218 int idtype6;
8219 val* var7 /* : AbstractCompiler */;
8220 val* var8 /* : RapidTypeAnalysis */;
8221 val* var9 /* : HashSet[MClassType] */;
8222 short int var10 /* : Bool */;
8223 short int var11 /* : Bool */;
8224 static val* varonce;
8225 val* var12 /* : String */;
8226 char* var13 /* : NativeString */;
8227 long var14 /* : Int */;
8228 val* var15 /* : String */;
8229 static val* varonce16;
8230 val* var17 /* : String */;
8231 char* var18 /* : NativeString */;
8232 long var19 /* : Int */;
8233 val* var20 /* : String */;
8234 val* var21 /* : Array[Object] */;
8235 long var22 /* : Int */;
8236 val* var23 /* : NativeArray[Object] */;
8237 val* var24 /* : String */;
8238 val* var25 /* : Array[MClassType] */;
8239 val* var_types /* var types: Array[MClassType] */;
8240 val* var26 /* : MClassType */;
8241 val* var27 /* : RuntimeVariable */;
8242 val* var_res /* var res: RuntimeVariable */;
8243 static val* varonce28;
8244 val* var29 /* : String */;
8245 char* var30 /* : NativeString */;
8246 long var31 /* : Int */;
8247 val* var32 /* : String */;
8248 static val* varonce33;
8249 val* var34 /* : String */;
8250 char* var35 /* : NativeString */;
8251 long var36 /* : Int */;
8252 val* var37 /* : String */;
8253 val* var38 /* : String */;
8254 static val* varonce39;
8255 val* var40 /* : String */;
8256 char* var41 /* : NativeString */;
8257 long var42 /* : Int */;
8258 val* var43 /* : String */;
8259 val* var44 /* : Array[Object] */;
8260 long var45 /* : Int */;
8261 val* var46 /* : NativeArray[Object] */;
8262 val* var47 /* : String */;
8263 val* var48 /* : MType */;
8264 val* var49 /* : String */;
8265 static val* varonce50;
8266 val* var51 /* : String */;
8267 char* var52 /* : NativeString */;
8268 long var53 /* : Int */;
8269 val* var54 /* : String */;
8270 short int var55 /* : Bool */;
8271 val* var56 /* : MType */;
8272 val* var57 /* : AbstractCompiler */;
8273 val* var58 /* : MModule */;
8274 val* var59 /* : null */;
8275 short int var60 /* : Bool */;
8276 static val* varonce61;
8277 val* var62 /* : String */;
8278 char* var63 /* : NativeString */;
8279 long var64 /* : Int */;
8280 val* var65 /* : String */;
8281 val* var66 /* : Array[Object] */;
8282 long var67 /* : Int */;
8283 val* var68 /* : NativeArray[Object] */;
8284 val* var69 /* : String */;
8285 static val* varonce70;
8286 val* var71 /* : String */;
8287 char* var72 /* : NativeString */;
8288 long var73 /* : Int */;
8289 val* var74 /* : String */;
8290 val* var75 /* : Array[Object] */;
8291 long var76 /* : Int */;
8292 val* var77 /* : NativeArray[Object] */;
8293 val* var78 /* : String */;
8294 short int var79 /* : Bool */;
8295 val* var80 /* : MType */;
8296 short int var81 /* : Bool */;
8297 int cltype82;
8298 int idtype83;
8299 short int var_ /* var : Bool */;
8300 val* var84 /* : MType */;
8301 short int var85 /* : Bool */;
8302 int cltype86;
8303 int idtype87;
8304 static val* varonce88;
8305 val* var89 /* : String */;
8306 char* var90 /* : NativeString */;
8307 long var91 /* : Int */;
8308 val* var92 /* : String */;
8309 static val* varonce93;
8310 val* var94 /* : String */;
8311 char* var95 /* : NativeString */;
8312 long var96 /* : Int */;
8313 val* var97 /* : String */;
8314 val* var98 /* : Array[Object] */;
8315 long var99 /* : Int */;
8316 val* var100 /* : NativeArray[Object] */;
8317 val* var101 /* : String */;
8318 short int var102 /* : Bool */;
8319 int cltype103;
8320 int idtype104;
8321 static val* varonce105;
8322 val* var106 /* : String */;
8323 char* var107 /* : NativeString */;
8324 long var108 /* : Int */;
8325 val* var109 /* : String */;
8326 static val* varonce110;
8327 val* var111 /* : String */;
8328 char* var112 /* : NativeString */;
8329 long var113 /* : Int */;
8330 val* var114 /* : String */;
8331 val* var115 /* : Array[Object] */;
8332 long var116 /* : Int */;
8333 val* var117 /* : NativeArray[Object] */;
8334 val* var118 /* : String */;
8335 static val* varonce119;
8336 val* var120 /* : String */;
8337 char* var121 /* : NativeString */;
8338 long var122 /* : Int */;
8339 val* var123 /* : String */;
8340 static val* varonce124;
8341 val* var125 /* : String */;
8342 char* var126 /* : NativeString */;
8343 long var127 /* : Int */;
8344 val* var128 /* : String */;
8345 val* var129 /* : Array[Object] */;
8346 long var130 /* : Int */;
8347 val* var131 /* : NativeArray[Object] */;
8348 val* var132 /* : String */;
8349 static val* varonce133;
8350 val* var134 /* : String */;
8351 char* var135 /* : NativeString */;
8352 long var136 /* : Int */;
8353 val* var137 /* : String */;
8354 static val* varonce138;
8355 val* var139 /* : String */;
8356 char* var140 /* : NativeString */;
8357 long var141 /* : Int */;
8358 val* var142 /* : String */;
8359 static val* varonce143;
8360 val* var144 /* : String */;
8361 char* var145 /* : NativeString */;
8362 long var146 /* : Int */;
8363 val* var147 /* : String */;
8364 val* var148 /* : Array[Object] */;
8365 long var149 /* : Int */;
8366 val* var150 /* : NativeArray[Object] */;
8367 val* var151 /* : String */;
8368 val* var152 /* : Iterator[nullable Object] */;
8369 short int var153 /* : Bool */;
8370 val* var154 /* : nullable Object */;
8371 val* var_t /* var t: MClassType */;
8372 val* var155 /* : AbstractCompiler */;
8373 val* var156 /* : MModule */;
8374 val* var157 /* : null */;
8375 short int var158 /* : Bool */;
8376 static val* varonce159;
8377 val* var160 /* : String */;
8378 char* var161 /* : NativeString */;
8379 long var162 /* : Int */;
8380 val* var163 /* : String */;
8381 val* var164 /* : AbstractCompiler */;
8382 val* var165 /* : String */;
8383 static val* varonce166;
8384 val* var167 /* : String */;
8385 char* var168 /* : NativeString */;
8386 long var169 /* : Int */;
8387 val* var170 /* : String */;
8388 static val* varonce171;
8389 val* var172 /* : String */;
8390 char* var173 /* : NativeString */;
8391 long var174 /* : Int */;
8392 val* var175 /* : String */;
8393 val* var176 /* : Array[Object] */;
8394 long var177 /* : Int */;
8395 val* var178 /* : NativeArray[Object] */;
8396 val* var179 /* : String */;
8397 static val* varonce180;
8398 val* var181 /* : String */;
8399 char* var182 /* : NativeString */;
8400 long var183 /* : Int */;
8401 val* var184 /* : String */;
8402 val* var185 /* : Array[Object] */;
8403 long var186 /* : Int */;
8404 val* var187 /* : NativeArray[Object] */;
8405 val* var188 /* : String */;
8406 static val* varonce189;
8407 val* var190 /* : String */;
8408 char* var191 /* : NativeString */;
8409 long var192 /* : Int */;
8410 val* var193 /* : String */;
8411 static val* varonce194;
8412 val* var195 /* : String */;
8413 char* var196 /* : NativeString */;
8414 long var197 /* : Int */;
8415 val* var198 /* : String */;
8416 static val* varonce199;
8417 val* var200 /* : String */;
8418 char* var201 /* : NativeString */;
8419 long var202 /* : Int */;
8420 val* var203 /* : String */;
8421 val* var204 /* : Array[Object] */;
8422 long var205 /* : Int */;
8423 val* var206 /* : NativeArray[Object] */;
8424 val* var207 /* : String */;
8425 static val* varonce208;
8426 val* var209 /* : String */;
8427 char* var210 /* : NativeString */;
8428 long var211 /* : Int */;
8429 val* var212 /* : String */;
8430 var_value = p0;
8431 var_mtype = p1;
8432 var_tag = p2;
8433 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_mtype) /* anchor on <self:GlobalCompilerVisitor>*/;
8434 var_mtype = var1;
8435 var_mclasstype = var_mtype;
8436 /* <var_mtype:MType> isa MNullableType */
8437 cltype = type_model__MNullableType.color;
8438 idtype = type_model__MNullableType.id;
8439 if(cltype >= var_mtype->type->table_size) {
8440 var2 = 0;
8441 } else {
8442 var2 = var_mtype->type->type_table[cltype] == idtype;
8443 }
8444 if (var2){
8445 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
8446 var_mclasstype = var3;
8447 } else {
8448 }
8449 /* <var_mclasstype:MType> isa MClassType */
8450 cltype5 = type_model__MClassType.color;
8451 idtype6 = type_model__MClassType.id;
8452 if(cltype5 >= var_mclasstype->type->table_size) {
8453 var4 = 0;
8454 } else {
8455 var4 = var_mclasstype->type->type_table[cltype5] == idtype6;
8456 }
8457 if (!var4) {
8458 fprintf(stderr, "Runtime error: %s", "Assert failed");
8459 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 704);
8460 show_backtrace(1);
8461 }
8462 var7 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8463 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var7) /* runtime_type_analysis on <var7:AbstractCompiler(GlobalCompiler)>*/;
8464 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_cast_types]))(var8) /* live_cast_types on <var8:RapidTypeAnalysis>*/;
8465 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__Collection__has]))(var9, var_mclasstype) /* has on <var9:HashSet[MClassType]>*/;
8466 var11 = !var10;
8467 if (var11){
8468 if (varonce) {
8469 var12 = varonce;
8470 } else {
8471 var13 = "problem: ";
8472 var14 = 9;
8473 var15 = string__NativeString__to_s_with_length(var13, var14);
8474 var12 = var15;
8475 varonce = var12;
8476 }
8477 if (varonce16) {
8478 var17 = varonce16;
8479 } else {
8480 var18 = " was detected cast-dead";
8481 var19 = 23;
8482 var20 = string__NativeString__to_s_with_length(var18, var19);
8483 var17 = var20;
8484 varonce16 = var17;
8485 }
8486 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
8487 { /* var21 = array_instance Array[Object] */
8488 var22 = 3;
8489 var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
8490 ((struct instance_array__NativeArray*)var23)->values[0] = (val*) var12;
8491 ((struct instance_array__NativeArray*)var23)->values[1] = (val*) var_mtype;
8492 ((struct instance_array__NativeArray*)var23)->values[2] = (val*) var17;
8493 ((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
8494 }
8495 var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
8496 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var24) /* debug on <self:GlobalCompilerVisitor>*/;
8497 fprintf(stderr, "Runtime error: %s", "Aborted");
8498 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 707);
8499 show_backtrace(1);
8500 } else {
8501 }
8502 var25 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_value) /* collect_types on <self:GlobalCompilerVisitor>*/;
8503 var_types = var25;
8504 var26 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
8505 var27 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var26) /* new_var on <self:GlobalCompilerVisitor>*/;
8506 var_res = var27;
8507 if (varonce28) {
8508 var29 = varonce28;
8509 } else {
8510 var30 = "/* isa ";
8511 var31 = 7;
8512 var32 = string__NativeString__to_s_with_length(var30, var31);
8513 var29 = var32;
8514 varonce28 = var29;
8515 }
8516 if (varonce33) {
8517 var34 = varonce33;
8518 } else {
8519 var35 = " on ";
8520 var36 = 4;
8521 var37 = string__NativeString__to_s_with_length(var35, var36);
8522 var34 = var37;
8523 varonce33 = var34;
8524 }
8525 var38 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
8526 if (varonce39) {
8527 var40 = varonce39;
8528 } else {
8529 var41 = " */";
8530 var42 = 3;
8531 var43 = string__NativeString__to_s_with_length(var41, var42);
8532 var40 = var43;
8533 varonce39 = var40;
8534 }
8535 var44 = NEW_array__Array(&type_array__Arraykernel__Object);
8536 { /* var44 = array_instance Array[Object] */
8537 var45 = 5;
8538 var46 = NEW_array__NativeArray(var45, &type_array__NativeArraykernel__Object);
8539 ((struct instance_array__NativeArray*)var46)->values[0] = (val*) var29;
8540 ((struct instance_array__NativeArray*)var46)->values[1] = (val*) var_mtype;
8541 ((struct instance_array__NativeArray*)var46)->values[2] = (val*) var34;
8542 ((struct instance_array__NativeArray*)var46)->values[3] = (val*) var38;
8543 ((struct instance_array__NativeArray*)var46)->values[4] = (val*) var40;
8544 ((void (*)(val*, val*, long))(var44->class->vft[COLOR_array__Array__with_native]))(var44, var46, var45) /* with_native on <var44:Array[Object]>*/;
8545 }
8546 var47 = ((val* (*)(val*))(var44->class->vft[COLOR_string__Object__to_s]))(var44) /* to_s on <var44:Array[Object]>*/;
8547 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var47) /* add on <self:GlobalCompilerVisitor>*/;
8548 var48 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
8549 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_abstract_compiler__MType__ctype]))(var48) /* ctype on <var48:MType>*/;
8550 if (varonce50) {
8551 var51 = varonce50;
8552 } else {
8553 var52 = "val*";
8554 var53 = 4;
8555 var54 = string__NativeString__to_s_with_length(var52, var53);
8556 var51 = var54;
8557 varonce50 = var51;
8558 }
8559 var55 = ((short int (*)(val*, val*))(var49->class->vft[COLOR_kernel__Object___33d_61d]))(var49, var51) /* != on <var49:String>*/;
8560 if (var55){
8561 var56 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
8562 var57 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8563 var58 = ((val* (*)(val*))(var57->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var57) /* mainmodule on <var57:AbstractCompiler(GlobalCompiler)>*/;
8564 var59 = NULL;
8565 var60 = ((short int (*)(val*, val*, val*, val*))(var56->class->vft[COLOR_model__MType__is_subtype]))(var56, var58, var59, var_mtype) /* is_subtype on <var56:MType>*/;
8566 if (var60){
8567 if (varonce61) {
8568 var62 = varonce61;
8569 } else {
8570 var63 = " = 1;";
8571 var64 = 5;
8572 var65 = string__NativeString__to_s_with_length(var63, var64);
8573 var62 = var65;
8574 varonce61 = var62;
8575 }
8576 var66 = NEW_array__Array(&type_array__Arraykernel__Object);
8577 { /* var66 = array_instance Array[Object] */
8578 var67 = 2;
8579 var68 = NEW_array__NativeArray(var67, &type_array__NativeArraykernel__Object);
8580 ((struct instance_array__NativeArray*)var68)->values[0] = (val*) var_res;
8581 ((struct instance_array__NativeArray*)var68)->values[1] = (val*) var62;
8582 ((void (*)(val*, val*, long))(var66->class->vft[COLOR_array__Array__with_native]))(var66, var68, var67) /* with_native on <var66:Array[Object]>*/;
8583 }
8584 var69 = ((val* (*)(val*))(var66->class->vft[COLOR_string__Object__to_s]))(var66) /* to_s on <var66:Array[Object]>*/;
8585 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var69) /* add on <self:GlobalCompilerVisitor>*/;
8586 } else {
8587 if (varonce70) {
8588 var71 = varonce70;
8589 } else {
8590 var72 = " = 0;";
8591 var73 = 5;
8592 var74 = string__NativeString__to_s_with_length(var72, var73);
8593 var71 = var74;
8594 varonce70 = var71;
8595 }
8596 var75 = NEW_array__Array(&type_array__Arraykernel__Object);
8597 { /* var75 = array_instance Array[Object] */
8598 var76 = 2;
8599 var77 = NEW_array__NativeArray(var76, &type_array__NativeArraykernel__Object);
8600 ((struct instance_array__NativeArray*)var77)->values[0] = (val*) var_res;
8601 ((struct instance_array__NativeArray*)var77)->values[1] = (val*) var71;
8602 ((void (*)(val*, val*, long))(var75->class->vft[COLOR_array__Array__with_native]))(var75, var77, var76) /* with_native on <var75:Array[Object]>*/;
8603 }
8604 var78 = ((val* (*)(val*))(var75->class->vft[COLOR_string__Object__to_s]))(var75) /* to_s on <var75:Array[Object]>*/;
8605 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var78) /* add on <self:GlobalCompilerVisitor>*/;
8606 }
8607 var = var_res;
8608 goto RET_LABEL;
8609 } else {
8610 }
8611 var80 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
8612 /* <var80:MType> isa MNullableType */
8613 cltype82 = type_model__MNullableType.color;
8614 idtype83 = type_model__MNullableType.id;
8615 if(cltype82 >= var80->type->table_size) {
8616 var81 = 0;
8617 } else {
8618 var81 = var80->type->type_table[cltype82] == idtype83;
8619 }
8620 var_ = var81;
8621 if (var81){
8622 var79 = var_;
8623 } else {
8624 var84 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
8625 /* <var84:MType> isa MNullType */
8626 cltype86 = type_model__MNullType.color;
8627 idtype87 = type_model__MNullType.id;
8628 if(cltype86 >= var84->type->table_size) {
8629 var85 = 0;
8630 } else {
8631 var85 = var84->type->type_table[cltype86] == idtype87;
8632 }
8633 var79 = var85;
8634 }
8635 if (var79){
8636 if (varonce88) {
8637 var89 = varonce88;
8638 } else {
8639 var90 = "if (";
8640 var91 = 4;
8641 var92 = string__NativeString__to_s_with_length(var90, var91);
8642 var89 = var92;
8643 varonce88 = var89;
8644 }
8645 if (varonce93) {
8646 var94 = varonce93;
8647 } else {
8648 var95 = " == NULL) {";
8649 var96 = 11;
8650 var97 = string__NativeString__to_s_with_length(var95, var96);
8651 var94 = var97;
8652 varonce93 = var94;
8653 }
8654 var98 = NEW_array__Array(&type_array__Arraykernel__Object);
8655 { /* var98 = array_instance Array[Object] */
8656 var99 = 3;
8657 var100 = NEW_array__NativeArray(var99, &type_array__NativeArraykernel__Object);
8658 ((struct instance_array__NativeArray*)var100)->values[0] = (val*) var89;
8659 ((struct instance_array__NativeArray*)var100)->values[1] = (val*) var_value;
8660 ((struct instance_array__NativeArray*)var100)->values[2] = (val*) var94;
8661 ((void (*)(val*, val*, long))(var98->class->vft[COLOR_array__Array__with_native]))(var98, var100, var99) /* with_native on <var98:Array[Object]>*/;
8662 }
8663 var101 = ((val* (*)(val*))(var98->class->vft[COLOR_string__Object__to_s]))(var98) /* to_s on <var98:Array[Object]>*/;
8664 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var101) /* add on <self:GlobalCompilerVisitor>*/;
8665 /* <var_mtype:MType> isa MNullableType */
8666 cltype103 = type_model__MNullableType.color;
8667 idtype104 = type_model__MNullableType.id;
8668 if(cltype103 >= var_mtype->type->table_size) {
8669 var102 = 0;
8670 } else {
8671 var102 = var_mtype->type->type_table[cltype103] == idtype104;
8672 }
8673 if (var102){
8674 if (varonce105) {
8675 var106 = varonce105;
8676 } else {
8677 var107 = " = 1; /* isa ";
8678 var108 = 13;
8679 var109 = string__NativeString__to_s_with_length(var107, var108);
8680 var106 = var109;
8681 varonce105 = var106;
8682 }
8683 if (varonce110) {
8684 var111 = varonce110;
8685 } else {
8686 var112 = " */";
8687 var113 = 3;
8688 var114 = string__NativeString__to_s_with_length(var112, var113);
8689 var111 = var114;
8690 varonce110 = var111;
8691 }
8692 var115 = NEW_array__Array(&type_array__Arraykernel__Object);
8693 { /* var115 = array_instance Array[Object] */
8694 var116 = 4;
8695 var117 = NEW_array__NativeArray(var116, &type_array__NativeArraykernel__Object);
8696 ((struct instance_array__NativeArray*)var117)->values[0] = (val*) var_res;
8697 ((struct instance_array__NativeArray*)var117)->values[1] = (val*) var106;
8698 ((struct instance_array__NativeArray*)var117)->values[2] = (val*) var_mtype;
8699 ((struct instance_array__NativeArray*)var117)->values[3] = (val*) var111;
8700 ((void (*)(val*, val*, long))(var115->class->vft[COLOR_array__Array__with_native]))(var115, var117, var116) /* with_native on <var115:Array[Object]>*/;
8701 }
8702 var118 = ((val* (*)(val*))(var115->class->vft[COLOR_string__Object__to_s]))(var115) /* to_s on <var115:Array[Object]>*/;
8703 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var118) /* add on <self:GlobalCompilerVisitor>*/;
8704 } else {
8705 if (varonce119) {
8706 var120 = varonce119;
8707 } else {
8708 var121 = " = 0; /* not isa ";
8709 var122 = 17;
8710 var123 = string__NativeString__to_s_with_length(var121, var122);
8711 var120 = var123;
8712 varonce119 = var120;
8713 }
8714 if (varonce124) {
8715 var125 = varonce124;
8716 } else {
8717 var126 = " */";
8718 var127 = 3;
8719 var128 = string__NativeString__to_s_with_length(var126, var127);
8720 var125 = var128;
8721 varonce124 = var125;
8722 }
8723 var129 = NEW_array__Array(&type_array__Arraykernel__Object);
8724 { /* var129 = array_instance Array[Object] */
8725 var130 = 4;
8726 var131 = NEW_array__NativeArray(var130, &type_array__NativeArraykernel__Object);
8727 ((struct instance_array__NativeArray*)var131)->values[0] = (val*) var_res;
8728 ((struct instance_array__NativeArray*)var131)->values[1] = (val*) var120;
8729 ((struct instance_array__NativeArray*)var131)->values[2] = (val*) var_mtype;
8730 ((struct instance_array__NativeArray*)var131)->values[3] = (val*) var125;
8731 ((void (*)(val*, val*, long))(var129->class->vft[COLOR_array__Array__with_native]))(var129, var131, var130) /* with_native on <var129:Array[Object]>*/;
8732 }
8733 var132 = ((val* (*)(val*))(var129->class->vft[COLOR_string__Object__to_s]))(var129) /* to_s on <var129:Array[Object]>*/;
8734 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var132) /* add on <self:GlobalCompilerVisitor>*/;
8735 }
8736 if (varonce133) {
8737 var134 = varonce133;
8738 } else {
8739 var135 = "} else ";
8740 var136 = 7;
8741 var137 = string__NativeString__to_s_with_length(var135, var136);
8742 var134 = var137;
8743 varonce133 = var134;
8744 }
8745 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
8746 } else {
8747 }
8748 if (varonce138) {
8749 var139 = varonce138;
8750 } else {
8751 var140 = "switch(";
8752 var141 = 7;
8753 var142 = string__NativeString__to_s_with_length(var140, var141);
8754 var139 = var142;
8755 varonce138 = var139;
8756 }
8757 if (varonce143) {
8758 var144 = varonce143;
8759 } else {
8760 var145 = "->classid) {";
8761 var146 = 12;
8762 var147 = string__NativeString__to_s_with_length(var145, var146);
8763 var144 = var147;
8764 varonce143 = var144;
8765 }
8766 var148 = NEW_array__Array(&type_array__Arraykernel__Object);
8767 { /* var148 = array_instance Array[Object] */
8768 var149 = 3;
8769 var150 = NEW_array__NativeArray(var149, &type_array__NativeArraykernel__Object);
8770 ((struct instance_array__NativeArray*)var150)->values[0] = (val*) var139;
8771 ((struct instance_array__NativeArray*)var150)->values[1] = (val*) var_value;
8772 ((struct instance_array__NativeArray*)var150)->values[2] = (val*) var144;
8773 ((void (*)(val*, val*, long))(var148->class->vft[COLOR_array__Array__with_native]))(var148, var150, var149) /* with_native on <var148:Array[Object]>*/;
8774 }
8775 var151 = ((val* (*)(val*))(var148->class->vft[COLOR_string__Object__to_s]))(var148) /* to_s on <var148:Array[Object]>*/;
8776 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var151) /* add on <self:GlobalCompilerVisitor>*/;
8777 var152 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
8778 for(;;) {
8779 var153 = ((short int (*)(val*))(var152->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var152) /* is_ok on <var152:Iterator[nullable Object]>*/;
8780 if(!var153) break;
8781 var154 = ((val* (*)(val*))(var152->class->vft[COLOR_abstract_collection__Iterator__item]))(var152) /* item on <var152:Iterator[nullable Object]>*/;
8782 var_t = var154;
8783 var155 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8784 var156 = ((val* (*)(val*))(var155->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var155) /* mainmodule on <var155:AbstractCompiler(GlobalCompiler)>*/;
8785 var157 = NULL;
8786 var158 = ((short int (*)(val*, val*, val*, val*))(var_t->class->vft[COLOR_model__MType__is_subtype]))(var_t, var156, var157, var_mtype) /* is_subtype on <var_t:MClassType>*/;
8787 if (var158){
8788 if (varonce159) {
8789 var160 = varonce159;
8790 } else {
8791 var161 = "case ";
8792 var162 = 5;
8793 var163 = string__NativeString__to_s_with_length(var161, var162);
8794 var160 = var163;
8795 varonce159 = var160;
8796 }
8797 var164 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8798 var165 = ((val* (*)(val*, val*))(var164->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var164, var_t) /* classid on <var164:AbstractCompiler(GlobalCompiler)>*/;
8799 if (varonce166) {
8800 var167 = varonce166;
8801 } else {
8802 var168 = ": /* ";
8803 var169 = 5;
8804 var170 = string__NativeString__to_s_with_length(var168, var169);
8805 var167 = var170;
8806 varonce166 = var167;
8807 }
8808 if (varonce171) {
8809 var172 = varonce171;
8810 } else {
8811 var173 = " */";
8812 var174 = 3;
8813 var175 = string__NativeString__to_s_with_length(var173, var174);
8814 var172 = var175;
8815 varonce171 = var172;
8816 }
8817 var176 = NEW_array__Array(&type_array__Arraykernel__Object);
8818 { /* var176 = array_instance Array[Object] */
8819 var177 = 5;
8820 var178 = NEW_array__NativeArray(var177, &type_array__NativeArraykernel__Object);
8821 ((struct instance_array__NativeArray*)var178)->values[0] = (val*) var160;
8822 ((struct instance_array__NativeArray*)var178)->values[1] = (val*) var165;
8823 ((struct instance_array__NativeArray*)var178)->values[2] = (val*) var167;
8824 ((struct instance_array__NativeArray*)var178)->values[3] = (val*) var_t;
8825 ((struct instance_array__NativeArray*)var178)->values[4] = (val*) var172;
8826 ((void (*)(val*, val*, long))(var176->class->vft[COLOR_array__Array__with_native]))(var176, var178, var177) /* with_native on <var176:Array[Object]>*/;
8827 }
8828 var179 = ((val* (*)(val*))(var176->class->vft[COLOR_string__Object__to_s]))(var176) /* to_s on <var176:Array[Object]>*/;
8829 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var179) /* add on <self:GlobalCompilerVisitor>*/;
8830 } else {
8831 }
8832 CONTINUE_label: (void)0;
8833 ((void (*)(val*))(var152->class->vft[COLOR_abstract_collection__Iterator__next]))(var152) /* next on <var152:Iterator[nullable Object]>*/;
8834 }
8835 BREAK_label: (void)0;
8836 if (varonce180) {
8837 var181 = varonce180;
8838 } else {
8839 var182 = " = 1;";
8840 var183 = 5;
8841 var184 = string__NativeString__to_s_with_length(var182, var183);
8842 var181 = var184;
8843 varonce180 = var181;
8844 }
8845 var185 = NEW_array__Array(&type_array__Arraykernel__Object);
8846 { /* var185 = array_instance Array[Object] */
8847 var186 = 2;
8848 var187 = NEW_array__NativeArray(var186, &type_array__NativeArraykernel__Object);
8849 ((struct instance_array__NativeArray*)var187)->values[0] = (val*) var_res;
8850 ((struct instance_array__NativeArray*)var187)->values[1] = (val*) var181;
8851 ((void (*)(val*, val*, long))(var185->class->vft[COLOR_array__Array__with_native]))(var185, var187, var186) /* with_native on <var185:Array[Object]>*/;
8852 }
8853 var188 = ((val* (*)(val*))(var185->class->vft[COLOR_string__Object__to_s]))(var185) /* to_s on <var185:Array[Object]>*/;
8854 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
8855 if (varonce189) {
8856 var190 = varonce189;
8857 } else {
8858 var191 = "break;";
8859 var192 = 6;
8860 var193 = string__NativeString__to_s_with_length(var191, var192);
8861 var190 = var193;
8862 varonce189 = var190;
8863 }
8864 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var190) /* add on <self:GlobalCompilerVisitor>*/;
8865 if (varonce194) {
8866 var195 = varonce194;
8867 } else {
8868 var196 = "default:";
8869 var197 = 8;
8870 var198 = string__NativeString__to_s_with_length(var196, var197);
8871 var195 = var198;
8872 varonce194 = var195;
8873 }
8874 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var195) /* add on <self:GlobalCompilerVisitor>*/;
8875 if (varonce199) {
8876 var200 = varonce199;
8877 } else {
8878 var201 = " = 0;";
8879 var202 = 5;
8880 var203 = string__NativeString__to_s_with_length(var201, var202);
8881 var200 = var203;
8882 varonce199 = var200;
8883 }
8884 var204 = NEW_array__Array(&type_array__Arraykernel__Object);
8885 { /* var204 = array_instance Array[Object] */
8886 var205 = 2;
8887 var206 = NEW_array__NativeArray(var205, &type_array__NativeArraykernel__Object);
8888 ((struct instance_array__NativeArray*)var206)->values[0] = (val*) var_res;
8889 ((struct instance_array__NativeArray*)var206)->values[1] = (val*) var200;
8890 ((void (*)(val*, val*, long))(var204->class->vft[COLOR_array__Array__with_native]))(var204, var206, var205) /* with_native on <var204:Array[Object]>*/;
8891 }
8892 var207 = ((val* (*)(val*))(var204->class->vft[COLOR_string__Object__to_s]))(var204) /* to_s on <var204:Array[Object]>*/;
8893 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var207) /* add on <self:GlobalCompilerVisitor>*/;
8894 if (varonce208) {
8895 var209 = varonce208;
8896 } else {
8897 var210 = "}";
8898 var211 = 1;
8899 var212 = string__NativeString__to_s_with_length(var210, var211);
8900 var209 = var212;
8901 varonce208 = var209;
8902 }
8903 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var209) /* add on <self:GlobalCompilerVisitor>*/;
8904 var = var_res;
8905 goto RET_LABEL;
8906 RET_LABEL:;
8907 return var;
8908 }
8909 /* method global_compiler#GlobalCompilerVisitor#type_test for (self: Object, RuntimeVariable, MType, String): RuntimeVariable */
8910 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
8911 val* var /* : RuntimeVariable */;
8912 val* var1 /* : RuntimeVariable */;
8913 var1 = global_compiler__GlobalCompilerVisitor__type_test(self, p0, p1, p2);
8914 var = var1;
8915 RET_LABEL:;
8916 return var;
8917 }
8918 /* method global_compiler#GlobalCompilerVisitor#is_same_type_test for (self: GlobalCompilerVisitor, RuntimeVariable, RuntimeVariable): RuntimeVariable */
8919 val* global_compiler__GlobalCompilerVisitor__is_same_type_test(val* self, val* p0, val* p1) {
8920 val* var /* : RuntimeVariable */;
8921 val* var_value1 /* var value1: RuntimeVariable */;
8922 val* var_value2 /* var value2: RuntimeVariable */;
8923 val* var1 /* : MClassType */;
8924 val* var2 /* : RuntimeVariable */;
8925 val* var_res /* var res: RuntimeVariable */;
8926 val* var3 /* : MType */;
8927 val* var4 /* : String */;
8928 static val* varonce;
8929 val* var5 /* : String */;
8930 char* var6 /* : NativeString */;
8931 long var7 /* : Int */;
8932 val* var8 /* : String */;
8933 short int var9 /* : Bool */;
8934 val* var10 /* : MType */;
8935 val* var11 /* : String */;
8936 static val* varonce12;
8937 val* var13 /* : String */;
8938 char* var14 /* : NativeString */;
8939 long var15 /* : Int */;
8940 val* var16 /* : String */;
8941 short int var17 /* : Bool */;
8942 static val* varonce18;
8943 val* var19 /* : String */;
8944 char* var20 /* : NativeString */;
8945 long var21 /* : Int */;
8946 val* var22 /* : String */;
8947 static val* varonce23;
8948 val* var24 /* : String */;
8949 char* var25 /* : NativeString */;
8950 long var26 /* : Int */;
8951 val* var27 /* : String */;
8952 static val* varonce28;
8953 val* var29 /* : String */;
8954 char* var30 /* : NativeString */;
8955 long var31 /* : Int */;
8956 val* var32 /* : String */;
8957 val* var33 /* : Array[Object] */;
8958 long var34 /* : Int */;
8959 val* var35 /* : NativeArray[Object] */;
8960 val* var36 /* : String */;
8961 static val* varonce37;
8962 val* var38 /* : String */;
8963 char* var39 /* : NativeString */;
8964 long var40 /* : Int */;
8965 val* var41 /* : String */;
8966 val* var42 /* : AbstractCompiler */;
8967 val* var43 /* : MType */;
8968 short int var44 /* : Bool */;
8969 int cltype;
8970 int idtype;
8971 const char* var_class_name;
8972 val* var45 /* : String */;
8973 static val* varonce46;
8974 val* var47 /* : String */;
8975 char* var48 /* : NativeString */;
8976 long var49 /* : Int */;
8977 val* var50 /* : String */;
8978 static val* varonce51;
8979 val* var52 /* : String */;
8980 char* var53 /* : NativeString */;
8981 long var54 /* : Int */;
8982 val* var55 /* : String */;
8983 val* var56 /* : Array[Object] */;
8984 long var57 /* : Int */;
8985 val* var58 /* : NativeArray[Object] */;
8986 val* var59 /* : String */;
8987 val* var60 /* : MType */;
8988 val* var61 /* : String */;
8989 static val* varonce62;
8990 val* var63 /* : String */;
8991 char* var64 /* : NativeString */;
8992 long var65 /* : Int */;
8993 val* var66 /* : String */;
8994 short int var67 /* : Bool */;
8995 static val* varonce68;
8996 val* var69 /* : String */;
8997 char* var70 /* : NativeString */;
8998 long var71 /* : Int */;
8999 val* var72 /* : String */;
9000 static val* varonce73;
9001 val* var74 /* : String */;
9002 char* var75 /* : NativeString */;
9003 long var76 /* : Int */;
9004 val* var77 /* : String */;
9005 val* var78 /* : AbstractCompiler */;
9006 val* var79 /* : MType */;
9007 short int var80 /* : Bool */;
9008 int cltype81;
9009 int idtype82;
9010 const char* var_class_name83;
9011 val* var84 /* : String */;
9012 static val* varonce85;
9013 val* var86 /* : String */;
9014 char* var87 /* : NativeString */;
9015 long var88 /* : Int */;
9016 val* var89 /* : String */;
9017 val* var90 /* : Array[Object] */;
9018 long var91 /* : Int */;
9019 val* var92 /* : NativeArray[Object] */;
9020 val* var93 /* : String */;
9021 val* var94 /* : MType */;
9022 val* var95 /* : MType */;
9023 short int var96 /* : Bool */;
9024 static val* varonce97;
9025 val* var98 /* : String */;
9026 char* var99 /* : NativeString */;
9027 long var100 /* : Int */;
9028 val* var101 /* : String */;
9029 val* var102 /* : Array[Object] */;
9030 long var103 /* : Int */;
9031 val* var104 /* : NativeArray[Object] */;
9032 val* var105 /* : String */;
9033 static val* varonce106;
9034 val* var107 /* : String */;
9035 char* var108 /* : NativeString */;
9036 long var109 /* : Int */;
9037 val* var110 /* : String */;
9038 val* var111 /* : Array[Object] */;
9039 long var112 /* : Int */;
9040 val* var113 /* : NativeArray[Object] */;
9041 val* var114 /* : String */;
9042 var_value1 = p0;
9043 var_value2 = p1;
9044 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
9045 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var1) /* new_var on <self:GlobalCompilerVisitor>*/;
9046 var_res = var2;
9047 var3 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value2) /* mtype on <var_value2:RuntimeVariable>*/;
9048 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_compiler__MType__ctype]))(var3) /* ctype on <var3:MType>*/;
9049 if (varonce) {
9050 var5 = varonce;
9051 } else {
9052 var6 = "val*";
9053 var7 = 4;
9054 var8 = string__NativeString__to_s_with_length(var6, var7);
9055 var5 = var8;
9056 varonce = var5;
9057 }
9058 var9 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_kernel__Object___61d_61d]))(var4, var5) /* == on <var4:String>*/;
9059 if (var9){
9060 var10 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9061 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__MType__ctype]))(var10) /* ctype on <var10:MType>*/;
9062 if (varonce12) {
9063 var13 = varonce12;
9064 } else {
9065 var14 = "val*";
9066 var15 = 4;
9067 var16 = string__NativeString__to_s_with_length(var14, var15);
9068 var13 = var16;
9069 varonce12 = var13;
9070 }
9071 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
9072 if (var17){
9073 if (varonce18) {
9074 var19 = varonce18;
9075 } else {
9076 var20 = " = ";
9077 var21 = 3;
9078 var22 = string__NativeString__to_s_with_length(var20, var21);
9079 var19 = var22;
9080 varonce18 = var19;
9081 }
9082 if (varonce23) {
9083 var24 = varonce23;
9084 } else {
9085 var25 = "->classid == ";
9086 var26 = 13;
9087 var27 = string__NativeString__to_s_with_length(var25, var26);
9088 var24 = var27;
9089 varonce23 = var24;
9090 }
9091 if (varonce28) {
9092 var29 = varonce28;
9093 } else {
9094 var30 = "->classid;";
9095 var31 = 10;
9096 var32 = string__NativeString__to_s_with_length(var30, var31);
9097 var29 = var32;
9098 varonce28 = var29;
9099 }
9100 var33 = NEW_array__Array(&type_array__Arraykernel__Object);
9101 { /* var33 = array_instance Array[Object] */
9102 var34 = 6;
9103 var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
9104 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var_res;
9105 ((struct instance_array__NativeArray*)var35)->values[1] = (val*) var19;
9106 ((struct instance_array__NativeArray*)var35)->values[2] = (val*) var_value1;
9107 ((struct instance_array__NativeArray*)var35)->values[3] = (val*) var24;
9108 ((struct instance_array__NativeArray*)var35)->values[4] = (val*) var_value2;
9109 ((struct instance_array__NativeArray*)var35)->values[5] = (val*) var29;
9110 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
9111 }
9112 var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
9113 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var36) /* add on <self:GlobalCompilerVisitor>*/;
9114 } else {
9115 if (varonce37) {
9116 var38 = varonce37;
9117 } else {
9118 var39 = " = ";
9119 var40 = 3;
9120 var41 = string__NativeString__to_s_with_length(var39, var40);
9121 var38 = var41;
9122 varonce37 = var38;
9123 }
9124 var42 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9125 var43 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9126 /* <var43:MType> isa MClassType */
9127 cltype = type_model__MClassType.color;
9128 idtype = type_model__MClassType.id;
9129 if(cltype >= var43->type->table_size) {
9130 var44 = 0;
9131 } else {
9132 var44 = var43->type->type_table[cltype] == idtype;
9133 }
9134 if (!var44) {
9135 var_class_name = var43 == NULL ? "null" : var43->type->name;
9136 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
9137 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 753);
9138 show_backtrace(1);
9139 }
9140 var45 = ((val* (*)(val*, val*))(var42->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var42, var43) /* classid on <var42:AbstractCompiler(GlobalCompiler)>*/;
9141 if (varonce46) {
9142 var47 = varonce46;
9143 } else {
9144 var48 = " == ";
9145 var49 = 4;
9146 var50 = string__NativeString__to_s_with_length(var48, var49);
9147 var47 = var50;
9148 varonce46 = var47;
9149 }
9150 if (varonce51) {
9151 var52 = varonce51;
9152 } else {
9153 var53 = "->classid;";
9154 var54 = 10;
9155 var55 = string__NativeString__to_s_with_length(var53, var54);
9156 var52 = var55;
9157 varonce51 = var52;
9158 }
9159 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
9160 { /* var56 = array_instance Array[Object] */
9161 var57 = 6;
9162 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
9163 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var_res;
9164 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var38;
9165 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var45;
9166 ((struct instance_array__NativeArray*)var58)->values[3] = (val*) var47;
9167 ((struct instance_array__NativeArray*)var58)->values[4] = (val*) var_value2;
9168 ((struct instance_array__NativeArray*)var58)->values[5] = (val*) var52;
9169 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
9170 }
9171 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
9172 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
9173 }
9174 } else {
9175 var60 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9176 var61 = ((val* (*)(val*))(var60->class->vft[COLOR_abstract_compiler__MType__ctype]))(var60) /* ctype on <var60:MType>*/;
9177 if (varonce62) {
9178 var63 = varonce62;
9179 } else {
9180 var64 = "val*";
9181 var65 = 4;
9182 var66 = string__NativeString__to_s_with_length(var64, var65);
9183 var63 = var66;
9184 varonce62 = var63;
9185 }
9186 var67 = ((short int (*)(val*, val*))(var61->class->vft[COLOR_kernel__Object___61d_61d]))(var61, var63) /* == on <var61:String>*/;
9187 if (var67){
9188 if (varonce68) {
9189 var69 = varonce68;
9190 } else {
9191 var70 = " = ";
9192 var71 = 3;
9193 var72 = string__NativeString__to_s_with_length(var70, var71);
9194 var69 = var72;
9195 varonce68 = var69;
9196 }
9197 if (varonce73) {
9198 var74 = varonce73;
9199 } else {
9200 var75 = "->classid == ";
9201 var76 = 13;
9202 var77 = string__NativeString__to_s_with_length(var75, var76);
9203 var74 = var77;
9204 varonce73 = var74;
9205 }
9206 var78 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9207 var79 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value2) /* mtype on <var_value2:RuntimeVariable>*/;
9208 /* <var79:MType> isa MClassType */
9209 cltype81 = type_model__MClassType.color;
9210 idtype82 = type_model__MClassType.id;
9211 if(cltype81 >= var79->type->table_size) {
9212 var80 = 0;
9213 } else {
9214 var80 = var79->type->type_table[cltype81] == idtype82;
9215 }
9216 if (!var80) {
9217 var_class_name83 = var79 == NULL ? "null" : var79->type->name;
9218 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name83);
9219 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 757);
9220 show_backtrace(1);
9221 }
9222 var84 = ((val* (*)(val*, val*))(var78->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var78, var79) /* classid on <var78:AbstractCompiler(GlobalCompiler)>*/;
9223 if (varonce85) {
9224 var86 = varonce85;
9225 } else {
9226 var87 = ";";
9227 var88 = 1;
9228 var89 = string__NativeString__to_s_with_length(var87, var88);
9229 var86 = var89;
9230 varonce85 = var86;
9231 }
9232 var90 = NEW_array__Array(&type_array__Arraykernel__Object);
9233 { /* var90 = array_instance Array[Object] */
9234 var91 = 6;
9235 var92 = NEW_array__NativeArray(var91, &type_array__NativeArraykernel__Object);
9236 ((struct instance_array__NativeArray*)var92)->values[0] = (val*) var_res;
9237 ((struct instance_array__NativeArray*)var92)->values[1] = (val*) var69;
9238 ((struct instance_array__NativeArray*)var92)->values[2] = (val*) var_value1;
9239 ((struct instance_array__NativeArray*)var92)->values[3] = (val*) var74;
9240 ((struct instance_array__NativeArray*)var92)->values[4] = (val*) var84;
9241 ((struct instance_array__NativeArray*)var92)->values[5] = (val*) var86;
9242 ((void (*)(val*, val*, long))(var90->class->vft[COLOR_array__Array__with_native]))(var90, var92, var91) /* with_native on <var90:Array[Object]>*/;
9243 }
9244 var93 = ((val* (*)(val*))(var90->class->vft[COLOR_string__Object__to_s]))(var90) /* to_s on <var90:Array[Object]>*/;
9245 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var93) /* add on <self:GlobalCompilerVisitor>*/;
9246 } else {
9247 var94 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value1) /* mcasttype on <var_value1:RuntimeVariable>*/;
9248 var95 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value2) /* mcasttype on <var_value2:RuntimeVariable>*/;
9249 var96 = ((short int (*)(val*, val*))(var94->class->vft[COLOR_kernel__Object___61d_61d]))(var94, var95) /* == on <var94:MType>*/;
9250 if (var96){
9251 if (varonce97) {
9252 var98 = varonce97;
9253 } else {
9254 var99 = " = 1;";
9255 var100 = 5;
9256 var101 = string__NativeString__to_s_with_length(var99, var100);
9257 var98 = var101;
9258 varonce97 = var98;
9259 }
9260 var102 = NEW_array__Array(&type_array__Arraykernel__Object);
9261 { /* var102 = array_instance Array[Object] */
9262 var103 = 2;
9263 var104 = NEW_array__NativeArray(var103, &type_array__NativeArraykernel__Object);
9264 ((struct instance_array__NativeArray*)var104)->values[0] = (val*) var_res;
9265 ((struct instance_array__NativeArray*)var104)->values[1] = (val*) var98;
9266 ((void (*)(val*, val*, long))(var102->class->vft[COLOR_array__Array__with_native]))(var102, var104, var103) /* with_native on <var102:Array[Object]>*/;
9267 }
9268 var105 = ((val* (*)(val*))(var102->class->vft[COLOR_string__Object__to_s]))(var102) /* to_s on <var102:Array[Object]>*/;
9269 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var105) /* add on <self:GlobalCompilerVisitor>*/;
9270 } else {
9271 if (varonce106) {
9272 var107 = varonce106;
9273 } else {
9274 var108 = " = 0;";
9275 var109 = 5;
9276 var110 = string__NativeString__to_s_with_length(var108, var109);
9277 var107 = var110;
9278 varonce106 = var107;
9279 }
9280 var111 = NEW_array__Array(&type_array__Arraykernel__Object);
9281 { /* var111 = array_instance Array[Object] */
9282 var112 = 2;
9283 var113 = NEW_array__NativeArray(var112, &type_array__NativeArraykernel__Object);
9284 ((struct instance_array__NativeArray*)var113)->values[0] = (val*) var_res;
9285 ((struct instance_array__NativeArray*)var113)->values[1] = (val*) var107;
9286 ((void (*)(val*, val*, long))(var111->class->vft[COLOR_array__Array__with_native]))(var111, var113, var112) /* with_native on <var111:Array[Object]>*/;
9287 }
9288 var114 = ((val* (*)(val*))(var111->class->vft[COLOR_string__Object__to_s]))(var111) /* to_s on <var111:Array[Object]>*/;
9289 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var114) /* add on <self:GlobalCompilerVisitor>*/;
9290 }
9291 }
9292 }
9293 var = var_res;
9294 goto RET_LABEL;
9295 RET_LABEL:;
9296 return var;
9297 }
9298 /* method global_compiler#GlobalCompilerVisitor#is_same_type_test for (self: Object, RuntimeVariable, RuntimeVariable): RuntimeVariable */
9299 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__is_same_type_test(val* self, val* p0, val* p1) {
9300 val* var /* : RuntimeVariable */;
9301 val* var1 /* : RuntimeVariable */;
9302 var1 = global_compiler__GlobalCompilerVisitor__is_same_type_test(self, p0, p1);
9303 var = var1;
9304 RET_LABEL:;
9305 return var;
9306 }
9307 /* method global_compiler#GlobalCompilerVisitor#class_name_string for (self: GlobalCompilerVisitor, RuntimeVariable): String */
9308 val* global_compiler__GlobalCompilerVisitor__class_name_string(val* self, val* p0) {
9309 val* var /* : String */;
9310 val* var_value /* var value: RuntimeVariable */;
9311 static val* varonce;
9312 val* var1 /* : String */;
9313 char* var2 /* : NativeString */;
9314 long var3 /* : Int */;
9315 val* var4 /* : String */;
9316 val* var5 /* : String */;
9317 val* var_res /* var res: String */;
9318 static val* varonce6;
9319 val* var7 /* : String */;
9320 char* var8 /* : NativeString */;
9321 long var9 /* : Int */;
9322 val* var10 /* : String */;
9323 static val* varonce11;
9324 val* var12 /* : String */;
9325 char* var13 /* : NativeString */;
9326 long var14 /* : Int */;
9327 val* var15 /* : String */;
9328 val* var16 /* : Array[Object] */;
9329 long var17 /* : Int */;
9330 val* var18 /* : NativeArray[Object] */;
9331 val* var19 /* : String */;
9332 val* var20 /* : MType */;
9333 val* var21 /* : String */;
9334 static val* varonce22;
9335 val* var23 /* : String */;
9336 char* var24 /* : NativeString */;
9337 long var25 /* : Int */;
9338 val* var26 /* : String */;
9339 short int var27 /* : Bool */;
9340 static val* varonce28;
9341 val* var29 /* : String */;
9342 char* var30 /* : NativeString */;
9343 long var31 /* : Int */;
9344 val* var32 /* : String */;
9345 static val* varonce33;
9346 val* var34 /* : String */;
9347 char* var35 /* : NativeString */;
9348 long var36 /* : Int */;
9349 val* var37 /* : String */;
9350 val* var38 /* : Array[Object] */;
9351 long var39 /* : Int */;
9352 val* var40 /* : NativeArray[Object] */;
9353 val* var41 /* : String */;
9354 static val* varonce42;
9355 val* var43 /* : String */;
9356 char* var44 /* : NativeString */;
9357 long var45 /* : Int */;
9358 val* var46 /* : String */;
9359 val* var47 /* : AbstractCompiler */;
9360 val* var48 /* : MType */;
9361 short int var49 /* : Bool */;
9362 int cltype;
9363 int idtype;
9364 const char* var_class_name;
9365 val* var50 /* : String */;
9366 static val* varonce51;
9367 val* var52 /* : String */;
9368 char* var53 /* : NativeString */;
9369 long var54 /* : Int */;
9370 val* var55 /* : String */;
9371 val* var56 /* : Array[Object] */;
9372 long var57 /* : Int */;
9373 val* var58 /* : NativeArray[Object] */;
9374 val* var59 /* : String */;
9375 var_value = p0;
9376 if (varonce) {
9377 var1 = varonce;
9378 } else {
9379 var2 = "var_class_name";
9380 var3 = 14;
9381 var4 = string__NativeString__to_s_with_length(var2, var3);
9382 var1 = var4;
9383 varonce = var1;
9384 }
9385 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var1) /* get_name on <self:GlobalCompilerVisitor>*/;
9386 var_res = var5;
9387 if (varonce6) {
9388 var7 = varonce6;
9389 } else {
9390 var8 = "const char* ";
9391 var9 = 12;
9392 var10 = string__NativeString__to_s_with_length(var8, var9);
9393 var7 = var10;
9394 varonce6 = var7;
9395 }
9396 if (varonce11) {
9397 var12 = varonce11;
9398 } else {
9399 var13 = ";";
9400 var14 = 1;
9401 var15 = string__NativeString__to_s_with_length(var13, var14);
9402 var12 = var15;
9403 varonce11 = var12;
9404 }
9405 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
9406 { /* var16 = array_instance Array[Object] */
9407 var17 = 3;
9408 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
9409 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
9410 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_res;
9411 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
9412 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
9413 }
9414 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
9415 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var19) /* add_decl on <self:GlobalCompilerVisitor>*/;
9416 var20 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
9417 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_compiler__MType__ctype]))(var20) /* ctype on <var20:MType>*/;
9418 if (varonce22) {
9419 var23 = varonce22;
9420 } else {
9421 var24 = "val*";
9422 var25 = 4;
9423 var26 = string__NativeString__to_s_with_length(var24, var25);
9424 var23 = var26;
9425 varonce22 = var23;
9426 }
9427 var27 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var23) /* == on <var21:String>*/;
9428 if (var27){
9429 if (varonce28) {
9430 var29 = varonce28;
9431 } else {
9432 var30 = " = class_names[";
9433 var31 = 15;
9434 var32 = string__NativeString__to_s_with_length(var30, var31);
9435 var29 = var32;
9436 varonce28 = var29;
9437 }
9438 if (varonce33) {
9439 var34 = varonce33;
9440 } else {
9441 var35 = "->classid];";
9442 var36 = 11;
9443 var37 = string__NativeString__to_s_with_length(var35, var36);
9444 var34 = var37;
9445 varonce33 = var34;
9446 }
9447 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
9448 { /* var38 = array_instance Array[Object] */
9449 var39 = 4;
9450 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
9451 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var_res;
9452 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var29;
9453 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var_value;
9454 ((struct instance_array__NativeArray*)var40)->values[3] = (val*) var34;
9455 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
9456 }
9457 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
9458 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var41) /* add on <self:GlobalCompilerVisitor>*/;
9459 } else {
9460 if (varonce42) {
9461 var43 = varonce42;
9462 } else {
9463 var44 = " = class_names[";
9464 var45 = 15;
9465 var46 = string__NativeString__to_s_with_length(var44, var45);
9466 var43 = var46;
9467 varonce42 = var43;
9468 }
9469 var47 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9470 var48 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
9471 /* <var48:MType> isa MClassType */
9472 cltype = type_model__MClassType.color;
9473 idtype = type_model__MClassType.id;
9474 if(cltype >= var48->type->table_size) {
9475 var49 = 0;
9476 } else {
9477 var49 = var48->type->type_table[cltype] == idtype;
9478 }
9479 if (!var49) {
9480 var_class_name = var48 == NULL ? "null" : var48->type->name;
9481 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
9482 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 774);
9483 show_backtrace(1);
9484 }
9485 var50 = ((val* (*)(val*, val*))(var47->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var47, var48) /* classid on <var47:AbstractCompiler(GlobalCompiler)>*/;
9486 if (varonce51) {
9487 var52 = varonce51;
9488 } else {
9489 var53 = "];";
9490 var54 = 2;
9491 var55 = string__NativeString__to_s_with_length(var53, var54);
9492 var52 = var55;
9493 varonce51 = var52;
9494 }
9495 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
9496 { /* var56 = array_instance Array[Object] */
9497 var57 = 4;
9498 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
9499 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var_res;
9500 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var43;
9501 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var50;
9502 ((struct instance_array__NativeArray*)var58)->values[3] = (val*) var52;
9503 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
9504 }
9505 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
9506 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
9507 }
9508 var = var_res;
9509 goto RET_LABEL;
9510 RET_LABEL:;
9511 return var;
9512 }
9513 /* method global_compiler#GlobalCompilerVisitor#class_name_string for (self: Object, RuntimeVariable): String */
9514 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__class_name_string(val* self, val* p0) {
9515 val* var /* : String */;
9516 val* var1 /* : String */;
9517 var1 = global_compiler__GlobalCompilerVisitor__class_name_string(self, p0);
9518 var = var1;
9519 RET_LABEL:;
9520 return var;
9521 }