lib/standard/ropes: Concat nodes cannot be constructed without children anymore.
[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", 85);
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", 121);
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", 124);
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", 135);
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", 147);
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", 150);
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", 157);
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", 184);
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", 195);
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", 196);
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", 228);
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", 229);
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#GlobalCompiler#compile_nitni_structs for (self: GlobalCompiler) */
2329 void global_compiler__GlobalCompiler__compile_nitni_structs(val* self) {
2330 val* var /* : CodeWriter */;
2331 static val* varonce;
2332 val* var1 /* : String */;
2333 char* var2 /* : NativeString */;
2334 long var3 /* : Int */;
2335 val* var4 /* : String */;
2336 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
2337 if (varonce) {
2338 var1 = varonce;
2339 } else {
2340 var2 = "struct nitni_instance { val *value; };";
2341 var3 = 38;
2342 var4 = string__NativeString__to_s_with_length(var2, var3);
2343 var1 = var4;
2344 varonce = var1;
2345 }
2346 ((void (*)(val*, val*))(var->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var, var1) /* add_decl on <var:CodeWriter>*/;
2347 RET_LABEL:;
2348 }
2349 /* method global_compiler#GlobalCompiler#compile_nitni_structs for (self: Object) */
2350 void VIRTUAL_global_compiler__GlobalCompiler__compile_nitni_structs(val* self) {
2351 global_compiler__GlobalCompiler__compile_nitni_structs(self);
2352 RET_LABEL:;
2353 }
2354 /* method global_compiler#GlobalCompilerVisitor#autobox for (self: GlobalCompilerVisitor, RuntimeVariable, MType): RuntimeVariable */
2355 val* global_compiler__GlobalCompilerVisitor__autobox(val* self, val* p0, val* p1) {
2356 val* var /* : RuntimeVariable */;
2357 val* var_value /* var value: RuntimeVariable */;
2358 val* var_mtype /* var mtype: MType */;
2359 val* var1 /* : MType */;
2360 short int var2 /* : Bool */;
2361 short int var3 /* : Bool */;
2362 val* var4 /* : MType */;
2363 val* var5 /* : String */;
2364 static val* varonce;
2365 val* var6 /* : String */;
2366 char* var7 /* : NativeString */;
2367 long var8 /* : Int */;
2368 val* var9 /* : String */;
2369 short int var10 /* : Bool */;
2370 short int var_ /* var : Bool */;
2371 val* var11 /* : String */;
2372 static val* varonce12;
2373 val* var13 /* : String */;
2374 char* var14 /* : NativeString */;
2375 long var15 /* : Int */;
2376 val* var16 /* : String */;
2377 short int var17 /* : Bool */;
2378 val* var18 /* : MType */;
2379 val* var19 /* : String */;
2380 static val* varonce20;
2381 val* var21 /* : String */;
2382 char* var22 /* : NativeString */;
2383 long var23 /* : Int */;
2384 val* var24 /* : String */;
2385 short int var25 /* : Bool */;
2386 static val* varonce26;
2387 val* var27 /* : String */;
2388 char* var28 /* : NativeString */;
2389 long var29 /* : Int */;
2390 val* var30 /* : String */;
2391 val* var31 /* : String */;
2392 static val* varonce32;
2393 val* var33 /* : String */;
2394 char* var34 /* : NativeString */;
2395 long var35 /* : Int */;
2396 val* var36 /* : String */;
2397 static val* varonce37;
2398 val* var38 /* : String */;
2399 char* var39 /* : NativeString */;
2400 long var40 /* : Int */;
2401 val* var41 /* : String */;
2402 val* var42 /* : MType */;
2403 static val* varonce43;
2404 val* var44 /* : String */;
2405 char* var45 /* : NativeString */;
2406 long var46 /* : Int */;
2407 val* var47 /* : String */;
2408 static val* varonce48;
2409 val* var49 /* : String */;
2410 char* var50 /* : NativeString */;
2411 long var51 /* : Int */;
2412 val* var52 /* : String */;
2413 val* var53 /* : Array[Object] */;
2414 long var54 /* : Int */;
2415 val* var55 /* : NativeArray[Object] */;
2416 val* var56 /* : String */;
2417 val* var57 /* : RuntimeVariable */;
2418 val* var58 /* : String */;
2419 static val* varonce59;
2420 val* var60 /* : String */;
2421 char* var61 /* : NativeString */;
2422 long var62 /* : Int */;
2423 val* var63 /* : String */;
2424 short int var64 /* : Bool */;
2425 val* var65 /* : MType */;
2426 short int var66 /* : Bool */;
2427 int cltype;
2428 int idtype;
2429 const char* var_class_name;
2430 val* var_valtype /* var valtype: MClassType */;
2431 val* var67 /* : RuntimeVariable */;
2432 val* var_res /* var res: RuntimeVariable */;
2433 val* var68 /* : AbstractCompiler */;
2434 val* var69 /* : RapidTypeAnalysis */;
2435 val* var70 /* : HashSet[MClassType] */;
2436 short int var71 /* : Bool */;
2437 short int var72 /* : Bool */;
2438 static val* varonce73;
2439 val* var74 /* : String */;
2440 char* var75 /* : NativeString */;
2441 long var76 /* : Int */;
2442 val* var77 /* : String */;
2443 val* var78 /* : MType */;
2444 static val* varonce79;
2445 val* var80 /* : String */;
2446 char* var81 /* : NativeString */;
2447 long var82 /* : Int */;
2448 val* var83 /* : String */;
2449 static val* varonce84;
2450 val* var85 /* : String */;
2451 char* var86 /* : NativeString */;
2452 long var87 /* : Int */;
2453 val* var88 /* : String */;
2454 val* var89 /* : MType */;
2455 static val* varonce90;
2456 val* var91 /* : String */;
2457 char* var92 /* : NativeString */;
2458 long var93 /* : Int */;
2459 val* var94 /* : String */;
2460 val* var95 /* : Array[Object] */;
2461 long var96 /* : Int */;
2462 val* var97 /* : NativeArray[Object] */;
2463 val* var98 /* : String */;
2464 static val* varonce99;
2465 val* var100 /* : String */;
2466 char* var101 /* : NativeString */;
2467 long var102 /* : Int */;
2468 val* var103 /* : String */;
2469 static val* varonce104;
2470 val* var105 /* : String */;
2471 char* var106 /* : NativeString */;
2472 long var107 /* : Int */;
2473 val* var108 /* : String */;
2474 val* var109 /* : String */;
2475 static val* varonce110;
2476 val* var111 /* : String */;
2477 char* var112 /* : NativeString */;
2478 long var113 /* : Int */;
2479 val* var114 /* : String */;
2480 static val* varonce115;
2481 val* var116 /* : String */;
2482 char* var117 /* : NativeString */;
2483 long var118 /* : Int */;
2484 val* var119 /* : String */;
2485 val* var120 /* : MType */;
2486 static val* varonce121;
2487 val* var122 /* : String */;
2488 char* var123 /* : NativeString */;
2489 long var124 /* : Int */;
2490 val* var125 /* : String */;
2491 static val* varonce126;
2492 val* var127 /* : String */;
2493 char* var128 /* : NativeString */;
2494 long var129 /* : Int */;
2495 val* var130 /* : String */;
2496 val* var131 /* : Array[Object] */;
2497 long var132 /* : Int */;
2498 val* var133 /* : NativeArray[Object] */;
2499 val* var134 /* : String */;
2500 short int var135 /* : Bool */;
2501 val* var136 /* : MType */;
2502 val* var137 /* : String */;
2503 static val* varonce138;
2504 val* var139 /* : String */;
2505 char* var140 /* : NativeString */;
2506 long var141 /* : Int */;
2507 val* var142 /* : String */;
2508 short int var143 /* : Bool */;
2509 short int var_144 /* var : Bool */;
2510 val* var145 /* : String */;
2511 static val* varonce146;
2512 val* var147 /* : String */;
2513 char* var148 /* : NativeString */;
2514 long var149 /* : Int */;
2515 val* var150 /* : String */;
2516 short int var151 /* : Bool */;
2517 val* var152 /* : RuntimeVariable */;
2518 val* var_res153 /* var res: RuntimeVariable */;
2519 static val* varonce154;
2520 val* var155 /* : String */;
2521 char* var156 /* : NativeString */;
2522 long var157 /* : Int */;
2523 val* var158 /* : String */;
2524 static val* varonce159;
2525 val* var160 /* : String */;
2526 char* var161 /* : NativeString */;
2527 long var162 /* : Int */;
2528 val* var163 /* : String */;
2529 val* var164 /* : MType */;
2530 static val* varonce165;
2531 val* var166 /* : String */;
2532 char* var167 /* : NativeString */;
2533 long var168 /* : Int */;
2534 val* var169 /* : String */;
2535 static val* varonce170;
2536 val* var171 /* : String */;
2537 char* var172 /* : NativeString */;
2538 long var173 /* : Int */;
2539 val* var174 /* : String */;
2540 val* var175 /* : Array[Object] */;
2541 long var176 /* : Int */;
2542 val* var177 /* : NativeArray[Object] */;
2543 val* var178 /* : String */;
2544 static val* varonce179;
2545 val* var180 /* : String */;
2546 char* var181 /* : NativeString */;
2547 long var182 /* : Int */;
2548 val* var183 /* : String */;
2549 val* var184 /* : MType */;
2550 static val* varonce185;
2551 val* var186 /* : String */;
2552 char* var187 /* : NativeString */;
2553 long var188 /* : Int */;
2554 val* var189 /* : String */;
2555 static val* varonce190;
2556 val* var191 /* : String */;
2557 char* var192 /* : NativeString */;
2558 long var193 /* : Int */;
2559 val* var194 /* : String */;
2560 val* var195 /* : Array[Object] */;
2561 long var196 /* : Int */;
2562 val* var197 /* : NativeArray[Object] */;
2563 val* var198 /* : String */;
2564 var_value = p0;
2565 var_mtype = p1;
2566 var1 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2567 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___61d_61d]))(var1, var_mtype) /* == on <var1:MType>*/;
2568 if (var2){
2569 var = var_value;
2570 goto RET_LABEL;
2571 } else {
2572 var4 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2573 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_compiler__MType__ctype]))(var4) /* ctype on <var4:MType>*/;
2574 if (varonce) {
2575 var6 = varonce;
2576 } else {
2577 var7 = "val*";
2578 var8 = 4;
2579 var9 = string__NativeString__to_s_with_length(var7, var8);
2580 var6 = var9;
2581 varonce = var6;
2582 }
2583 var10 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_kernel__Object___61d_61d]))(var5, var6) /* == on <var5:String>*/;
2584 var_ = var10;
2585 if (var10){
2586 var11 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MType>*/;
2587 if (varonce12) {
2588 var13 = varonce12;
2589 } else {
2590 var14 = "val*";
2591 var15 = 4;
2592 var16 = string__NativeString__to_s_with_length(var14, var15);
2593 var13 = var16;
2594 varonce12 = var13;
2595 }
2596 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
2597 var3 = var17;
2598 } else {
2599 var3 = var_;
2600 }
2601 if (var3){
2602 var = var_value;
2603 goto RET_LABEL;
2604 } else {
2605 var18 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2606 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_abstract_compiler__MType__ctype]))(var18) /* ctype on <var18:MType>*/;
2607 if (varonce20) {
2608 var21 = varonce20;
2609 } else {
2610 var22 = "val*";
2611 var23 = 4;
2612 var24 = string__NativeString__to_s_with_length(var22, var23);
2613 var21 = var24;
2614 varonce20 = var21;
2615 }
2616 var25 = ((short int (*)(val*, val*))(var19->class->vft[COLOR_kernel__Object___61d_61d]))(var19, var21) /* == on <var19:String>*/;
2617 if (var25){
2618 if (varonce26) {
2619 var27 = varonce26;
2620 } else {
2621 var28 = "((struct ";
2622 var29 = 9;
2623 var30 = string__NativeString__to_s_with_length(var28, var29);
2624 var27 = var30;
2625 varonce26 = var27;
2626 }
2627 var31 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
2628 if (varonce32) {
2629 var33 = varonce32;
2630 } else {
2631 var34 = "*)";
2632 var35 = 2;
2633 var36 = string__NativeString__to_s_with_length(var34, var35);
2634 var33 = var36;
2635 varonce32 = var33;
2636 }
2637 if (varonce37) {
2638 var38 = varonce37;
2639 } else {
2640 var39 = ")->value; /* autounbox from ";
2641 var40 = 28;
2642 var41 = string__NativeString__to_s_with_length(var39, var40);
2643 var38 = var41;
2644 varonce37 = var38;
2645 }
2646 var42 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2647 if (varonce43) {
2648 var44 = varonce43;
2649 } else {
2650 var45 = " to ";
2651 var46 = 4;
2652 var47 = string__NativeString__to_s_with_length(var45, var46);
2653 var44 = var47;
2654 varonce43 = var44;
2655 }
2656 if (varonce48) {
2657 var49 = varonce48;
2658 } else {
2659 var50 = " */";
2660 var51 = 3;
2661 var52 = string__NativeString__to_s_with_length(var50, var51);
2662 var49 = var52;
2663 varonce48 = var49;
2664 }
2665 var53 = NEW_array__Array(&type_array__Arraykernel__Object);
2666 { /* var53 = array_instance Array[Object] */
2667 var54 = 9;
2668 var55 = NEW_array__NativeArray(var54, &type_array__NativeArraykernel__Object);
2669 ((struct instance_array__NativeArray*)var55)->values[0] = (val*) var27;
2670 ((struct instance_array__NativeArray*)var55)->values[1] = (val*) var31;
2671 ((struct instance_array__NativeArray*)var55)->values[2] = (val*) var33;
2672 ((struct instance_array__NativeArray*)var55)->values[3] = (val*) var_value;
2673 ((struct instance_array__NativeArray*)var55)->values[4] = (val*) var38;
2674 ((struct instance_array__NativeArray*)var55)->values[5] = (val*) var42;
2675 ((struct instance_array__NativeArray*)var55)->values[6] = (val*) var44;
2676 ((struct instance_array__NativeArray*)var55)->values[7] = (val*) var_mtype;
2677 ((struct instance_array__NativeArray*)var55)->values[8] = (val*) var49;
2678 ((void (*)(val*, val*, long))(var53->class->vft[COLOR_array__Array__with_native]))(var53, var55, var54) /* with_native on <var53:Array[Object]>*/;
2679 }
2680 var56 = ((val* (*)(val*))(var53->class->vft[COLOR_string__Object__to_s]))(var53) /* to_s on <var53:Array[Object]>*/;
2681 var57 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var56, var_mtype) /* new_expr on <self:GlobalCompilerVisitor>*/;
2682 var = var57;
2683 goto RET_LABEL;
2684 } else {
2685 var58 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MType>*/;
2686 if (varonce59) {
2687 var60 = varonce59;
2688 } else {
2689 var61 = "val*";
2690 var62 = 4;
2691 var63 = string__NativeString__to_s_with_length(var61, var62);
2692 var60 = var63;
2693 varonce59 = var60;
2694 }
2695 var64 = ((short int (*)(val*, val*))(var58->class->vft[COLOR_kernel__Object___61d_61d]))(var58, var60) /* == on <var58:String>*/;
2696 if (var64){
2697 var65 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2698 /* <var65:MType> isa MClassType */
2699 cltype = type_model__MClassType.color;
2700 idtype = type_model__MClassType.id;
2701 if(cltype >= var65->type->table_size) {
2702 var66 = 0;
2703 } else {
2704 var66 = var65->type->type_table[cltype] == idtype;
2705 }
2706 if (!var66) {
2707 var_class_name = var65 == NULL ? "null" : var65->type->name;
2708 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
2709 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 268);
2710 show_backtrace(1);
2711 }
2712 var_valtype = var65;
2713 var67 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_mtype) /* new_var on <self:GlobalCompilerVisitor>*/;
2714 var_res = var67;
2715 var68 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
2716 var69 = ((val* (*)(val*))(var68->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var68) /* runtime_type_analysis on <var68:AbstractCompiler(GlobalCompiler)>*/;
2717 var70 = ((val* (*)(val*))(var69->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var69) /* live_types on <var69:RapidTypeAnalysis>*/;
2718 var71 = ((short int (*)(val*, val*))(var70->class->vft[COLOR_abstract_collection__Collection__has]))(var70, var_valtype) /* has on <var70:HashSet[MClassType]>*/;
2719 var72 = !var71;
2720 if (var72){
2721 if (varonce73) {
2722 var74 = varonce73;
2723 } else {
2724 var75 = "/*no autobox from ";
2725 var76 = 18;
2726 var77 = string__NativeString__to_s_with_length(var75, var76);
2727 var74 = var77;
2728 varonce73 = var74;
2729 }
2730 var78 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2731 if (varonce79) {
2732 var80 = varonce79;
2733 } else {
2734 var81 = " to ";
2735 var82 = 4;
2736 var83 = string__NativeString__to_s_with_length(var81, var82);
2737 var80 = var83;
2738 varonce79 = var80;
2739 }
2740 if (varonce84) {
2741 var85 = varonce84;
2742 } else {
2743 var86 = ": ";
2744 var87 = 2;
2745 var88 = string__NativeString__to_s_with_length(var86, var87);
2746 var85 = var88;
2747 varonce84 = var85;
2748 }
2749 var89 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2750 if (varonce90) {
2751 var91 = varonce90;
2752 } else {
2753 var92 = " is not live! */";
2754 var93 = 16;
2755 var94 = string__NativeString__to_s_with_length(var92, var93);
2756 var91 = var94;
2757 varonce90 = var91;
2758 }
2759 var95 = NEW_array__Array(&type_array__Arraykernel__Object);
2760 { /* var95 = array_instance Array[Object] */
2761 var96 = 7;
2762 var97 = NEW_array__NativeArray(var96, &type_array__NativeArraykernel__Object);
2763 ((struct instance_array__NativeArray*)var97)->values[0] = (val*) var74;
2764 ((struct instance_array__NativeArray*)var97)->values[1] = (val*) var78;
2765 ((struct instance_array__NativeArray*)var97)->values[2] = (val*) var80;
2766 ((struct instance_array__NativeArray*)var97)->values[3] = (val*) var_mtype;
2767 ((struct instance_array__NativeArray*)var97)->values[4] = (val*) var85;
2768 ((struct instance_array__NativeArray*)var97)->values[5] = (val*) var89;
2769 ((struct instance_array__NativeArray*)var97)->values[6] = (val*) var91;
2770 ((void (*)(val*, val*, long))(var95->class->vft[COLOR_array__Array__with_native]))(var95, var97, var96) /* with_native on <var95:Array[Object]>*/;
2771 }
2772 var98 = ((val* (*)(val*))(var95->class->vft[COLOR_string__Object__to_s]))(var95) /* to_s on <var95:Array[Object]>*/;
2773 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var98) /* add on <self:GlobalCompilerVisitor>*/;
2774 if (varonce99) {
2775 var100 = varonce99;
2776 } else {
2777 var101 = "printf(\"Dead code executed!\\n\"); show_backtrace(1);";
2778 var102 = 51;
2779 var103 = string__NativeString__to_s_with_length(var101, var102);
2780 var100 = var103;
2781 varonce99 = var100;
2782 }
2783 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var100) /* add on <self:GlobalCompilerVisitor>*/;
2784 var = var_res;
2785 goto RET_LABEL;
2786 } else {
2787 }
2788 if (varonce104) {
2789 var105 = varonce104;
2790 } else {
2791 var106 = " = BOX_";
2792 var107 = 7;
2793 var108 = string__NativeString__to_s_with_length(var106, var107);
2794 var105 = var108;
2795 varonce104 = var105;
2796 }
2797 var109 = ((val* (*)(val*))(var_valtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_valtype) /* c_name on <var_valtype:MClassType>*/;
2798 if (varonce110) {
2799 var111 = varonce110;
2800 } else {
2801 var112 = "(";
2802 var113 = 1;
2803 var114 = string__NativeString__to_s_with_length(var112, var113);
2804 var111 = var114;
2805 varonce110 = var111;
2806 }
2807 if (varonce115) {
2808 var116 = varonce115;
2809 } else {
2810 var117 = "); /* autobox from ";
2811 var118 = 19;
2812 var119 = string__NativeString__to_s_with_length(var117, var118);
2813 var116 = var119;
2814 varonce115 = var116;
2815 }
2816 var120 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2817 if (varonce121) {
2818 var122 = varonce121;
2819 } else {
2820 var123 = " to ";
2821 var124 = 4;
2822 var125 = string__NativeString__to_s_with_length(var123, var124);
2823 var122 = var125;
2824 varonce121 = var122;
2825 }
2826 if (varonce126) {
2827 var127 = varonce126;
2828 } else {
2829 var128 = " */";
2830 var129 = 3;
2831 var130 = string__NativeString__to_s_with_length(var128, var129);
2832 var127 = var130;
2833 varonce126 = var127;
2834 }
2835 var131 = NEW_array__Array(&type_array__Arraykernel__Object);
2836 { /* var131 = array_instance Array[Object] */
2837 var132 = 10;
2838 var133 = NEW_array__NativeArray(var132, &type_array__NativeArraykernel__Object);
2839 ((struct instance_array__NativeArray*)var133)->values[0] = (val*) var_res;
2840 ((struct instance_array__NativeArray*)var133)->values[1] = (val*) var105;
2841 ((struct instance_array__NativeArray*)var133)->values[2] = (val*) var109;
2842 ((struct instance_array__NativeArray*)var133)->values[3] = (val*) var111;
2843 ((struct instance_array__NativeArray*)var133)->values[4] = (val*) var_value;
2844 ((struct instance_array__NativeArray*)var133)->values[5] = (val*) var116;
2845 ((struct instance_array__NativeArray*)var133)->values[6] = (val*) var120;
2846 ((struct instance_array__NativeArray*)var133)->values[7] = (val*) var122;
2847 ((struct instance_array__NativeArray*)var133)->values[8] = (val*) var_mtype;
2848 ((struct instance_array__NativeArray*)var133)->values[9] = (val*) var127;
2849 ((void (*)(val*, val*, long))(var131->class->vft[COLOR_array__Array__with_native]))(var131, var133, var132) /* with_native on <var131:Array[Object]>*/;
2850 }
2851 var134 = ((val* (*)(val*))(var131->class->vft[COLOR_string__Object__to_s]))(var131) /* to_s on <var131:Array[Object]>*/;
2852 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
2853 var = var_res;
2854 goto RET_LABEL;
2855 } else {
2856 var136 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2857 var137 = ((val* (*)(val*))(var136->class->vft[COLOR_nitni_base__MType__cname_blind]))(var136) /* cname_blind on <var136:MType>*/;
2858 if (varonce138) {
2859 var139 = varonce138;
2860 } else {
2861 var140 = "void*";
2862 var141 = 5;
2863 var142 = string__NativeString__to_s_with_length(var140, var141);
2864 var139 = var142;
2865 varonce138 = var139;
2866 }
2867 var143 = ((short int (*)(val*, val*))(var137->class->vft[COLOR_kernel__Object___61d_61d]))(var137, var139) /* == on <var137:String>*/;
2868 var_144 = var143;
2869 if (var143){
2870 var145 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_nitni_base__MType__cname_blind]))(var_mtype) /* cname_blind on <var_mtype:MType>*/;
2871 if (varonce146) {
2872 var147 = varonce146;
2873 } else {
2874 var148 = "void*";
2875 var149 = 5;
2876 var150 = string__NativeString__to_s_with_length(var148, var149);
2877 var147 = var150;
2878 varonce146 = var147;
2879 }
2880 var151 = ((short int (*)(val*, val*))(var145->class->vft[COLOR_kernel__Object___61d_61d]))(var145, var147) /* == on <var145:String>*/;
2881 var135 = var151;
2882 } else {
2883 var135 = var_144;
2884 }
2885 if (var135){
2886 var = var_value;
2887 goto RET_LABEL;
2888 } else {
2889 var152 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_mtype) /* new_var on <self:GlobalCompilerVisitor>*/;
2890 var_res153 = var152;
2891 if (varonce154) {
2892 var155 = varonce154;
2893 } else {
2894 var156 = "/* ";
2895 var157 = 3;
2896 var158 = string__NativeString__to_s_with_length(var156, var157);
2897 var155 = var158;
2898 varonce154 = var155;
2899 }
2900 if (varonce159) {
2901 var160 = varonce159;
2902 } else {
2903 var161 = " left unintialized (cannot convert ";
2904 var162 = 35;
2905 var163 = string__NativeString__to_s_with_length(var161, var162);
2906 var160 = var163;
2907 varonce159 = var160;
2908 }
2909 var164 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2910 if (varonce165) {
2911 var166 = varonce165;
2912 } else {
2913 var167 = " to ";
2914 var168 = 4;
2915 var169 = string__NativeString__to_s_with_length(var167, var168);
2916 var166 = var169;
2917 varonce165 = var166;
2918 }
2919 if (varonce170) {
2920 var171 = varonce170;
2921 } else {
2922 var172 = ") */";
2923 var173 = 4;
2924 var174 = string__NativeString__to_s_with_length(var172, var173);
2925 var171 = var174;
2926 varonce170 = var171;
2927 }
2928 var175 = NEW_array__Array(&type_array__Arraykernel__Object);
2929 { /* var175 = array_instance Array[Object] */
2930 var176 = 7;
2931 var177 = NEW_array__NativeArray(var176, &type_array__NativeArraykernel__Object);
2932 ((struct instance_array__NativeArray*)var177)->values[0] = (val*) var155;
2933 ((struct instance_array__NativeArray*)var177)->values[1] = (val*) var_res153;
2934 ((struct instance_array__NativeArray*)var177)->values[2] = (val*) var160;
2935 ((struct instance_array__NativeArray*)var177)->values[3] = (val*) var164;
2936 ((struct instance_array__NativeArray*)var177)->values[4] = (val*) var166;
2937 ((struct instance_array__NativeArray*)var177)->values[5] = (val*) var_mtype;
2938 ((struct instance_array__NativeArray*)var177)->values[6] = (val*) var171;
2939 ((void (*)(val*, val*, long))(var175->class->vft[COLOR_array__Array__with_native]))(var175, var177, var176) /* with_native on <var175:Array[Object]>*/;
2940 }
2941 var178 = ((val* (*)(val*))(var175->class->vft[COLOR_string__Object__to_s]))(var175) /* to_s on <var175:Array[Object]>*/;
2942 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var178) /* add on <self:GlobalCompilerVisitor>*/;
2943 if (varonce179) {
2944 var180 = varonce179;
2945 } else {
2946 var181 = "printf(\"Cast error: Cannot cast %s to %s.\\n\", \"";
2947 var182 = 47;
2948 var183 = string__NativeString__to_s_with_length(var181, var182);
2949 var180 = var183;
2950 varonce179 = var180;
2951 }
2952 var184 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2953 if (varonce185) {
2954 var186 = varonce185;
2955 } else {
2956 var187 = "\", \"";
2957 var188 = 4;
2958 var189 = string__NativeString__to_s_with_length(var187, var188);
2959 var186 = var189;
2960 varonce185 = var186;
2961 }
2962 if (varonce190) {
2963 var191 = varonce190;
2964 } else {
2965 var192 = "\"); show_backtrace(1);";
2966 var193 = 22;
2967 var194 = string__NativeString__to_s_with_length(var192, var193);
2968 var191 = var194;
2969 varonce190 = var191;
2970 }
2971 var195 = NEW_array__Array(&type_array__Arraykernel__Object);
2972 { /* var195 = array_instance Array[Object] */
2973 var196 = 5;
2974 var197 = NEW_array__NativeArray(var196, &type_array__NativeArraykernel__Object);
2975 ((struct instance_array__NativeArray*)var197)->values[0] = (val*) var180;
2976 ((struct instance_array__NativeArray*)var197)->values[1] = (val*) var184;
2977 ((struct instance_array__NativeArray*)var197)->values[2] = (val*) var186;
2978 ((struct instance_array__NativeArray*)var197)->values[3] = (val*) var_mtype;
2979 ((struct instance_array__NativeArray*)var197)->values[4] = (val*) var191;
2980 ((void (*)(val*, val*, long))(var195->class->vft[COLOR_array__Array__with_native]))(var195, var197, var196) /* with_native on <var195:Array[Object]>*/;
2981 }
2982 var198 = ((val* (*)(val*))(var195->class->vft[COLOR_string__Object__to_s]))(var195) /* to_s on <var195:Array[Object]>*/;
2983 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var198) /* add on <self:GlobalCompilerVisitor>*/;
2984 var = var_res153;
2985 goto RET_LABEL;
2986 }
2987 }
2988 }
2989 }
2990 }
2991 RET_LABEL:;
2992 return var;
2993 }
2994 /* method global_compiler#GlobalCompilerVisitor#autobox for (self: Object, RuntimeVariable, MType): RuntimeVariable */
2995 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__autobox(val* self, val* p0, val* p1) {
2996 val* var /* : RuntimeVariable */;
2997 val* var1 /* : RuntimeVariable */;
2998 var1 = global_compiler__GlobalCompilerVisitor__autobox(self, p0, p1);
2999 var = var1;
3000 RET_LABEL:;
3001 return var;
3002 }
3003 /* method global_compiler#GlobalCompilerVisitor#collect_types for (self: GlobalCompilerVisitor, RuntimeVariable): Array[MClassType] */
3004 val* global_compiler__GlobalCompilerVisitor__collect_types(val* self, val* p0) {
3005 val* var /* : Array[MClassType] */;
3006 val* var_recv /* var recv: RuntimeVariable */;
3007 val* var1 /* : MType */;
3008 val* var_mtype /* var mtype: MType */;
3009 short int var2 /* : Bool */;
3010 short int var3 /* : Bool */;
3011 int cltype;
3012 int idtype;
3013 val* var4 /* : AbstractCompiler */;
3014 val* var5 /* : RapidTypeAnalysis */;
3015 val* var6 /* : HashSet[MClassType] */;
3016 short int var7 /* : Bool */;
3017 val* var8 /* : Array[MClassType] */;
3018 long var9 /* : Int */;
3019 val* var_ /* var : Array[MClassType] */;
3020 val* var_types /* var types: Array[MClassType] */;
3021 val* var10 /* : AbstractCompiler */;
3022 val* var11 /* : HashMap[MType, Array[MClassType]] */;
3023 val* var_cache /* var cache: HashMap[MType, Array[MClassType]] */;
3024 short int var12 /* : Bool */;
3025 val* var13 /* : nullable Object */;
3026 val* var14 /* : Array[MClassType] */;
3027 val* var_types15 /* var types: Array[MClassType] */;
3028 val* var16 /* : AbstractCompiler */;
3029 val* var17 /* : MModule */;
3030 val* var_mainmodule /* var mainmodule: MModule */;
3031 val* var18 /* : AbstractCompiler */;
3032 val* var19 /* : RapidTypeAnalysis */;
3033 val* var20 /* : HashSet[MClassType] */;
3034 val* var21 /* : Iterator[nullable Object] */;
3035 short int var22 /* : Bool */;
3036 val* var23 /* : nullable Object */;
3037 val* var_t /* var t: MClassType */;
3038 val* var24 /* : null */;
3039 short int var25 /* : Bool */;
3040 short int var26 /* : Bool */;
3041 var_recv = p0;
3042 var1 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_recv) /* mcasttype on <var_recv:RuntimeVariable>*/;
3043 var_mtype = var1;
3044 var2 = ((short int (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact]))(var_recv) /* is_exact on <var_recv:RuntimeVariable>*/;
3045 if (var2){
3046 /* <var_mtype:MType> isa MClassType */
3047 cltype = type_model__MClassType.color;
3048 idtype = type_model__MClassType.id;
3049 if(cltype >= var_mtype->type->table_size) {
3050 var3 = 0;
3051 } else {
3052 var3 = var_mtype->type->type_table[cltype] == idtype;
3053 }
3054 if (!var3) {
3055 fprintf(stderr, "Runtime error: %s", "Assert failed");
3056 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 293);
3057 show_backtrace(1);
3058 }
3059 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3060 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var4) /* runtime_type_analysis on <var4:AbstractCompiler(GlobalCompiler)>*/;
3061 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var5) /* live_types on <var5:RapidTypeAnalysis>*/;
3062 var7 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__Collection__has]))(var6, var_mtype) /* has on <var6:HashSet[MClassType]>*/;
3063 if (!var7) {
3064 fprintf(stderr, "Runtime error: %s", "Assert failed");
3065 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 294);
3066 show_backtrace(1);
3067 }
3068 var8 = NEW_array__Array(&type_array__Arraymodel__MClassType);
3069 var9 = 1;
3070 ((void (*)(val*, long))(var8->class->vft[COLOR_array__Array__with_capacity]))(var8, var9) /* with_capacity on <var8:Array[MClassType]>*/;
3071 var_ = var8;
3072 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var_mtype) /* push on <var_:Array[MClassType]>*/;
3073 var_types = var_;
3074 var = var_types;
3075 goto RET_LABEL;
3076 } else {
3077 }
3078 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3079 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_global_compiler__GlobalCompiler__collect_types_cache]))(var10) /* collect_types_cache on <var10:AbstractCompiler(GlobalCompiler)>*/;
3080 var_cache = var11;
3081 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]]>*/;
3082 if (var12){
3083 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]]>*/;
3084 var = var13;
3085 goto RET_LABEL;
3086 } else {
3087 }
3088 var14 = NEW_array__Array(&type_array__Arraymodel__MClassType);
3089 ((void (*)(val*))(var14->class->vft[COLOR_array__Array__init]))(var14) /* init on <var14:Array[MClassType]>*/;
3090 var_types15 = var14;
3091 var16 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3092 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var16) /* mainmodule on <var16:AbstractCompiler(GlobalCompiler)>*/;
3093 var_mainmodule = var17;
3094 var18 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3095 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var18) /* runtime_type_analysis on <var18:AbstractCompiler(GlobalCompiler)>*/;
3096 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var19) /* live_types on <var19:RapidTypeAnalysis>*/;
3097 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Collection__iterator]))(var20) /* iterator on <var20:HashSet[MClassType]>*/;
3098 for(;;) {
3099 var22 = ((short int (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var21) /* is_ok on <var21:Iterator[nullable Object]>*/;
3100 if(!var22) break;
3101 var23 = ((val* (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__item]))(var21) /* item on <var21:Iterator[nullable Object]>*/;
3102 var_t = var23;
3103 var24 = NULL;
3104 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>*/;
3105 var26 = !var25;
3106 if (var26){
3107 goto CONTINUE_label;
3108 } else {
3109 }
3110 ((void (*)(val*, val*))(var_types15->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_types15, var_t) /* add on <var_types15:Array[MClassType]>*/;
3111 CONTINUE_label: (void)0;
3112 ((void (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__next]))(var21) /* next on <var21:Iterator[nullable Object]>*/;
3113 }
3114 BREAK_label: (void)0;
3115 ((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]]>*/;
3116 var = var_types15;
3117 goto RET_LABEL;
3118 RET_LABEL:;
3119 return var;
3120 }
3121 /* method global_compiler#GlobalCompilerVisitor#collect_types for (self: Object, RuntimeVariable): Array[MClassType] */
3122 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__collect_types(val* self, val* p0) {
3123 val* var /* : Array[MClassType] */;
3124 val* var1 /* : Array[MClassType] */;
3125 var1 = global_compiler__GlobalCompilerVisitor__collect_types(self, p0);
3126 var = var1;
3127 RET_LABEL:;
3128 return var;
3129 }
3130 /* method global_compiler#GlobalCompilerVisitor#native_array_def for (self: GlobalCompilerVisitor, String, nullable MType, Array[RuntimeVariable]) */
3131 void global_compiler__GlobalCompilerVisitor__native_array_def(val* self, val* p0, val* p1, val* p2) {
3132 val* var_pname /* var pname: String */;
3133 val* var_ret_type /* var ret_type: nullable MType */;
3134 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
3135 val* var /* : nullable Object */;
3136 val* var1 /* : MType */;
3137 val* var_elttype /* var elttype: MType */;
3138 val* var2 /* : Array[Object] */;
3139 long var3 /* : Int */;
3140 val* var_ /* var : Array[Object] */;
3141 static val* varonce;
3142 val* var4 /* : String */;
3143 char* var5 /* : NativeString */;
3144 long var6 /* : Int */;
3145 val* var7 /* : String */;
3146 long var8 /* : Int */;
3147 val* var9 /* : nullable Object */;
3148 val* var10 /* : MType */;
3149 val* var11 /* : String */;
3150 static val* varonce12;
3151 val* var13 /* : String */;
3152 char* var14 /* : NativeString */;
3153 long var15 /* : Int */;
3154 val* var16 /* : String */;
3155 long var17 /* : Int */;
3156 val* var18 /* : nullable Object */;
3157 static val* varonce19;
3158 val* var20 /* : String */;
3159 char* var21 /* : NativeString */;
3160 long var22 /* : Int */;
3161 val* var23 /* : String */;
3162 val* var24 /* : String */;
3163 val* var_recv /* var recv: String */;
3164 static val* varonce25;
3165 val* var26 /* : String */;
3166 char* var27 /* : NativeString */;
3167 long var28 /* : Int */;
3168 val* var29 /* : String */;
3169 short int var30 /* : Bool */;
3170 static val* varonce31;
3171 val* var32 /* : String */;
3172 char* var33 /* : NativeString */;
3173 long var34 /* : Int */;
3174 val* var35 /* : String */;
3175 long var36 /* : Int */;
3176 val* var37 /* : nullable Object */;
3177 static val* varonce38;
3178 val* var39 /* : String */;
3179 char* var40 /* : NativeString */;
3180 long var41 /* : Int */;
3181 val* var42 /* : String */;
3182 val* var43 /* : Array[Object] */;
3183 long var44 /* : Int */;
3184 val* var45 /* : NativeArray[Object] */;
3185 val* var46 /* : String */;
3186 val* var47 /* : RuntimeVariable */;
3187 static val* varonce48;
3188 val* var49 /* : String */;
3189 char* var50 /* : NativeString */;
3190 long var51 /* : Int */;
3191 val* var52 /* : String */;
3192 short int var53 /* : Bool */;
3193 static val* varonce54;
3194 val* var55 /* : String */;
3195 char* var56 /* : NativeString */;
3196 long var57 /* : Int */;
3197 val* var58 /* : String */;
3198 long var59 /* : Int */;
3199 val* var60 /* : nullable Object */;
3200 static val* varonce61;
3201 val* var62 /* : String */;
3202 char* var63 /* : NativeString */;
3203 long var64 /* : Int */;
3204 val* var65 /* : String */;
3205 long var66 /* : Int */;
3206 val* var67 /* : nullable Object */;
3207 static val* varonce68;
3208 val* var69 /* : String */;
3209 char* var70 /* : NativeString */;
3210 long var71 /* : Int */;
3211 val* var72 /* : String */;
3212 val* var73 /* : Array[Object] */;
3213 long var74 /* : Int */;
3214 val* var75 /* : NativeArray[Object] */;
3215 val* var76 /* : String */;
3216 static val* varonce77;
3217 val* var78 /* : String */;
3218 char* var79 /* : NativeString */;
3219 long var80 /* : Int */;
3220 val* var81 /* : String */;
3221 short int var82 /* : Bool */;
3222 val* var83 /* : Array[Object] */;
3223 long var84 /* : Int */;
3224 val* var_85 /* var : Array[Object] */;
3225 static val* varonce86;
3226 val* var87 /* : String */;
3227 char* var88 /* : NativeString */;
3228 long var89 /* : Int */;
3229 val* var90 /* : String */;
3230 long var91 /* : Int */;
3231 val* var92 /* : nullable Object */;
3232 val* var93 /* : MType */;
3233 val* var94 /* : String */;
3234 static val* varonce95;
3235 val* var96 /* : String */;
3236 char* var97 /* : NativeString */;
3237 long var98 /* : Int */;
3238 val* var99 /* : String */;
3239 long var100 /* : Int */;
3240 val* var101 /* : nullable Object */;
3241 static val* varonce102;
3242 val* var103 /* : String */;
3243 char* var104 /* : NativeString */;
3244 long var105 /* : Int */;
3245 val* var106 /* : String */;
3246 val* var107 /* : String */;
3247 val* var_recv1 /* var recv1: String */;
3248 static val* varonce108;
3249 val* var109 /* : String */;
3250 char* var110 /* : NativeString */;
3251 long var111 /* : Int */;
3252 val* var112 /* : String */;
3253 static val* varonce113;
3254 val* var114 /* : String */;
3255 char* var115 /* : NativeString */;
3256 long var116 /* : Int */;
3257 val* var117 /* : String */;
3258 static val* varonce118;
3259 val* var119 /* : String */;
3260 char* var120 /* : NativeString */;
3261 long var121 /* : Int */;
3262 val* var122 /* : String */;
3263 long var123 /* : Int */;
3264 val* var124 /* : nullable Object */;
3265 static val* varonce125;
3266 val* var126 /* : String */;
3267 char* var127 /* : NativeString */;
3268 long var128 /* : Int */;
3269 val* var129 /* : String */;
3270 val* var130 /* : String */;
3271 static val* varonce131;
3272 val* var132 /* : String */;
3273 char* var133 /* : NativeString */;
3274 long var134 /* : Int */;
3275 val* var135 /* : String */;
3276 val* var136 /* : Array[Object] */;
3277 long var137 /* : Int */;
3278 val* var138 /* : NativeArray[Object] */;
3279 val* var139 /* : String */;
3280 var_pname = p0;
3281 var_ret_type = p1;
3282 var_arguments = p2;
3283 var = ((val* (*)(val*))(var_arguments->class->vft[COLOR_abstract_collection__Collection__first]))(var_arguments) /* first on <var_arguments:Array[RuntimeVariable]>*/;
3284 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var) /* mtype on <var:nullable Object(RuntimeVariable)>*/;
3285 var_elttype = var1;
3286 var2 = NEW_array__Array(&type_array__Arraykernel__Object);
3287 var3 = 5;
3288 ((void (*)(val*, long))(var2->class->vft[COLOR_array__Array__with_capacity]))(var2, var3) /* with_capacity on <var2:Array[Object]>*/;
3289 var_ = var2;
3290 if (varonce) {
3291 var4 = varonce;
3292 } else {
3293 var5 = "((struct ";
3294 var6 = 9;
3295 var7 = string__NativeString__to_s_with_length(var5, var6);
3296 var4 = var7;
3297 varonce = var4;
3298 }
3299 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var4) /* add on <var_:Array[Object]>*/;
3300 var8 = 0;
3301 var9 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var8) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3302 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var9) /* mcasttype on <var9:nullable Object(RuntimeVariable)>*/;
3303 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__MType__c_name]))(var10) /* c_name on <var10:MType>*/;
3304 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var11) /* add on <var_:Array[Object]>*/;
3305 if (varonce12) {
3306 var13 = varonce12;
3307 } else {
3308 var14 = "*)";
3309 var15 = 2;
3310 var16 = string__NativeString__to_s_with_length(var14, var15);
3311 var13 = var16;
3312 varonce12 = var13;
3313 }
3314 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var13) /* add on <var_:Array[Object]>*/;
3315 var17 = 0;
3316 var18 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var17) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3317 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var18) /* add on <var_:Array[Object]>*/;
3318 if (varonce19) {
3319 var20 = varonce19;
3320 } else {
3321 var21 = ")->values";
3322 var22 = 9;
3323 var23 = string__NativeString__to_s_with_length(var21, var22);
3324 var20 = var23;
3325 varonce19 = var20;
3326 }
3327 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var20) /* add on <var_:Array[Object]>*/;
3328 var24 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
3329 var_recv = var24;
3330 if (varonce25) {
3331 var26 = varonce25;
3332 } else {
3333 var27 = "[]";
3334 var28 = 2;
3335 var29 = string__NativeString__to_s_with_length(var27, var28);
3336 var26 = var29;
3337 varonce25 = var26;
3338 }
3339 var30 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var26) /* == on <var_pname:String>*/;
3340 if (var30){
3341 if (varonce31) {
3342 var32 = varonce31;
3343 } else {
3344 var33 = "[";
3345 var34 = 1;
3346 var35 = string__NativeString__to_s_with_length(var33, var34);
3347 var32 = var35;
3348 varonce31 = var32;
3349 }
3350 var36 = 1;
3351 var37 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var36) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3352 if (varonce38) {
3353 var39 = varonce38;
3354 } else {
3355 var40 = "]";
3356 var41 = 1;
3357 var42 = string__NativeString__to_s_with_length(var40, var41);
3358 var39 = var42;
3359 varonce38 = var39;
3360 }
3361 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
3362 { /* var43 = array_instance Array[Object] */
3363 var44 = 4;
3364 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
3365 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_recv;
3366 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var32;
3367 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var37;
3368 ((struct instance_array__NativeArray*)var45)->values[3] = (val*) var39;
3369 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
3370 }
3371 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
3372 if (var_ret_type == NULL) {
3373 fprintf(stderr, "Runtime error: %s", "Cast failed");
3374 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 317);
3375 show_backtrace(1);
3376 }
3377 var47 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var46, var_ret_type) /* new_expr on <self:GlobalCompilerVisitor>*/;
3378 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var47) /* ret on <self:GlobalCompilerVisitor>*/;
3379 goto RET_LABEL;
3380 } else {
3381 if (varonce48) {
3382 var49 = varonce48;
3383 } else {
3384 var50 = "[]=";
3385 var51 = 3;
3386 var52 = string__NativeString__to_s_with_length(var50, var51);
3387 var49 = var52;
3388 varonce48 = var49;
3389 }
3390 var53 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var49) /* == on <var_pname:String>*/;
3391 if (var53){
3392 if (varonce54) {
3393 var55 = varonce54;
3394 } else {
3395 var56 = "[";
3396 var57 = 1;
3397 var58 = string__NativeString__to_s_with_length(var56, var57);
3398 var55 = var58;
3399 varonce54 = var55;
3400 }
3401 var59 = 1;
3402 var60 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var59) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3403 if (varonce61) {
3404 var62 = varonce61;
3405 } else {
3406 var63 = "]=";
3407 var64 = 2;
3408 var65 = string__NativeString__to_s_with_length(var63, var64);
3409 var62 = var65;
3410 varonce61 = var62;
3411 }
3412 var66 = 2;
3413 var67 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var66) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3414 if (varonce68) {
3415 var69 = varonce68;
3416 } else {
3417 var70 = ";";
3418 var71 = 1;
3419 var72 = string__NativeString__to_s_with_length(var70, var71);
3420 var69 = var72;
3421 varonce68 = var69;
3422 }
3423 var73 = NEW_array__Array(&type_array__Arraykernel__Object);
3424 { /* var73 = array_instance Array[Object] */
3425 var74 = 6;
3426 var75 = NEW_array__NativeArray(var74, &type_array__NativeArraykernel__Object);
3427 ((struct instance_array__NativeArray*)var75)->values[0] = (val*) var_recv;
3428 ((struct instance_array__NativeArray*)var75)->values[1] = (val*) var55;
3429 ((struct instance_array__NativeArray*)var75)->values[2] = (val*) var60;
3430 ((struct instance_array__NativeArray*)var75)->values[3] = (val*) var62;
3431 ((struct instance_array__NativeArray*)var75)->values[4] = (val*) var67;
3432 ((struct instance_array__NativeArray*)var75)->values[5] = (val*) var69;
3433 ((void (*)(val*, val*, long))(var73->class->vft[COLOR_array__Array__with_native]))(var73, var75, var74) /* with_native on <var73:Array[Object]>*/;
3434 }
3435 var76 = ((val* (*)(val*))(var73->class->vft[COLOR_string__Object__to_s]))(var73) /* to_s on <var73:Array[Object]>*/;
3436 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var76) /* add on <self:GlobalCompilerVisitor>*/;
3437 goto RET_LABEL;
3438 } else {
3439 if (varonce77) {
3440 var78 = varonce77;
3441 } else {
3442 var79 = "copy_to";
3443 var80 = 7;
3444 var81 = string__NativeString__to_s_with_length(var79, var80);
3445 var78 = var81;
3446 varonce77 = var78;
3447 }
3448 var82 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var78) /* == on <var_pname:String>*/;
3449 if (var82){
3450 var83 = NEW_array__Array(&type_array__Arraykernel__Object);
3451 var84 = 5;
3452 ((void (*)(val*, long))(var83->class->vft[COLOR_array__Array__with_capacity]))(var83, var84) /* with_capacity on <var83:Array[Object]>*/;
3453 var_85 = var83;
3454 if (varonce86) {
3455 var87 = varonce86;
3456 } else {
3457 var88 = "((struct ";
3458 var89 = 9;
3459 var90 = string__NativeString__to_s_with_length(var88, var89);
3460 var87 = var90;
3461 varonce86 = var87;
3462 }
3463 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var87) /* add on <var_85:Array[Object]>*/;
3464 var91 = 1;
3465 var92 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var91) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3466 var93 = ((val* (*)(val*))(var92->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var92) /* mcasttype on <var92:nullable Object(RuntimeVariable)>*/;
3467 var94 = ((val* (*)(val*))(var93->class->vft[COLOR_abstract_compiler__MType__c_name]))(var93) /* c_name on <var93:MType>*/;
3468 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var94) /* add on <var_85:Array[Object]>*/;
3469 if (varonce95) {
3470 var96 = varonce95;
3471 } else {
3472 var97 = "*)";
3473 var98 = 2;
3474 var99 = string__NativeString__to_s_with_length(var97, var98);
3475 var96 = var99;
3476 varonce95 = var96;
3477 }
3478 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var96) /* add on <var_85:Array[Object]>*/;
3479 var100 = 1;
3480 var101 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var100) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3481 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var101) /* add on <var_85:Array[Object]>*/;
3482 if (varonce102) {
3483 var103 = varonce102;
3484 } else {
3485 var104 = ")->values";
3486 var105 = 9;
3487 var106 = string__NativeString__to_s_with_length(var104, var105);
3488 var103 = var106;
3489 varonce102 = var103;
3490 }
3491 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var103) /* add on <var_85:Array[Object]>*/;
3492 var107 = ((val* (*)(val*))(var_85->class->vft[COLOR_string__Object__to_s]))(var_85) /* to_s on <var_85:Array[Object]>*/;
3493 var_recv1 = var107;
3494 if (varonce108) {
3495 var109 = varonce108;
3496 } else {
3497 var110 = "memcpy(";
3498 var111 = 7;
3499 var112 = string__NativeString__to_s_with_length(var110, var111);
3500 var109 = var112;
3501 varonce108 = var109;
3502 }
3503 if (varonce113) {
3504 var114 = varonce113;
3505 } else {
3506 var115 = ",";
3507 var116 = 1;
3508 var117 = string__NativeString__to_s_with_length(var115, var116);
3509 var114 = var117;
3510 varonce113 = var114;
3511 }
3512 if (varonce118) {
3513 var119 = varonce118;
3514 } else {
3515 var120 = ",";
3516 var121 = 1;
3517 var122 = string__NativeString__to_s_with_length(var120, var121);
3518 var119 = var122;
3519 varonce118 = var119;
3520 }
3521 var123 = 2;
3522 var124 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var123) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3523 if (varonce125) {
3524 var126 = varonce125;
3525 } else {
3526 var127 = "*sizeof(";
3527 var128 = 8;
3528 var129 = string__NativeString__to_s_with_length(var127, var128);
3529 var126 = var129;
3530 varonce125 = var126;
3531 }
3532 var130 = ((val* (*)(val*))(var_elttype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_elttype) /* ctype on <var_elttype:MType>*/;
3533 if (varonce131) {
3534 var132 = varonce131;
3535 } else {
3536 var133 = "));";
3537 var134 = 3;
3538 var135 = string__NativeString__to_s_with_length(var133, var134);
3539 var132 = var135;
3540 varonce131 = var132;
3541 }
3542 var136 = NEW_array__Array(&type_array__Arraykernel__Object);
3543 { /* var136 = array_instance Array[Object] */
3544 var137 = 9;
3545 var138 = NEW_array__NativeArray(var137, &type_array__NativeArraykernel__Object);
3546 ((struct instance_array__NativeArray*)var138)->values[0] = (val*) var109;
3547 ((struct instance_array__NativeArray*)var138)->values[1] = (val*) var_recv1;
3548 ((struct instance_array__NativeArray*)var138)->values[2] = (val*) var114;
3549 ((struct instance_array__NativeArray*)var138)->values[3] = (val*) var_recv;
3550 ((struct instance_array__NativeArray*)var138)->values[4] = (val*) var119;
3551 ((struct instance_array__NativeArray*)var138)->values[5] = (val*) var124;
3552 ((struct instance_array__NativeArray*)var138)->values[6] = (val*) var126;
3553 ((struct instance_array__NativeArray*)var138)->values[7] = (val*) var130;
3554 ((struct instance_array__NativeArray*)var138)->values[8] = (val*) var132;
3555 ((void (*)(val*, val*, long))(var136->class->vft[COLOR_array__Array__with_native]))(var136, var138, var137) /* with_native on <var136:Array[Object]>*/;
3556 }
3557 var139 = ((val* (*)(val*))(var136->class->vft[COLOR_string__Object__to_s]))(var136) /* to_s on <var136:Array[Object]>*/;
3558 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var139) /* add on <self:GlobalCompilerVisitor>*/;
3559 goto RET_LABEL;
3560 } else {
3561 }
3562 }
3563 }
3564 RET_LABEL:;
3565 }
3566 /* method global_compiler#GlobalCompilerVisitor#native_array_def for (self: Object, String, nullable MType, Array[RuntimeVariable]) */
3567 void VIRTUAL_global_compiler__GlobalCompilerVisitor__native_array_def(val* self, val* p0, val* p1, val* p2) {
3568 global_compiler__GlobalCompilerVisitor__native_array_def(self, p0, p1, p2);
3569 RET_LABEL:;
3570 }
3571 /* method global_compiler#GlobalCompilerVisitor#calloc_array for (self: GlobalCompilerVisitor, MType, Array[RuntimeVariable]) */
3572 void global_compiler__GlobalCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
3573 val* var_ret_type /* var ret_type: MType */;
3574 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
3575 static val* varonce;
3576 val* var /* : String */;
3577 char* var1 /* : NativeString */;
3578 long var2 /* : Int */;
3579 val* var3 /* : String */;
3580 val* var4 /* : String */;
3581 static val* varonce5;
3582 val* var6 /* : String */;
3583 char* var7 /* : NativeString */;
3584 long var8 /* : Int */;
3585 val* var9 /* : String */;
3586 long var10 /* : Int */;
3587 val* var11 /* : nullable Object */;
3588 static val* varonce12;
3589 val* var13 /* : String */;
3590 char* var14 /* : NativeString */;
3591 long var15 /* : Int */;
3592 val* var16 /* : String */;
3593 val* var17 /* : Array[Object] */;
3594 long var18 /* : Int */;
3595 val* var19 /* : NativeArray[Object] */;
3596 val* var20 /* : String */;
3597 val* var21 /* : RuntimeVariable */;
3598 var_ret_type = p0;
3599 var_arguments = p1;
3600 if (varonce) {
3601 var = varonce;
3602 } else {
3603 var1 = "NEW_";
3604 var2 = 4;
3605 var3 = string__NativeString__to_s_with_length(var1, var2);
3606 var = var3;
3607 varonce = var;
3608 }
3609 var4 = ((val* (*)(val*))(var_ret_type->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_ret_type) /* c_name on <var_ret_type:MType>*/;
3610 if (varonce5) {
3611 var6 = varonce5;
3612 } else {
3613 var7 = "(";
3614 var8 = 1;
3615 var9 = string__NativeString__to_s_with_length(var7, var8);
3616 var6 = var9;
3617 varonce5 = var6;
3618 }
3619 var10 = 1;
3620 var11 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var10) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3621 if (varonce12) {
3622 var13 = varonce12;
3623 } else {
3624 var14 = ")";
3625 var15 = 1;
3626 var16 = string__NativeString__to_s_with_length(var14, var15);
3627 var13 = var16;
3628 varonce12 = var13;
3629 }
3630 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
3631 { /* var17 = array_instance Array[Object] */
3632 var18 = 5;
3633 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
3634 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var;
3635 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var4;
3636 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var6;
3637 ((struct instance_array__NativeArray*)var19)->values[3] = (val*) var11;
3638 ((struct instance_array__NativeArray*)var19)->values[4] = (val*) var13;
3639 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
3640 }
3641 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
3642 var21 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var20, var_ret_type) /* new_expr on <self:GlobalCompilerVisitor>*/;
3643 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var21) /* ret on <self:GlobalCompilerVisitor>*/;
3644 RET_LABEL:;
3645 }
3646 /* method global_compiler#GlobalCompilerVisitor#calloc_array for (self: Object, MType, Array[RuntimeVariable]) */
3647 void VIRTUAL_global_compiler__GlobalCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
3648 global_compiler__GlobalCompilerVisitor__calloc_array(self, p0, p1);
3649 RET_LABEL:;
3650 }
3651 /* method global_compiler#GlobalCompilerVisitor#send for (self: GlobalCompilerVisitor, MMethod, Array[RuntimeVariable]): nullable RuntimeVariable */
3652 val* global_compiler__GlobalCompilerVisitor__send(val* self, val* p0, val* p1) {
3653 val* var /* : nullable RuntimeVariable */;
3654 val* var_m /* var m: MMethod */;
3655 val* var_args /* var args: Array[RuntimeVariable] */;
3656 val* var1 /* : nullable Object */;
3657 val* var2 /* : Array[MClassType] */;
3658 val* var_types /* var types: Array[MClassType] */;
3659 val* var3 /* : MPropDef */;
3660 val* var4 /* : nullable MSignature */;
3661 val* var5 /* : nullable MType */;
3662 val* var_ret /* var ret: nullable MType */;
3663 short int var6 /* : Bool */;
3664 val* var7 /* : nullable Object */;
3665 val* var8 /* : MType */;
3666 val* var9 /* : RuntimeVariable */;
3667 val* var_res /* var res: nullable RuntimeVariable */;
3668 val* var10 /* : null */;
3669 short int var11 /* : Bool */;
3670 val* var12 /* : null */;
3671 val* var13 /* : nullable Object */;
3672 val* var14 /* : MType */;
3673 val* var15 /* : RuntimeVariable */;
3674 static val* varonce;
3675 val* var16 /* : String */;
3676 char* var17 /* : NativeString */;
3677 long var18 /* : Int */;
3678 val* var19 /* : String */;
3679 static val* varonce20;
3680 val* var21 /* : String */;
3681 char* var22 /* : NativeString */;
3682 long var23 /* : Int */;
3683 val* var24 /* : String */;
3684 val* var25 /* : nullable Object */;
3685 val* var26 /* : String */;
3686 static val* varonce27;
3687 val* var28 /* : String */;
3688 char* var29 /* : NativeString */;
3689 long var30 /* : Int */;
3690 val* var31 /* : String */;
3691 val* var32 /* : Array[Object] */;
3692 long var33 /* : Int */;
3693 val* var34 /* : NativeArray[Object] */;
3694 val* var35 /* : String */;
3695 val* var36 /* : nullable Object */;
3696 val* var37 /* : MType */;
3697 val* var38 /* : String */;
3698 static val* varonce39;
3699 val* var40 /* : String */;
3700 char* var41 /* : NativeString */;
3701 long var42 /* : Int */;
3702 val* var43 /* : String */;
3703 short int var44 /* : Bool */;
3704 val* var45 /* : nullable Object */;
3705 val* var46 /* : MType */;
3706 short int var47 /* : Bool */;
3707 int cltype;
3708 int idtype;
3709 const char* var_class_name;
3710 val* var_mclasstype /* var mclasstype: MClassType */;
3711 val* var48 /* : AbstractCompiler */;
3712 val* var49 /* : RapidTypeAnalysis */;
3713 val* var50 /* : HashSet[MClassType] */;
3714 short int var51 /* : Bool */;
3715 short int var52 /* : Bool */;
3716 static val* varonce53;
3717 val* var54 /* : String */;
3718 char* var55 /* : NativeString */;
3719 long var56 /* : Int */;
3720 val* var57 /* : String */;
3721 static val* varonce58;
3722 val* var59 /* : String */;
3723 char* var60 /* : NativeString */;
3724 long var61 /* : Int */;
3725 val* var62 /* : String */;
3726 val* var63 /* : Array[Object] */;
3727 long var64 /* : Int */;
3728 val* var65 /* : NativeArray[Object] */;
3729 val* var66 /* : String */;
3730 val* var67 /* : AbstractCompiler */;
3731 val* var68 /* : MModule */;
3732 val* var69 /* : MPropDef */;
3733 val* var_propdef /* var propdef: MMethodDef */;
3734 val* var70 /* : nullable RuntimeVariable */;
3735 val* var_res2 /* var res2: nullable RuntimeVariable */;
3736 val* var71 /* : null */;
3737 short int var72 /* : Bool */;
3738 short int var73 /* : Bool */;
3739 short int var74 /* : Bool */;
3740 val* var75 /* : AbstractCompiler */;
3741 val* var76 /* : ModelBuilder */;
3742 val* var77 /* : ToolContext */;
3743 val* var78 /* : OptionBool */;
3744 val* var79 /* : nullable Object */;
3745 short int var80 /* : Bool */;
3746 short int var81 /* : Bool */;
3747 short int var_ /* var : Bool */;
3748 val* var82 /* : String */;
3749 static val* varonce83;
3750 val* var84 /* : String */;
3751 char* var85 /* : NativeString */;
3752 long var86 /* : Int */;
3753 val* var87 /* : String */;
3754 short int var88 /* : Bool */;
3755 short int var_89 /* var : Bool */;
3756 val* var90 /* : String */;
3757 static val* varonce91;
3758 val* var92 /* : String */;
3759 char* var93 /* : NativeString */;
3760 long var94 /* : Int */;
3761 val* var95 /* : String */;
3762 short int var96 /* : Bool */;
3763 short int var_consider_null /* var consider_null: Bool */;
3764 short int var97 /* : Bool */;
3765 short int var98 /* : Bool */;
3766 val* var99 /* : nullable Object */;
3767 val* var100 /* : MType */;
3768 short int var101 /* : Bool */;
3769 int cltype102;
3770 int idtype103;
3771 short int var_104 /* var : Bool */;
3772 val* var105 /* : nullable Object */;
3773 val* var106 /* : MType */;
3774 short int var107 /* : Bool */;
3775 int cltype108;
3776 int idtype109;
3777 short int var_110 /* var : Bool */;
3778 static val* varonce111;
3779 val* var112 /* : String */;
3780 char* var113 /* : NativeString */;
3781 long var114 /* : Int */;
3782 val* var115 /* : String */;
3783 val* var116 /* : nullable Object */;
3784 static val* varonce117;
3785 val* var118 /* : String */;
3786 char* var119 /* : NativeString */;
3787 long var120 /* : Int */;
3788 val* var121 /* : String */;
3789 val* var122 /* : Array[Object] */;
3790 long var123 /* : Int */;
3791 val* var124 /* : NativeArray[Object] */;
3792 val* var125 /* : String */;
3793 val* var126 /* : String */;
3794 static val* varonce127;
3795 val* var128 /* : String */;
3796 char* var129 /* : NativeString */;
3797 long var130 /* : Int */;
3798 val* var131 /* : String */;
3799 short int var132 /* : Bool */;
3800 val* var133 /* : null */;
3801 short int var134 /* : Bool */;
3802 long var135 /* : Int */;
3803 val* var136 /* : nullable Object */;
3804 val* var137 /* : MType */;
3805 short int var138 /* : Bool */;
3806 int cltype139;
3807 int idtype140;
3808 static val* varonce141;
3809 val* var142 /* : String */;
3810 char* var143 /* : NativeString */;
3811 long var144 /* : Int */;
3812 val* var145 /* : String */;
3813 long var146 /* : Int */;
3814 val* var147 /* : nullable Object */;
3815 static val* varonce148;
3816 val* var149 /* : String */;
3817 char* var150 /* : NativeString */;
3818 long var151 /* : Int */;
3819 val* var152 /* : String */;
3820 val* var153 /* : Array[Object] */;
3821 long var154 /* : Int */;
3822 val* var155 /* : NativeArray[Object] */;
3823 val* var156 /* : String */;
3824 long var157 /* : Int */;
3825 val* var158 /* : nullable Object */;
3826 val* var159 /* : MType */;
3827 short int var160 /* : Bool */;
3828 int cltype161;
3829 int idtype162;
3830 static val* varonce163;
3831 val* var164 /* : String */;
3832 char* var165 /* : NativeString */;
3833 long var166 /* : Int */;
3834 val* var167 /* : String */;
3835 val* var168 /* : Array[Object] */;
3836 long var169 /* : Int */;
3837 val* var170 /* : NativeArray[Object] */;
3838 val* var171 /* : String */;
3839 static val* varonce172;
3840 val* var173 /* : String */;
3841 char* var174 /* : NativeString */;
3842 long var175 /* : Int */;
3843 val* var176 /* : String */;
3844 long var177 /* : Int */;
3845 val* var178 /* : nullable Object */;
3846 val* var179 /* : String */;
3847 static val* varonce180;
3848 val* var181 /* : String */;
3849 char* var182 /* : NativeString */;
3850 long var183 /* : Int */;
3851 val* var184 /* : String */;
3852 val* var185 /* : Array[Object] */;
3853 long var186 /* : Int */;
3854 val* var187 /* : NativeArray[Object] */;
3855 val* var188 /* : String */;
3856 val* var189 /* : String */;
3857 static val* varonce190;
3858 val* var191 /* : String */;
3859 char* var192 /* : NativeString */;
3860 long var193 /* : Int */;
3861 val* var194 /* : String */;
3862 short int var195 /* : Bool */;
3863 val* var196 /* : null */;
3864 short int var197 /* : Bool */;
3865 long var198 /* : Int */;
3866 val* var199 /* : nullable Object */;
3867 val* var200 /* : MType */;
3868 short int var201 /* : Bool */;
3869 int cltype202;
3870 int idtype203;
3871 static val* varonce204;
3872 val* var205 /* : String */;
3873 char* var206 /* : NativeString */;
3874 long var207 /* : Int */;
3875 val* var208 /* : String */;
3876 long var209 /* : Int */;
3877 val* var210 /* : nullable Object */;
3878 static val* varonce211;
3879 val* var212 /* : String */;
3880 char* var213 /* : NativeString */;
3881 long var214 /* : Int */;
3882 val* var215 /* : String */;
3883 val* var216 /* : Array[Object] */;
3884 long var217 /* : Int */;
3885 val* var218 /* : NativeArray[Object] */;
3886 val* var219 /* : String */;
3887 long var220 /* : Int */;
3888 val* var221 /* : nullable Object */;
3889 val* var222 /* : MType */;
3890 short int var223 /* : Bool */;
3891 int cltype224;
3892 int idtype225;
3893 static val* varonce226;
3894 val* var227 /* : String */;
3895 char* var228 /* : NativeString */;
3896 long var229 /* : Int */;
3897 val* var230 /* : String */;
3898 val* var231 /* : Array[Object] */;
3899 long var232 /* : Int */;
3900 val* var233 /* : NativeArray[Object] */;
3901 val* var234 /* : String */;
3902 static val* varonce235;
3903 val* var236 /* : String */;
3904 char* var237 /* : NativeString */;
3905 long var238 /* : Int */;
3906 val* var239 /* : String */;
3907 long var240 /* : Int */;
3908 val* var241 /* : nullable Object */;
3909 val* var242 /* : String */;
3910 static val* varonce243;
3911 val* var244 /* : String */;
3912 char* var245 /* : NativeString */;
3913 long var246 /* : Int */;
3914 val* var247 /* : String */;
3915 val* var248 /* : Array[Object] */;
3916 long var249 /* : Int */;
3917 val* var250 /* : NativeArray[Object] */;
3918 val* var251 /* : String */;
3919 static val* varonce252;
3920 val* var253 /* : String */;
3921 char* var254 /* : NativeString */;
3922 long var255 /* : Int */;
3923 val* var256 /* : String */;
3924 static val* varonce257;
3925 val* var258 /* : String */;
3926 char* var259 /* : NativeString */;
3927 long var260 /* : Int */;
3928 val* var261 /* : String */;
3929 short int var262 /* : Bool */;
3930 static val* varonce263;
3931 val* var264 /* : String */;
3932 char* var265 /* : NativeString */;
3933 long var266 /* : Int */;
3934 val* var267 /* : String */;
3935 static val* varonce268;
3936 val* var269 /* : String */;
3937 char* var270 /* : NativeString */;
3938 long var271 /* : Int */;
3939 val* var272 /* : String */;
3940 val* var273 /* : nullable Object */;
3941 val* var274 /* : String */;
3942 static val* varonce275;
3943 val* var276 /* : String */;
3944 char* var277 /* : NativeString */;
3945 long var278 /* : Int */;
3946 val* var279 /* : String */;
3947 static val* varonce280;
3948 val* var281 /* : String */;
3949 char* var282 /* : NativeString */;
3950 long var283 /* : Int */;
3951 val* var284 /* : String */;
3952 val* var285 /* : Array[Object] */;
3953 long var286 /* : Int */;
3954 val* var287 /* : NativeArray[Object] */;
3955 val* var288 /* : String */;
3956 val* var289 /* : nullable Object */;
3957 static val* varonce290;
3958 val* var291 /* : String */;
3959 char* var292 /* : NativeString */;
3960 long var293 /* : Int */;
3961 val* var294 /* : String */;
3962 static val* varonce295;
3963 val* var296 /* : String */;
3964 char* var297 /* : NativeString */;
3965 long var298 /* : Int */;
3966 val* var299 /* : String */;
3967 val* var300 /* : nullable Object */;
3968 static val* varonce301;
3969 val* var302 /* : String */;
3970 char* var303 /* : NativeString */;
3971 long var304 /* : Int */;
3972 val* var305 /* : String */;
3973 val* var306 /* : Array[Object] */;
3974 long var307 /* : Int */;
3975 val* var308 /* : NativeArray[Object] */;
3976 val* var309 /* : String */;
3977 val* var310 /* : nullable Object */;
3978 val* var_last /* var last: MClassType */;
3979 val* var311 /* : null */;
3980 val* var_defaultpropdef /* var defaultpropdef: nullable MMethodDef */;
3981 val* var312 /* : Iterator[nullable Object] */;
3982 short int var313 /* : Bool */;
3983 val* var314 /* : nullable Object */;
3984 val* var_t /* var t: MClassType */;
3985 val* var315 /* : AbstractCompiler */;
3986 val* var316 /* : MModule */;
3987 val* var317 /* : MPropDef */;
3988 val* var_propdef318 /* var propdef: MMethodDef */;
3989 short int var319 /* : Bool */;
3990 val* var320 /* : MClassDef */;
3991 val* var321 /* : MClass */;
3992 val* var322 /* : String */;
3993 static val* varonce323;
3994 val* var324 /* : String */;
3995 char* var325 /* : NativeString */;
3996 long var326 /* : Int */;
3997 val* var327 /* : String */;
3998 short int var328 /* : Bool */;
3999 short int var_329 /* var : Bool */;
4000 val* var330 /* : String */;
4001 static val* varonce331;
4002 val* var332 /* : String */;
4003 char* var333 /* : NativeString */;
4004 long var334 /* : Int */;
4005 val* var335 /* : String */;
4006 short int var336 /* : Bool */;
4007 short int var337 /* : Bool */;
4008 short int var338 /* : Bool */;
4009 val* var339 /* : AbstractCompiler */;
4010 short int var340 /* : Bool */;
4011 short int var341 /* : Bool */;
4012 short int var_342 /* var : Bool */;
4013 short int var343 /* : Bool */;
4014 short int var_344 /* var : Bool */;
4015 val* var345 /* : null */;
4016 short int var346 /* : Bool */;
4017 static val* varonce347;
4018 val* var348 /* : String */;
4019 char* var349 /* : NativeString */;
4020 long var350 /* : Int */;
4021 val* var351 /* : String */;
4022 static val* varonce352;
4023 val* var353 /* : String */;
4024 char* var354 /* : NativeString */;
4025 long var355 /* : Int */;
4026 val* var356 /* : String */;
4027 val* var357 /* : Array[Object] */;
4028 long var358 /* : Int */;
4029 val* var359 /* : NativeArray[Object] */;
4030 val* var360 /* : String */;
4031 static val* varonce361;
4032 val* var362 /* : String */;
4033 char* var363 /* : NativeString */;
4034 long var364 /* : Int */;
4035 val* var365 /* : String */;
4036 val* var366 /* : AbstractCompiler */;
4037 val* var367 /* : String */;
4038 static val* varonce368;
4039 val* var369 /* : String */;
4040 char* var370 /* : NativeString */;
4041 long var371 /* : Int */;
4042 val* var372 /* : String */;
4043 static val* varonce373;
4044 val* var374 /* : String */;
4045 char* var375 /* : NativeString */;
4046 long var376 /* : Int */;
4047 val* var377 /* : String */;
4048 val* var378 /* : Array[Object] */;
4049 long var379 /* : Int */;
4050 val* var380 /* : NativeArray[Object] */;
4051 val* var381 /* : String */;
4052 val* var382 /* : nullable RuntimeVariable */;
4053 val* var_res2383 /* var res2: nullable RuntimeVariable */;
4054 val* var384 /* : null */;
4055 short int var385 /* : Bool */;
4056 static val* varonce386;
4057 val* var387 /* : String */;
4058 char* var388 /* : NativeString */;
4059 long var389 /* : Int */;
4060 val* var390 /* : String */;
4061 val* var391 /* : null */;
4062 short int var392 /* : Bool */;
4063 static val* varonce393;
4064 val* var394 /* : String */;
4065 char* var395 /* : NativeString */;
4066 long var396 /* : Int */;
4067 val* var397 /* : String */;
4068 val* var398 /* : MClassDef */;
4069 val* var399 /* : MClassType */;
4070 val* var400 /* : nullable RuntimeVariable */;
4071 val* var_res2401 /* var res2: nullable RuntimeVariable */;
4072 val* var402 /* : null */;
4073 short int var403 /* : Bool */;
4074 val* var404 /* : AbstractCompiler */;
4075 short int var405 /* : Bool */;
4076 static val* varonce406;
4077 val* var407 /* : String */;
4078 char* var408 /* : NativeString */;
4079 long var409 /* : Int */;
4080 val* var410 /* : String */;
4081 val* var411 /* : nullable Object */;
4082 static val* varonce412;
4083 val* var413 /* : String */;
4084 char* var414 /* : NativeString */;
4085 long var415 /* : Int */;
4086 val* var416 /* : String */;
4087 var_m = p0;
4088 var_args = p1;
4089 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4090 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var1) /* collect_types on <self:GlobalCompilerVisitor>*/;
4091 var_types = var2;
4092 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__intro]))(var_m) /* intro on <var_m:MMethod>*/;
4093 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MMethodDef__msignature]))(var3) /* msignature on <var3:MPropDef(MMethodDef)>*/;
4094 if (var4 == NULL) {
4095 fprintf(stderr, "Runtime error: %s", "Receiver is null");
4096 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 339);
4097 show_backtrace(1);
4098 } else {
4099 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_model__MSignature__return_mtype]))(var4) /* return_mtype on <var4:nullable MSignature>*/;
4100 }
4101 var_ret = var5;
4102 var6 = ((short int (*)(val*))(var_m->class->vft[COLOR_model__MMethod__is_new]))(var_m) /* is_new on <var_m:MMethod>*/;
4103 if (var6){
4104 var7 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4105 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var7) /* mtype on <var7:nullable Object(RuntimeVariable)>*/;
4106 var_ret = var8;
4107 var9 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
4108 var_res = var9;
4109 } else {
4110 var10 = NULL;
4111 if (var_ret == NULL) {
4112 var11 = 1; /* is null */
4113 } else {
4114 var11 = 0; /* arg is null but recv is not */
4115 }
4116 if (var11){
4117 var12 = NULL;
4118 var_res = var12;
4119 } else {
4120 var13 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4121 var14 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var13) /* resolve_for on <self:GlobalCompilerVisitor>*/;
4122 var_ret = var14;
4123 var15 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
4124 var_res = var15;
4125 }
4126 }
4127 if (varonce) {
4128 var16 = varonce;
4129 } else {
4130 var17 = "/* send ";
4131 var18 = 8;
4132 var19 = string__NativeString__to_s_with_length(var17, var18);
4133 var16 = var19;
4134 varonce = var16;
4135 }
4136 if (varonce20) {
4137 var21 = varonce20;
4138 } else {
4139 var22 = " on ";
4140 var23 = 4;
4141 var24 = string__NativeString__to_s_with_length(var22, var23);
4142 var21 = var24;
4143 varonce20 = var21;
4144 }
4145 var25 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4146 var26 = ((val* (*)(val*))(var25->class->vft[COLOR_string__Object__inspect]))(var25) /* inspect on <var25:nullable Object(RuntimeVariable)>*/;
4147 if (varonce27) {
4148 var28 = varonce27;
4149 } else {
4150 var29 = " */";
4151 var30 = 3;
4152 var31 = string__NativeString__to_s_with_length(var29, var30);
4153 var28 = var31;
4154 varonce27 = var28;
4155 }
4156 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
4157 { /* var32 = array_instance Array[Object] */
4158 var33 = 5;
4159 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
4160 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var16;
4161 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_m;
4162 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var21;
4163 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var26;
4164 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
4165 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
4166 }
4167 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
4168 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var35) /* add on <self:GlobalCompilerVisitor>*/;
4169 var36 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4170 var37 = ((val* (*)(val*))(var36->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var36) /* mtype on <var36:nullable Object(RuntimeVariable)>*/;
4171 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_compiler__MType__ctype]))(var37) /* ctype on <var37:MType>*/;
4172 if (varonce39) {
4173 var40 = varonce39;
4174 } else {
4175 var41 = "val*";
4176 var42 = 4;
4177 var43 = string__NativeString__to_s_with_length(var41, var42);
4178 var40 = var43;
4179 varonce39 = var40;
4180 }
4181 var44 = ((short int (*)(val*, val*))(var38->class->vft[COLOR_kernel__Object___33d_61d]))(var38, var40) /* != on <var38:String>*/;
4182 if (var44){
4183 var45 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4184 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var45) /* mtype on <var45:nullable Object(RuntimeVariable)>*/;
4185 /* <var46:MType> isa MClassType */
4186 cltype = type_model__MClassType.color;
4187 idtype = type_model__MClassType.id;
4188 if(cltype >= var46->type->table_size) {
4189 var47 = 0;
4190 } else {
4191 var47 = var46->type->type_table[cltype] == idtype;
4192 }
4193 if (!var47) {
4194 var_class_name = var46 == NULL ? "null" : var46->type->name;
4195 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
4196 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 352);
4197 show_backtrace(1);
4198 }
4199 var_mclasstype = var46;
4200 var48 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4201 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var48) /* runtime_type_analysis on <var48:AbstractCompiler(GlobalCompiler)>*/;
4202 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var49) /* live_types on <var49:RapidTypeAnalysis>*/;
4203 var51 = ((short int (*)(val*, val*))(var50->class->vft[COLOR_abstract_collection__Collection__has]))(var50, var_mclasstype) /* has on <var50:HashSet[MClassType]>*/;
4204 var52 = !var51;
4205 if (var52){
4206 if (varonce53) {
4207 var54 = varonce53;
4208 } else {
4209 var55 = "/* skip, no method ";
4210 var56 = 19;
4211 var57 = string__NativeString__to_s_with_length(var55, var56);
4212 var54 = var57;
4213 varonce53 = var54;
4214 }
4215 if (varonce58) {
4216 var59 = varonce58;
4217 } else {
4218 var60 = " */";
4219 var61 = 3;
4220 var62 = string__NativeString__to_s_with_length(var60, var61);
4221 var59 = var62;
4222 varonce58 = var59;
4223 }
4224 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
4225 { /* var63 = array_instance Array[Object] */
4226 var64 = 3;
4227 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
4228 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var54;
4229 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var_m;
4230 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var59;
4231 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
4232 }
4233 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
4234 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var66) /* add on <self:GlobalCompilerVisitor>*/;
4235 var = var_res;
4236 goto RET_LABEL;
4237 } else {
4238 }
4239 var67 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4240 var68 = ((val* (*)(val*))(var67->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var67) /* mainmodule on <var67:AbstractCompiler(GlobalCompiler)>*/;
4241 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>*/;
4242 var_propdef = var69;
4243 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>*/;
4244 var_res2 = var70;
4245 var71 = NULL;
4246 if (var_res == NULL) {
4247 var72 = 0; /* is null */
4248 } else {
4249 var72 = 1; /* arg is null and recv is not */
4250 }
4251 if (var72){
4252 if (var_res2 == NULL) {
4253 fprintf(stderr, "Runtime error: %s", "Cast failed");
4254 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 359);
4255 show_backtrace(1);
4256 }
4257 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
4258 } else {
4259 }
4260 var = var_res;
4261 goto RET_LABEL;
4262 } else {
4263 }
4264 var75 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4265 var76 = ((val* (*)(val*))(var75->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var75) /* modelbuilder on <var75:AbstractCompiler(GlobalCompiler)>*/;
4266 var77 = ((val* (*)(val*))(var76->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var76) /* toolcontext on <var76:ModelBuilder>*/;
4267 var78 = ((val* (*)(val*))(var77->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_other]))(var77) /* opt_no_check_other on <var77:ToolContext>*/;
4268 var79 = ((val* (*)(val*))(var78->class->vft[COLOR_opts__Option__value]))(var78) /* value on <var78:OptionBool>*/;
4269 var80 = ((struct instance_kernel__Bool*)var79)->value; /* autounbox from nullable Object to Bool */;
4270 var81 = !var80;
4271 var_ = var81;
4272 if (var81){
4273 var74 = var_;
4274 } else {
4275 var82 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4276 if (varonce83) {
4277 var84 = varonce83;
4278 } else {
4279 var85 = "==";
4280 var86 = 2;
4281 var87 = string__NativeString__to_s_with_length(var85, var86);
4282 var84 = var87;
4283 varonce83 = var84;
4284 }
4285 var88 = ((short int (*)(val*, val*))(var82->class->vft[COLOR_kernel__Object___61d_61d]))(var82, var84) /* == on <var82:String>*/;
4286 var74 = var88;
4287 }
4288 var_89 = var74;
4289 if (var74){
4290 var73 = var_89;
4291 } else {
4292 var90 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4293 if (varonce91) {
4294 var92 = varonce91;
4295 } else {
4296 var93 = "!=";
4297 var94 = 2;
4298 var95 = string__NativeString__to_s_with_length(var93, var94);
4299 var92 = var95;
4300 varonce91 = var92;
4301 }
4302 var96 = ((short int (*)(val*, val*))(var90->class->vft[COLOR_kernel__Object___61d_61d]))(var90, var92) /* == on <var90:String>*/;
4303 var73 = var96;
4304 }
4305 var_consider_null = var73;
4306 var99 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4307 var100 = ((val* (*)(val*))(var99->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var99) /* mcasttype on <var99:nullable Object(RuntimeVariable)>*/;
4308 /* <var100:MType> isa MNullableType */
4309 cltype102 = type_model__MNullableType.color;
4310 idtype103 = type_model__MNullableType.id;
4311 if(cltype102 >= var100->type->table_size) {
4312 var101 = 0;
4313 } else {
4314 var101 = var100->type->type_table[cltype102] == idtype103;
4315 }
4316 var_104 = var101;
4317 if (var101){
4318 var98 = var_104;
4319 } else {
4320 var105 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4321 var106 = ((val* (*)(val*))(var105->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var105) /* mcasttype on <var105:nullable Object(RuntimeVariable)>*/;
4322 /* <var106:MType> isa MNullType */
4323 cltype108 = type_model__MNullType.color;
4324 idtype109 = type_model__MNullType.id;
4325 if(cltype108 >= var106->type->table_size) {
4326 var107 = 0;
4327 } else {
4328 var107 = var106->type->type_table[cltype108] == idtype109;
4329 }
4330 var98 = var107;
4331 }
4332 var_110 = var98;
4333 if (var98){
4334 var97 = var_consider_null;
4335 } else {
4336 var97 = var_110;
4337 }
4338 if (var97){
4339 if (varonce111) {
4340 var112 = varonce111;
4341 } else {
4342 var113 = "if (";
4343 var114 = 4;
4344 var115 = string__NativeString__to_s_with_length(var113, var114);
4345 var112 = var115;
4346 varonce111 = var112;
4347 }
4348 var116 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4349 if (varonce117) {
4350 var118 = varonce117;
4351 } else {
4352 var119 = " == NULL) { /* Special null case */";
4353 var120 = 35;
4354 var121 = string__NativeString__to_s_with_length(var119, var120);
4355 var118 = var121;
4356 varonce117 = var118;
4357 }
4358 var122 = NEW_array__Array(&type_array__Arraykernel__Object);
4359 { /* var122 = array_instance Array[Object] */
4360 var123 = 3;
4361 var124 = NEW_array__NativeArray(var123, &type_array__NativeArraykernel__Object);
4362 ((struct instance_array__NativeArray*)var124)->values[0] = (val*) var112;
4363 ((struct instance_array__NativeArray*)var124)->values[1] = (val*) var116;
4364 ((struct instance_array__NativeArray*)var124)->values[2] = (val*) var118;
4365 ((void (*)(val*, val*, long))(var122->class->vft[COLOR_array__Array__with_native]))(var122, var124, var123) /* with_native on <var122:Array[Object]>*/;
4366 }
4367 var125 = ((val* (*)(val*))(var122->class->vft[COLOR_string__Object__to_s]))(var122) /* to_s on <var122:Array[Object]>*/;
4368 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var125) /* add on <self:GlobalCompilerVisitor>*/;
4369 var126 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4370 if (varonce127) {
4371 var128 = varonce127;
4372 } else {
4373 var129 = "==";
4374 var130 = 2;
4375 var131 = string__NativeString__to_s_with_length(var129, var130);
4376 var128 = var131;
4377 varonce127 = var128;
4378 }
4379 var132 = ((short int (*)(val*, val*))(var126->class->vft[COLOR_kernel__Object___61d_61d]))(var126, var128) /* == on <var126:String>*/;
4380 if (var132){
4381 var133 = NULL;
4382 if (var_res == NULL) {
4383 var134 = 0; /* is null */
4384 } else {
4385 var134 = 1; /* arg is null and recv is not */
4386 }
4387 if (!var134) {
4388 fprintf(stderr, "Runtime error: %s", "Assert failed");
4389 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 367);
4390 show_backtrace(1);
4391 }
4392 var135 = 1;
4393 var136 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var135) /* [] on <var_args:Array[RuntimeVariable]>*/;
4394 var137 = ((val* (*)(val*))(var136->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var136) /* mcasttype on <var136:nullable Object(RuntimeVariable)>*/;
4395 /* <var137:MType> isa MNullableType */
4396 cltype139 = type_model__MNullableType.color;
4397 idtype140 = type_model__MNullableType.id;
4398 if(cltype139 >= var137->type->table_size) {
4399 var138 = 0;
4400 } else {
4401 var138 = var137->type->type_table[cltype139] == idtype140;
4402 }
4403 if (var138){
4404 if (varonce141) {
4405 var142 = varonce141;
4406 } else {
4407 var143 = " = (";
4408 var144 = 4;
4409 var145 = string__NativeString__to_s_with_length(var143, var144);
4410 var142 = var145;
4411 varonce141 = var142;
4412 }
4413 var146 = 1;
4414 var147 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var146) /* [] on <var_args:Array[RuntimeVariable]>*/;
4415 if (varonce148) {
4416 var149 = varonce148;
4417 } else {
4418 var150 = " == NULL);";
4419 var151 = 10;
4420 var152 = string__NativeString__to_s_with_length(var150, var151);
4421 var149 = var152;
4422 varonce148 = var149;
4423 }
4424 var153 = NEW_array__Array(&type_array__Arraykernel__Object);
4425 { /* var153 = array_instance Array[Object] */
4426 var154 = 4;
4427 var155 = NEW_array__NativeArray(var154, &type_array__NativeArraykernel__Object);
4428 ((struct instance_array__NativeArray*)var155)->values[0] = (val*) var_res;
4429 ((struct instance_array__NativeArray*)var155)->values[1] = (val*) var142;
4430 ((struct instance_array__NativeArray*)var155)->values[2] = (val*) var147;
4431 ((struct instance_array__NativeArray*)var155)->values[3] = (val*) var149;
4432 ((void (*)(val*, val*, long))(var153->class->vft[COLOR_array__Array__with_native]))(var153, var155, var154) /* with_native on <var153:Array[Object]>*/;
4433 }
4434 var156 = ((val* (*)(val*))(var153->class->vft[COLOR_string__Object__to_s]))(var153) /* to_s on <var153:Array[Object]>*/;
4435 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var156) /* add on <self:GlobalCompilerVisitor>*/;
4436 } else {
4437 var157 = 1;
4438 var158 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var157) /* [] on <var_args:Array[RuntimeVariable]>*/;
4439 var159 = ((val* (*)(val*))(var158->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var158) /* mcasttype on <var158:nullable Object(RuntimeVariable)>*/;
4440 /* <var159:MType> isa MNullType */
4441 cltype161 = type_model__MNullType.color;
4442 idtype162 = type_model__MNullType.id;
4443 if(cltype161 >= var159->type->table_size) {
4444 var160 = 0;
4445 } else {
4446 var160 = var159->type->type_table[cltype161] == idtype162;
4447 }
4448 if (var160){
4449 if (varonce163) {
4450 var164 = varonce163;
4451 } else {
4452 var165 = " = 1; /* is null */";
4453 var166 = 19;
4454 var167 = string__NativeString__to_s_with_length(var165, var166);
4455 var164 = var167;
4456 varonce163 = var164;
4457 }
4458 var168 = NEW_array__Array(&type_array__Arraykernel__Object);
4459 { /* var168 = array_instance Array[Object] */
4460 var169 = 2;
4461 var170 = NEW_array__NativeArray(var169, &type_array__NativeArraykernel__Object);
4462 ((struct instance_array__NativeArray*)var170)->values[0] = (val*) var_res;
4463 ((struct instance_array__NativeArray*)var170)->values[1] = (val*) var164;
4464 ((void (*)(val*, val*, long))(var168->class->vft[COLOR_array__Array__with_native]))(var168, var170, var169) /* with_native on <var168:Array[Object]>*/;
4465 }
4466 var171 = ((val* (*)(val*))(var168->class->vft[COLOR_string__Object__to_s]))(var168) /* to_s on <var168:Array[Object]>*/;
4467 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
4468 } else {
4469 if (varonce172) {
4470 var173 = varonce172;
4471 } else {
4472 var174 = " = 0; /* ";
4473 var175 = 9;
4474 var176 = string__NativeString__to_s_with_length(var174, var175);
4475 var173 = var176;
4476 varonce172 = var173;
4477 }
4478 var177 = 1;
4479 var178 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var177) /* [] on <var_args:Array[RuntimeVariable]>*/;
4480 var179 = ((val* (*)(val*))(var178->class->vft[COLOR_string__Object__inspect]))(var178) /* inspect on <var178:nullable Object(RuntimeVariable)>*/;
4481 if (varonce180) {
4482 var181 = varonce180;
4483 } else {
4484 var182 = " cannot be null */";
4485 var183 = 18;
4486 var184 = string__NativeString__to_s_with_length(var182, var183);
4487 var181 = var184;
4488 varonce180 = var181;
4489 }
4490 var185 = NEW_array__Array(&type_array__Arraykernel__Object);
4491 { /* var185 = array_instance Array[Object] */
4492 var186 = 4;
4493 var187 = NEW_array__NativeArray(var186, &type_array__NativeArraykernel__Object);
4494 ((struct instance_array__NativeArray*)var187)->values[0] = (val*) var_res;
4495 ((struct instance_array__NativeArray*)var187)->values[1] = (val*) var173;
4496 ((struct instance_array__NativeArray*)var187)->values[2] = (val*) var179;
4497 ((struct instance_array__NativeArray*)var187)->values[3] = (val*) var181;
4498 ((void (*)(val*, val*, long))(var185->class->vft[COLOR_array__Array__with_native]))(var185, var187, var186) /* with_native on <var185:Array[Object]>*/;
4499 }
4500 var188 = ((val* (*)(val*))(var185->class->vft[COLOR_string__Object__to_s]))(var185) /* to_s on <var185:Array[Object]>*/;
4501 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
4502 }
4503 }
4504 } else {
4505 var189 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4506 if (varonce190) {
4507 var191 = varonce190;
4508 } else {
4509 var192 = "!=";
4510 var193 = 2;
4511 var194 = string__NativeString__to_s_with_length(var192, var193);
4512 var191 = var194;
4513 varonce190 = var191;
4514 }
4515 var195 = ((short int (*)(val*, val*))(var189->class->vft[COLOR_kernel__Object___61d_61d]))(var189, var191) /* == on <var189:String>*/;
4516 if (var195){
4517 var196 = NULL;
4518 if (var_res == NULL) {
4519 var197 = 0; /* is null */
4520 } else {
4521 var197 = 1; /* arg is null and recv is not */
4522 }
4523 if (!var197) {
4524 fprintf(stderr, "Runtime error: %s", "Assert failed");
4525 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 376);
4526 show_backtrace(1);
4527 }
4528 var198 = 1;
4529 var199 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var198) /* [] on <var_args:Array[RuntimeVariable]>*/;
4530 var200 = ((val* (*)(val*))(var199->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var199) /* mcasttype on <var199:nullable Object(RuntimeVariable)>*/;
4531 /* <var200:MType> isa MNullableType */
4532 cltype202 = type_model__MNullableType.color;
4533 idtype203 = type_model__MNullableType.id;
4534 if(cltype202 >= var200->type->table_size) {
4535 var201 = 0;
4536 } else {
4537 var201 = var200->type->type_table[cltype202] == idtype203;
4538 }
4539 if (var201){
4540 if (varonce204) {
4541 var205 = varonce204;
4542 } else {
4543 var206 = " = (";
4544 var207 = 4;
4545 var208 = string__NativeString__to_s_with_length(var206, var207);
4546 var205 = var208;
4547 varonce204 = var205;
4548 }
4549 var209 = 1;
4550 var210 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var209) /* [] on <var_args:Array[RuntimeVariable]>*/;
4551 if (varonce211) {
4552 var212 = varonce211;
4553 } else {
4554 var213 = " != NULL);";
4555 var214 = 10;
4556 var215 = string__NativeString__to_s_with_length(var213, var214);
4557 var212 = var215;
4558 varonce211 = var212;
4559 }
4560 var216 = NEW_array__Array(&type_array__Arraykernel__Object);
4561 { /* var216 = array_instance Array[Object] */
4562 var217 = 4;
4563 var218 = NEW_array__NativeArray(var217, &type_array__NativeArraykernel__Object);
4564 ((struct instance_array__NativeArray*)var218)->values[0] = (val*) var_res;
4565 ((struct instance_array__NativeArray*)var218)->values[1] = (val*) var205;
4566 ((struct instance_array__NativeArray*)var218)->values[2] = (val*) var210;
4567 ((struct instance_array__NativeArray*)var218)->values[3] = (val*) var212;
4568 ((void (*)(val*, val*, long))(var216->class->vft[COLOR_array__Array__with_native]))(var216, var218, var217) /* with_native on <var216:Array[Object]>*/;
4569 }
4570 var219 = ((val* (*)(val*))(var216->class->vft[COLOR_string__Object__to_s]))(var216) /* to_s on <var216:Array[Object]>*/;
4571 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var219) /* add on <self:GlobalCompilerVisitor>*/;
4572 } else {
4573 var220 = 1;
4574 var221 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var220) /* [] on <var_args:Array[RuntimeVariable]>*/;
4575 var222 = ((val* (*)(val*))(var221->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var221) /* mcasttype on <var221:nullable Object(RuntimeVariable)>*/;
4576 /* <var222:MType> isa MNullType */
4577 cltype224 = type_model__MNullType.color;
4578 idtype225 = type_model__MNullType.id;
4579 if(cltype224 >= var222->type->table_size) {
4580 var223 = 0;
4581 } else {
4582 var223 = var222->type->type_table[cltype224] == idtype225;
4583 }
4584 if (var223){
4585 if (varonce226) {
4586 var227 = varonce226;
4587 } else {
4588 var228 = " = 0; /* is null */";
4589 var229 = 19;
4590 var230 = string__NativeString__to_s_with_length(var228, var229);
4591 var227 = var230;
4592 varonce226 = var227;
4593 }
4594 var231 = NEW_array__Array(&type_array__Arraykernel__Object);
4595 { /* var231 = array_instance Array[Object] */
4596 var232 = 2;
4597 var233 = NEW_array__NativeArray(var232, &type_array__NativeArraykernel__Object);
4598 ((struct instance_array__NativeArray*)var233)->values[0] = (val*) var_res;
4599 ((struct instance_array__NativeArray*)var233)->values[1] = (val*) var227;
4600 ((void (*)(val*, val*, long))(var231->class->vft[COLOR_array__Array__with_native]))(var231, var233, var232) /* with_native on <var231:Array[Object]>*/;
4601 }
4602 var234 = ((val* (*)(val*))(var231->class->vft[COLOR_string__Object__to_s]))(var231) /* to_s on <var231:Array[Object]>*/;
4603 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var234) /* add on <self:GlobalCompilerVisitor>*/;
4604 } else {
4605 if (varonce235) {
4606 var236 = varonce235;
4607 } else {
4608 var237 = " = 1; /* ";
4609 var238 = 9;
4610 var239 = string__NativeString__to_s_with_length(var237, var238);
4611 var236 = var239;
4612 varonce235 = var236;
4613 }
4614 var240 = 1;
4615 var241 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var240) /* [] on <var_args:Array[RuntimeVariable]>*/;
4616 var242 = ((val* (*)(val*))(var241->class->vft[COLOR_string__Object__inspect]))(var241) /* inspect on <var241:nullable Object(RuntimeVariable)>*/;
4617 if (varonce243) {
4618 var244 = varonce243;
4619 } else {
4620 var245 = " cannot be null */";
4621 var246 = 18;
4622 var247 = string__NativeString__to_s_with_length(var245, var246);
4623 var244 = var247;
4624 varonce243 = var244;
4625 }
4626 var248 = NEW_array__Array(&type_array__Arraykernel__Object);
4627 { /* var248 = array_instance Array[Object] */
4628 var249 = 4;
4629 var250 = NEW_array__NativeArray(var249, &type_array__NativeArraykernel__Object);
4630 ((struct instance_array__NativeArray*)var250)->values[0] = (val*) var_res;
4631 ((struct instance_array__NativeArray*)var250)->values[1] = (val*) var236;
4632 ((struct instance_array__NativeArray*)var250)->values[2] = (val*) var242;
4633 ((struct instance_array__NativeArray*)var250)->values[3] = (val*) var244;
4634 ((void (*)(val*, val*, long))(var248->class->vft[COLOR_array__Array__with_native]))(var248, var250, var249) /* with_native on <var248:Array[Object]>*/;
4635 }
4636 var251 = ((val* (*)(val*))(var248->class->vft[COLOR_string__Object__to_s]))(var248) /* to_s on <var248:Array[Object]>*/;
4637 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var251) /* add on <self:GlobalCompilerVisitor>*/;
4638 }
4639 }
4640 } else {
4641 if (varonce252) {
4642 var253 = varonce252;
4643 } else {
4644 var254 = "Receiver is null";
4645 var255 = 16;
4646 var256 = string__NativeString__to_s_with_length(var254, var255);
4647 var253 = var256;
4648 varonce252 = var253;
4649 }
4650 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var253) /* add_abort on <self:GlobalCompilerVisitor>*/;
4651 }
4652 }
4653 if (varonce257) {
4654 var258 = varonce257;
4655 } else {
4656 var259 = "} else";
4657 var260 = 6;
4658 var261 = string__NativeString__to_s_with_length(var259, var260);
4659 var258 = var261;
4660 varonce257 = var258;
4661 }
4662 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var258) /* add on <self:GlobalCompilerVisitor>*/;
4663 } else {
4664 }
4665 var262 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
4666 if (var262){
4667 if (varonce263) {
4668 var264 = varonce263;
4669 } else {
4670 var265 = "{";
4671 var266 = 1;
4672 var267 = string__NativeString__to_s_with_length(var265, var266);
4673 var264 = var267;
4674 varonce263 = var264;
4675 }
4676 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var264) /* add on <self:GlobalCompilerVisitor>*/;
4677 if (varonce268) {
4678 var269 = varonce268;
4679 } else {
4680 var270 = "/*BUG: no live types for ";
4681 var271 = 25;
4682 var272 = string__NativeString__to_s_with_length(var270, var271);
4683 var269 = var272;
4684 varonce268 = var269;
4685 }
4686 var273 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4687 var274 = ((val* (*)(val*))(var273->class->vft[COLOR_string__Object__inspect]))(var273) /* inspect on <var273:nullable Object(RuntimeVariable)>*/;
4688 if (varonce275) {
4689 var276 = varonce275;
4690 } else {
4691 var277 = " . ";
4692 var278 = 3;
4693 var279 = string__NativeString__to_s_with_length(var277, var278);
4694 var276 = var279;
4695 varonce275 = var276;
4696 }
4697 if (varonce280) {
4698 var281 = varonce280;
4699 } else {
4700 var282 = "*/";
4701 var283 = 2;
4702 var284 = string__NativeString__to_s_with_length(var282, var283);
4703 var281 = var284;
4704 varonce280 = var281;
4705 }
4706 var285 = NEW_array__Array(&type_array__Arraykernel__Object);
4707 { /* var285 = array_instance Array[Object] */
4708 var286 = 5;
4709 var287 = NEW_array__NativeArray(var286, &type_array__NativeArraykernel__Object);
4710 ((struct instance_array__NativeArray*)var287)->values[0] = (val*) var269;
4711 ((struct instance_array__NativeArray*)var287)->values[1] = (val*) var274;
4712 ((struct instance_array__NativeArray*)var287)->values[2] = (val*) var276;
4713 ((struct instance_array__NativeArray*)var287)->values[3] = (val*) var_m;
4714 ((struct instance_array__NativeArray*)var287)->values[4] = (val*) var281;
4715 ((void (*)(val*, val*, long))(var285->class->vft[COLOR_array__Array__with_native]))(var285, var287, var286) /* with_native on <var285:Array[Object]>*/;
4716 }
4717 var288 = ((val* (*)(val*))(var285->class->vft[COLOR_string__Object__to_s]))(var285) /* to_s on <var285:Array[Object]>*/;
4718 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var288) /* add on <self:GlobalCompilerVisitor>*/;
4719 var289 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4720 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var289) /* bugtype on <self:GlobalCompilerVisitor>*/;
4721 if (varonce290) {
4722 var291 = varonce290;
4723 } else {
4724 var292 = "}";
4725 var293 = 1;
4726 var294 = string__NativeString__to_s_with_length(var292, var293);
4727 var291 = var294;
4728 varonce290 = var291;
4729 }
4730 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var291) /* add on <self:GlobalCompilerVisitor>*/;
4731 var = var_res;
4732 goto RET_LABEL;
4733 } else {
4734 }
4735 if (varonce295) {
4736 var296 = varonce295;
4737 } else {
4738 var297 = "switch(";
4739 var298 = 7;
4740 var299 = string__NativeString__to_s_with_length(var297, var298);
4741 var296 = var299;
4742 varonce295 = var296;
4743 }
4744 var300 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4745 if (varonce301) {
4746 var302 = varonce301;
4747 } else {
4748 var303 = "->classid) {";
4749 var304 = 12;
4750 var305 = string__NativeString__to_s_with_length(var303, var304);
4751 var302 = var305;
4752 varonce301 = var302;
4753 }
4754 var306 = NEW_array__Array(&type_array__Arraykernel__Object);
4755 { /* var306 = array_instance Array[Object] */
4756 var307 = 3;
4757 var308 = NEW_array__NativeArray(var307, &type_array__NativeArraykernel__Object);
4758 ((struct instance_array__NativeArray*)var308)->values[0] = (val*) var296;
4759 ((struct instance_array__NativeArray*)var308)->values[1] = (val*) var300;
4760 ((struct instance_array__NativeArray*)var308)->values[2] = (val*) var302;
4761 ((void (*)(val*, val*, long))(var306->class->vft[COLOR_array__Array__with_native]))(var306, var308, var307) /* with_native on <var306:Array[Object]>*/;
4762 }
4763 var309 = ((val* (*)(val*))(var306->class->vft[COLOR_string__Object__to_s]))(var306) /* to_s on <var306:Array[Object]>*/;
4764 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var309) /* add on <self:GlobalCompilerVisitor>*/;
4765 var310 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
4766 var_last = var310;
4767 var311 = NULL;
4768 var_defaultpropdef = var311;
4769 var312 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
4770 for(;;) {
4771 var313 = ((short int (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var312) /* is_ok on <var312:Iterator[nullable Object]>*/;
4772 if(!var313) break;
4773 var314 = ((val* (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__item]))(var312) /* item on <var312:Iterator[nullable Object]>*/;
4774 var_t = var314;
4775 var315 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4776 var316 = ((val* (*)(val*))(var315->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var315) /* mainmodule on <var315:AbstractCompiler(GlobalCompiler)>*/;
4777 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>*/;
4778 var_propdef318 = var317;
4779 var320 = ((val* (*)(val*))(var_propdef318->class->vft[COLOR_model__MPropDef__mclassdef]))(var_propdef318) /* mclassdef on <var_propdef318:MMethodDef>*/;
4780 var321 = ((val* (*)(val*))(var320->class->vft[COLOR_model__MClassDef__mclass]))(var320) /* mclass on <var320:MClassDef>*/;
4781 var322 = ((val* (*)(val*))(var321->class->vft[COLOR_model__MClass__name]))(var321) /* name on <var321:MClass>*/;
4782 if (varonce323) {
4783 var324 = varonce323;
4784 } else {
4785 var325 = "Object";
4786 var326 = 6;
4787 var327 = string__NativeString__to_s_with_length(var325, var326);
4788 var324 = var327;
4789 varonce323 = var324;
4790 }
4791 var328 = ((short int (*)(val*, val*))(var322->class->vft[COLOR_kernel__Object___61d_61d]))(var322, var324) /* == on <var322:String>*/;
4792 var_329 = var328;
4793 if (var328){
4794 var330 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MClassType>*/;
4795 if (varonce331) {
4796 var332 = varonce331;
4797 } else {
4798 var333 = "val*";
4799 var334 = 4;
4800 var335 = string__NativeString__to_s_with_length(var333, var334);
4801 var332 = var335;
4802 varonce331 = var332;
4803 }
4804 var336 = ((short int (*)(val*, val*))(var330->class->vft[COLOR_kernel__Object___61d_61d]))(var330, var332) /* == on <var330:String>*/;
4805 var319 = var336;
4806 } else {
4807 var319 = var_329;
4808 }
4809 if (var319){
4810 var_defaultpropdef = var_propdef318;
4811 goto CONTINUE_label;
4812 } else {
4813 }
4814 var339 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4815 var340 = ((short int (*)(val*))(var339->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var339) /* hardening on <var339:AbstractCompiler(GlobalCompiler)>*/;
4816 var341 = !var340;
4817 var_342 = var341;
4818 if (var341){
4819 var343 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
4820 var338 = var343;
4821 } else {
4822 var338 = var_342;
4823 }
4824 var_344 = var338;
4825 if (var338){
4826 var345 = NULL;
4827 if (var_defaultpropdef == NULL) {
4828 var346 = 1; /* is null */
4829 } else {
4830 var346 = 0; /* arg is null but recv is not */
4831 }
4832 var337 = var346;
4833 } else {
4834 var337 = var_344;
4835 }
4836 if (var337){
4837 if (varonce347) {
4838 var348 = varonce347;
4839 } else {
4840 var349 = "default: /* test ";
4841 var350 = 17;
4842 var351 = string__NativeString__to_s_with_length(var349, var350);
4843 var348 = var351;
4844 varonce347 = var348;
4845 }
4846 if (varonce352) {
4847 var353 = varonce352;
4848 } else {
4849 var354 = " */";
4850 var355 = 3;
4851 var356 = string__NativeString__to_s_with_length(var354, var355);
4852 var353 = var356;
4853 varonce352 = var353;
4854 }
4855 var357 = NEW_array__Array(&type_array__Arraykernel__Object);
4856 { /* var357 = array_instance Array[Object] */
4857 var358 = 3;
4858 var359 = NEW_array__NativeArray(var358, &type_array__NativeArraykernel__Object);
4859 ((struct instance_array__NativeArray*)var359)->values[0] = (val*) var348;
4860 ((struct instance_array__NativeArray*)var359)->values[1] = (val*) var_t;
4861 ((struct instance_array__NativeArray*)var359)->values[2] = (val*) var353;
4862 ((void (*)(val*, val*, long))(var357->class->vft[COLOR_array__Array__with_native]))(var357, var359, var358) /* with_native on <var357:Array[Object]>*/;
4863 }
4864 var360 = ((val* (*)(val*))(var357->class->vft[COLOR_string__Object__to_s]))(var357) /* to_s on <var357:Array[Object]>*/;
4865 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var360) /* add on <self:GlobalCompilerVisitor>*/;
4866 } else {
4867 if (varonce361) {
4868 var362 = varonce361;
4869 } else {
4870 var363 = "case ";
4871 var364 = 5;
4872 var365 = string__NativeString__to_s_with_length(var363, var364);
4873 var362 = var365;
4874 varonce361 = var362;
4875 }
4876 var366 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4877 var367 = ((val* (*)(val*, val*))(var366->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var366, var_t) /* classid on <var366:AbstractCompiler(GlobalCompiler)>*/;
4878 if (varonce368) {
4879 var369 = varonce368;
4880 } else {
4881 var370 = ": /* test ";
4882 var371 = 10;
4883 var372 = string__NativeString__to_s_with_length(var370, var371);
4884 var369 = var372;
4885 varonce368 = var369;
4886 }
4887 if (varonce373) {
4888 var374 = varonce373;
4889 } else {
4890 var375 = " */";
4891 var376 = 3;
4892 var377 = string__NativeString__to_s_with_length(var375, var376);
4893 var374 = var377;
4894 varonce373 = var374;
4895 }
4896 var378 = NEW_array__Array(&type_array__Arraykernel__Object);
4897 { /* var378 = array_instance Array[Object] */
4898 var379 = 5;
4899 var380 = NEW_array__NativeArray(var379, &type_array__NativeArraykernel__Object);
4900 ((struct instance_array__NativeArray*)var380)->values[0] = (val*) var362;
4901 ((struct instance_array__NativeArray*)var380)->values[1] = (val*) var367;
4902 ((struct instance_array__NativeArray*)var380)->values[2] = (val*) var369;
4903 ((struct instance_array__NativeArray*)var380)->values[3] = (val*) var_t;
4904 ((struct instance_array__NativeArray*)var380)->values[4] = (val*) var374;
4905 ((void (*)(val*, val*, long))(var378->class->vft[COLOR_array__Array__with_native]))(var378, var380, var379) /* with_native on <var378:Array[Object]>*/;
4906 }
4907 var381 = ((val* (*)(val*))(var378->class->vft[COLOR_string__Object__to_s]))(var378) /* to_s on <var378:Array[Object]>*/;
4908 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var381) /* add on <self:GlobalCompilerVisitor>*/;
4909 }
4910 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>*/;
4911 var_res2383 = var382;
4912 var384 = NULL;
4913 if (var_res == NULL) {
4914 var385 = 0; /* is null */
4915 } else {
4916 var385 = 1; /* arg is null and recv is not */
4917 }
4918 if (var385){
4919 if (var_res2383 == NULL) {
4920 fprintf(stderr, "Runtime error: %s", "Cast failed");
4921 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 412);
4922 show_backtrace(1);
4923 }
4924 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2383) /* assign on <self:GlobalCompilerVisitor>*/;
4925 } else {
4926 }
4927 if (varonce386) {
4928 var387 = varonce386;
4929 } else {
4930 var388 = "break;";
4931 var389 = 6;
4932 var390 = string__NativeString__to_s_with_length(var388, var389);
4933 var387 = var390;
4934 varonce386 = var387;
4935 }
4936 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var387) /* add on <self:GlobalCompilerVisitor>*/;
4937 CONTINUE_label: (void)0;
4938 ((void (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__next]))(var312) /* next on <var312:Iterator[nullable Object]>*/;
4939 }
4940 BREAK_label: (void)0;
4941 var391 = NULL;
4942 if (var_defaultpropdef == NULL) {
4943 var392 = 0; /* is null */
4944 } else {
4945 var392 = 1; /* arg is null and recv is not */
4946 }
4947 if (var392){
4948 if (varonce393) {
4949 var394 = varonce393;
4950 } else {
4951 var395 = "default: /* default is Object */";
4952 var396 = 32;
4953 var397 = string__NativeString__to_s_with_length(var395, var396);
4954 var394 = var397;
4955 varonce393 = var394;
4956 }
4957 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var394) /* add on <self:GlobalCompilerVisitor>*/;
4958 var398 = ((val* (*)(val*))(var_defaultpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_defaultpropdef) /* mclassdef on <var_defaultpropdef:nullable MMethodDef(MMethodDef)>*/;
4959 var399 = ((val* (*)(val*))(var398->class->vft[COLOR_model__MClassDef__bound_mtype]))(var398) /* bound_mtype on <var398:MClassDef>*/;
4960 var400 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__call]))(self, var_defaultpropdef, var399, var_args) /* call on <self:GlobalCompilerVisitor>*/;
4961 var_res2401 = var400;
4962 var402 = NULL;
4963 if (var_res == NULL) {
4964 var403 = 0; /* is null */
4965 } else {
4966 var403 = 1; /* arg is null and recv is not */
4967 }
4968 if (var403){
4969 if (var_res2401 == NULL) {
4970 fprintf(stderr, "Runtime error: %s", "Cast failed");
4971 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 418);
4972 show_backtrace(1);
4973 }
4974 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2401) /* assign on <self:GlobalCompilerVisitor>*/;
4975 } else {
4976 }
4977 } else {
4978 var404 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4979 var405 = ((short int (*)(val*))(var404->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var404) /* hardening on <var404:AbstractCompiler(GlobalCompiler)>*/;
4980 if (var405){
4981 if (varonce406) {
4982 var407 = varonce406;
4983 } else {
4984 var408 = "default: /* bug */";
4985 var409 = 18;
4986 var410 = string__NativeString__to_s_with_length(var408, var409);
4987 var407 = var410;
4988 varonce406 = var407;
4989 }
4990 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var407) /* add on <self:GlobalCompilerVisitor>*/;
4991 var411 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4992 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var411) /* bugtype on <self:GlobalCompilerVisitor>*/;
4993 } else {
4994 }
4995 }
4996 if (varonce412) {
4997 var413 = varonce412;
4998 } else {
4999 var414 = "}";
5000 var415 = 1;
5001 var416 = string__NativeString__to_s_with_length(var414, var415);
5002 var413 = var416;
5003 varonce412 = var413;
5004 }
5005 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var413) /* add on <self:GlobalCompilerVisitor>*/;
5006 var = var_res;
5007 goto RET_LABEL;
5008 RET_LABEL:;
5009 return var;
5010 }
5011 /* method global_compiler#GlobalCompilerVisitor#send for (self: Object, MMethod, Array[RuntimeVariable]): nullable RuntimeVariable */
5012 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__send(val* self, val* p0, val* p1) {
5013 val* var /* : nullable RuntimeVariable */;
5014 val* var1 /* : nullable RuntimeVariable */;
5015 var1 = global_compiler__GlobalCompilerVisitor__send(self, p0, p1);
5016 var = var1;
5017 RET_LABEL:;
5018 return var;
5019 }
5020 /* method global_compiler#GlobalCompilerVisitor#check_valid_reciever for (self: GlobalCompilerVisitor, MClassType) */
5021 void global_compiler__GlobalCompilerVisitor__check_valid_reciever(val* self, val* p0) {
5022 val* var_recvtype /* var recvtype: MClassType */;
5023 short int var /* : Bool */;
5024 val* var1 /* : AbstractCompiler */;
5025 val* var2 /* : RapidTypeAnalysis */;
5026 val* var3 /* : HashSet[MClassType] */;
5027 short int var4 /* : Bool */;
5028 short int var_ /* var : Bool */;
5029 val* var5 /* : MClass */;
5030 val* var6 /* : String */;
5031 static val* varonce;
5032 val* var7 /* : String */;
5033 char* var8 /* : NativeString */;
5034 long var9 /* : Int */;
5035 val* var10 /* : String */;
5036 short int var11 /* : Bool */;
5037 static val* varonce12;
5038 val* var13 /* : String */;
5039 char* var14 /* : NativeString */;
5040 long var15 /* : Int */;
5041 val* var16 /* : String */;
5042 val* var17 /* : Array[Object] */;
5043 long var18 /* : Int */;
5044 val* var19 /* : NativeArray[Object] */;
5045 val* var20 /* : String */;
5046 var_recvtype = p0;
5047 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5048 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var1) /* runtime_type_analysis on <var1:AbstractCompiler(GlobalCompiler)>*/;
5049 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var2) /* live_types on <var2:RapidTypeAnalysis>*/;
5050 var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_recvtype) /* has on <var3:HashSet[MClassType]>*/;
5051 var_ = var4;
5052 if (var4){
5053 var = var_;
5054 } else {
5055 var5 = ((val* (*)(val*))(var_recvtype->class->vft[COLOR_model__MClassType__mclass]))(var_recvtype) /* mclass on <var_recvtype:MClassType>*/;
5056 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MClass__name]))(var5) /* name on <var5:MClass>*/;
5057 if (varonce) {
5058 var7 = varonce;
5059 } else {
5060 var8 = "Object";
5061 var9 = 6;
5062 var10 = string__NativeString__to_s_with_length(var8, var9);
5063 var7 = var10;
5064 varonce = var7;
5065 }
5066 var11 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_kernel__Object___61d_61d]))(var6, var7) /* == on <var6:String>*/;
5067 var = var11;
5068 }
5069 if (var){
5070 goto RET_LABEL;
5071 } else {
5072 }
5073 if (varonce12) {
5074 var13 = varonce12;
5075 } else {
5076 var14 = " is not a live type";
5077 var15 = 19;
5078 var16 = string__NativeString__to_s_with_length(var14, var15);
5079 var13 = var16;
5080 varonce12 = var13;
5081 }
5082 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
5083 { /* var17 = array_instance Array[Object] */
5084 var18 = 2;
5085 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
5086 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var_recvtype;
5087 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var13;
5088 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
5089 }
5090 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
5091 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var20) /* print on <self:GlobalCompilerVisitor>*/;
5092 fprintf(stderr, "Runtime error: %s", "Aborted");
5093 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 431);
5094 show_backtrace(1);
5095 RET_LABEL:;
5096 }
5097 /* method global_compiler#GlobalCompilerVisitor#check_valid_reciever for (self: Object, MClassType) */
5098 void VIRTUAL_global_compiler__GlobalCompilerVisitor__check_valid_reciever(val* self, val* p0) {
5099 global_compiler__GlobalCompilerVisitor__check_valid_reciever(self, p0);
5100 RET_LABEL:;
5101 }
5102 /* method global_compiler#GlobalCompilerVisitor#get_recvtype for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): MClassType */
5103 val* global_compiler__GlobalCompilerVisitor__get_recvtype(val* self, val* p0, val* p1, val* p2) {
5104 val* var /* : MClassType */;
5105 val* var_m /* var m: MMethodDef */;
5106 val* var_recvtype /* var recvtype: MClassType */;
5107 val* var_args /* var args: Array[RuntimeVariable] */;
5108 short int var1 /* : Bool */;
5109 val* var2 /* : MClassDef */;
5110 val* var3 /* : MClass */;
5111 val* var4 /* : String */;
5112 static val* varonce;
5113 val* var5 /* : String */;
5114 char* var6 /* : NativeString */;
5115 long var7 /* : Int */;
5116 val* var8 /* : String */;
5117 short int var9 /* : Bool */;
5118 short int var_ /* var : Bool */;
5119 val* var10 /* : String */;
5120 static val* varonce11;
5121 val* var12 /* : String */;
5122 char* var13 /* : NativeString */;
5123 long var14 /* : Int */;
5124 val* var15 /* : String */;
5125 short int var16 /* : Bool */;
5126 val* var17 /* : MClassDef */;
5127 val* var18 /* : MClassType */;
5128 var_m = p0;
5129 var_recvtype = p1;
5130 var_args = p2;
5131 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__check_valid_reciever]))(self, var_recvtype) /* check_valid_reciever on <self:GlobalCompilerVisitor>*/;
5132 var2 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
5133 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__MClassDef__mclass]))(var2) /* mclass on <var2:MClassDef>*/;
5134 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MClass__name]))(var3) /* name on <var3:MClass>*/;
5135 if (varonce) {
5136 var5 = varonce;
5137 } else {
5138 var6 = "Object";
5139 var7 = 6;
5140 var8 = string__NativeString__to_s_with_length(var6, var7);
5141 var5 = var8;
5142 varonce = var5;
5143 }
5144 var9 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_kernel__Object___61d_61d]))(var4, var5) /* == on <var4:String>*/;
5145 var_ = var9;
5146 if (var9){
5147 var10 = ((val* (*)(val*))(var_recvtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_recvtype) /* ctype on <var_recvtype:MClassType>*/;
5148 if (varonce11) {
5149 var12 = varonce11;
5150 } else {
5151 var13 = "val*";
5152 var14 = 4;
5153 var15 = string__NativeString__to_s_with_length(var13, var14);
5154 var12 = var15;
5155 varonce11 = var12;
5156 }
5157 var16 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___61d_61d]))(var10, var12) /* == on <var10:String>*/;
5158 var1 = var16;
5159 } else {
5160 var1 = var_;
5161 }
5162 if (var1){
5163 var17 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
5164 var18 = ((val* (*)(val*))(var17->class->vft[COLOR_model__MClassDef__bound_mtype]))(var17) /* bound_mtype on <var17:MClassDef>*/;
5165 var_recvtype = var18;
5166 } else {
5167 }
5168 var = var_recvtype;
5169 goto RET_LABEL;
5170 RET_LABEL:;
5171 return var;
5172 }
5173 /* method global_compiler#GlobalCompilerVisitor#get_recvtype for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): MClassType */
5174 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__get_recvtype(val* self, val* p0, val* p1, val* p2) {
5175 val* var /* : MClassType */;
5176 val* var1 /* : MClassType */;
5177 var1 = global_compiler__GlobalCompilerVisitor__get_recvtype(self, p0, p1, p2);
5178 var = var1;
5179 RET_LABEL:;
5180 return var;
5181 }
5182 /* method global_compiler#GlobalCompilerVisitor#get_recv for (self: GlobalCompilerVisitor, MClassType, Array[RuntimeVariable]): RuntimeVariable */
5183 val* global_compiler__GlobalCompilerVisitor__get_recv(val* self, val* p0, val* p1) {
5184 val* var /* : RuntimeVariable */;
5185 val* var_recvtype /* var recvtype: MClassType */;
5186 val* var_args /* var args: Array[RuntimeVariable] */;
5187 val* var1 /* : nullable Object */;
5188 val* var2 /* : RuntimeVariable */;
5189 val* var3 /* : RuntimeVariable */;
5190 var_recvtype = p0;
5191 var_args = p1;
5192 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5193 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var1, var_recvtype) /* autobox on <self:GlobalCompilerVisitor>*/;
5194 var3 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var2, var_recvtype) /* autoadapt on <self:GlobalCompilerVisitor>*/;
5195 var = var3;
5196 goto RET_LABEL;
5197 RET_LABEL:;
5198 return var;
5199 }
5200 /* method global_compiler#GlobalCompilerVisitor#get_recv for (self: Object, MClassType, Array[RuntimeVariable]): RuntimeVariable */
5201 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__get_recv(val* self, val* p0, val* p1) {
5202 val* var /* : RuntimeVariable */;
5203 val* var1 /* : RuntimeVariable */;
5204 var1 = global_compiler__GlobalCompilerVisitor__get_recv(self, p0, p1);
5205 var = var1;
5206 RET_LABEL:;
5207 return var;
5208 }
5209 /* method global_compiler#GlobalCompilerVisitor#finalize_call for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5210 val* global_compiler__GlobalCompilerVisitor__finalize_call(val* self, val* p0, val* p1, val* p2) {
5211 val* var /* : nullable RuntimeVariable */;
5212 val* var_m /* var m: MMethodDef */;
5213 val* var_recvtype /* var recvtype: MClassType */;
5214 val* var_args /* var args: Array[RuntimeVariable] */;
5215 long var1 /* : Int */;
5216 val* var2 /* : nullable MSignature */;
5217 long var3 /* : Int */;
5218 long var4 /* : Int */;
5219 long var5 /* : Int */;
5220 long var7 /* : Int */;
5221 short int var8 /* : Bool */;
5222 short int var10 /* : Bool */;
5223 static val* varonce;
5224 val* var11 /* : String */;
5225 char* var12 /* : NativeString */;
5226 long var13 /* : Int */;
5227 val* var14 /* : String */;
5228 static val* varonce15;
5229 val* var16 /* : String */;
5230 char* var17 /* : NativeString */;
5231 long var18 /* : Int */;
5232 val* var19 /* : String */;
5233 long var20 /* : Int */;
5234 static val* varonce21;
5235 val* var22 /* : String */;
5236 char* var23 /* : NativeString */;
5237 long var24 /* : Int */;
5238 val* var25 /* : String */;
5239 val* var26 /* : Array[Object] */;
5240 long var27 /* : Int */;
5241 val* var28 /* : NativeArray[Object] */;
5242 val* var29 /* : Object */;
5243 val* var30 /* : String */;
5244 val* var31 /* : CustomizedRuntimeFunction */;
5245 val* var_rm /* var rm: CustomizedRuntimeFunction */;
5246 val* var32 /* : nullable RuntimeVariable */;
5247 var_m = p0;
5248 var_recvtype = p1;
5249 var_args = p2;
5250 var1 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5251 var2 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
5252 if (var2 == NULL) {
5253 fprintf(stderr, "Runtime error: %s", "Receiver is null");
5254 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 457);
5255 show_backtrace(1);
5256 } else {
5257 var3 = ((long (*)(val*))(var2->class->vft[COLOR_model__MSignature__arity]))(var2) /* arity on <var2:nullable MSignature>*/;
5258 }
5259 var4 = 1;
5260 { /* Inline kernel#Int#+ (var3,var4) */
5261 var7 = var3 + var4;
5262 var5 = var7;
5263 goto RET_LABEL6;
5264 RET_LABEL6:(void)0;
5265 }
5266 { /* Inline kernel#Int#== (var1,var5) */
5267 var10 = var1 == var5;
5268 var8 = var10;
5269 goto RET_LABEL9;
5270 RET_LABEL9:(void)0;
5271 }
5272 if (!var8) {
5273 if (varonce) {
5274 var11 = varonce;
5275 } else {
5276 var12 = "Invalid arity for ";
5277 var13 = 18;
5278 var14 = string__NativeString__to_s_with_length(var12, var13);
5279 var11 = var14;
5280 varonce = var11;
5281 }
5282 if (varonce15) {
5283 var16 = varonce15;
5284 } else {
5285 var17 = ". ";
5286 var18 = 2;
5287 var19 = string__NativeString__to_s_with_length(var17, var18);
5288 var16 = var19;
5289 varonce15 = var16;
5290 }
5291 var20 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5292 if (varonce21) {
5293 var22 = varonce21;
5294 } else {
5295 var23 = " arguments given.";
5296 var24 = 17;
5297 var25 = string__NativeString__to_s_with_length(var23, var24);
5298 var22 = var25;
5299 varonce21 = var22;
5300 }
5301 var26 = NEW_array__Array(&type_array__Arraykernel__Object);
5302 { /* var26 = array_instance Array[Object] */
5303 var27 = 5;
5304 var28 = NEW_array__NativeArray(var27, &type_array__NativeArraykernel__Object);
5305 ((struct instance_array__NativeArray*)var28)->values[0] = (val*) var11;
5306 ((struct instance_array__NativeArray*)var28)->values[1] = (val*) var_m;
5307 ((struct instance_array__NativeArray*)var28)->values[2] = (val*) var16;
5308 var29 = BOX_kernel__Int(var20); /* autobox from Int to Object */
5309 ((struct instance_array__NativeArray*)var28)->values[3] = (val*) var29;
5310 ((struct instance_array__NativeArray*)var28)->values[4] = (val*) var22;
5311 ((void (*)(val*, val*, long))(var26->class->vft[COLOR_array__Array__with_native]))(var26, var28, var27) /* with_native on <var26:Array[Object]>*/;
5312 }
5313 var30 = ((val* (*)(val*))(var26->class->vft[COLOR_string__Object__to_s]))(var26) /* to_s on <var26:Array[Object]>*/;
5314 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var30) /* debug on <self:GlobalCompilerVisitor>*/;
5315 fprintf(stderr, "Runtime error: %s", "Assert failed");
5316 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 457);
5317 show_backtrace(1);
5318 }
5319 var31 = NEW_global_compiler__CustomizedRuntimeFunction(&type_global_compiler__CustomizedRuntimeFunction);
5320 ((void (*)(val*, val*, val*))(var31->class->vft[COLOR_global_compiler__CustomizedRuntimeFunction__init]))(var31, var_m, var_recvtype) /* init on <var31:CustomizedRuntimeFunction>*/;
5321 var_rm = var31;
5322 var32 = ((val* (*)(val*, val*, val*))(var_rm->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__call]))(var_rm, self, var_args) /* call on <var_rm:CustomizedRuntimeFunction>*/;
5323 var = var32;
5324 goto RET_LABEL;
5325 RET_LABEL:;
5326 return var;
5327 }
5328 /* method global_compiler#GlobalCompilerVisitor#finalize_call for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5329 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__finalize_call(val* self, val* p0, val* p1, val* p2) {
5330 val* var /* : nullable RuntimeVariable */;
5331 val* var1 /* : nullable RuntimeVariable */;
5332 var1 = global_compiler__GlobalCompilerVisitor__finalize_call(self, p0, p1, p2);
5333 var = var1;
5334 RET_LABEL:;
5335 return var;
5336 }
5337 /* method global_compiler#GlobalCompilerVisitor#call for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5338 val* global_compiler__GlobalCompilerVisitor__call(val* self, val* p0, val* p1, val* p2) {
5339 val* var /* : nullable RuntimeVariable */;
5340 val* var_m /* var m: MMethodDef */;
5341 val* var_recvtype /* var recvtype: MClassType */;
5342 val* var_args /* var args: Array[RuntimeVariable] */;
5343 val* var1 /* : MClassType */;
5344 val* var_recv_type /* var recv_type: MClassType */;
5345 val* var2 /* : RuntimeVariable */;
5346 val* var_recv /* var recv: RuntimeVariable */;
5347 val* var3 /* : Array[nullable Object] */;
5348 val* var_new_args /* var new_args: Array[RuntimeVariable] */;
5349 val* var4 /* : nullable MSignature */;
5350 val* var5 /* : nullable RuntimeVariable */;
5351 var_m = p0;
5352 var_recvtype = p1;
5353 var_args = p2;
5354 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>*/;
5355 var_recv_type = var1;
5356 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>*/;
5357 var_recv = var2;
5358 var3 = ((val* (*)(val*))(var_args->class->vft[COLOR_array__Collection__to_a]))(var_args) /* to_a on <var_args:Array[RuntimeVariable]>*/;
5359 var_new_args = var3;
5360 var4 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
5361 if (var4 == NULL) {
5362 fprintf(stderr, "Runtime error: %s", "Cast failed");
5363 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 468);
5364 show_backtrace(1);
5365 }
5366 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__varargize]))(self, var_m, var4, var_new_args) /* varargize on <self:GlobalCompilerVisitor>*/;
5367 ((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]>*/;
5368 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>*/;
5369 var = var5;
5370 goto RET_LABEL;
5371 RET_LABEL:;
5372 return var;
5373 }
5374 /* method global_compiler#GlobalCompilerVisitor#call for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5375 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__call(val* self, val* p0, val* p1, val* p2) {
5376 val* var /* : nullable RuntimeVariable */;
5377 val* var1 /* : nullable RuntimeVariable */;
5378 var1 = global_compiler__GlobalCompilerVisitor__call(self, p0, p1, p2);
5379 var = var1;
5380 RET_LABEL:;
5381 return var;
5382 }
5383 /* method global_compiler#GlobalCompilerVisitor#call_without_varargize for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5384 val* global_compiler__GlobalCompilerVisitor__call_without_varargize(val* self, val* p0, val* p1, val* p2) {
5385 val* var /* : nullable RuntimeVariable */;
5386 val* var_m /* var m: MMethodDef */;
5387 val* var_recvtype /* var recvtype: MClassType */;
5388 val* var_args /* var args: Array[RuntimeVariable] */;
5389 val* var1 /* : MClassType */;
5390 val* var_recv_type /* var recv_type: MClassType */;
5391 val* var2 /* : RuntimeVariable */;
5392 val* var_recv /* var recv: RuntimeVariable */;
5393 val* var3 /* : Array[nullable Object] */;
5394 val* var_new_args /* var new_args: Array[RuntimeVariable] */;
5395 val* var4 /* : nullable RuntimeVariable */;
5396 var_m = p0;
5397 var_recvtype = p1;
5398 var_args = p2;
5399 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>*/;
5400 var_recv_type = var1;
5401 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>*/;
5402 var_recv = var2;
5403 var3 = ((val* (*)(val*))(var_args->class->vft[COLOR_array__Collection__to_a]))(var_args) /* to_a on <var_args:Array[RuntimeVariable]>*/;
5404 var_new_args = var3;
5405 ((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]>*/;
5406 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>*/;
5407 var = var4;
5408 goto RET_LABEL;
5409 RET_LABEL:;
5410 return var;
5411 }
5412 /* method global_compiler#GlobalCompilerVisitor#call_without_varargize for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5413 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__call_without_varargize(val* self, val* p0, val* p1, val* p2) {
5414 val* var /* : nullable RuntimeVariable */;
5415 val* var1 /* : nullable RuntimeVariable */;
5416 var1 = global_compiler__GlobalCompilerVisitor__call_without_varargize(self, p0, p1, p2);
5417 var = var1;
5418 RET_LABEL:;
5419 return var;
5420 }
5421 /* method global_compiler#GlobalCompilerVisitor#supercall for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5422 val* global_compiler__GlobalCompilerVisitor__supercall(val* self, val* p0, val* p1, val* p2) {
5423 val* var /* : nullable RuntimeVariable */;
5424 val* var_m /* var m: MMethodDef */;
5425 val* var_recvtype /* var recvtype: MClassType */;
5426 val* var_args /* var args: Array[RuntimeVariable] */;
5427 val* var1 /* : nullable Object */;
5428 val* var2 /* : Array[MClassType] */;
5429 val* var_types /* var types: Array[MClassType] */;
5430 val* var3 /* : MProperty */;
5431 val* var4 /* : MPropDef */;
5432 val* var5 /* : nullable MSignature */;
5433 val* var6 /* : nullable MType */;
5434 val* var_ret /* var ret: nullable MType */;
5435 val* var7 /* : null */;
5436 short int var8 /* : Bool */;
5437 val* var9 /* : null */;
5438 val* var_res /* var res: nullable RuntimeVariable */;
5439 val* var10 /* : nullable Object */;
5440 val* var11 /* : MType */;
5441 val* var12 /* : RuntimeVariable */;
5442 static val* varonce;
5443 val* var13 /* : String */;
5444 char* var14 /* : NativeString */;
5445 long var15 /* : Int */;
5446 val* var16 /* : String */;
5447 static val* varonce17;
5448 val* var18 /* : String */;
5449 char* var19 /* : NativeString */;
5450 long var20 /* : Int */;
5451 val* var21 /* : String */;
5452 val* var22 /* : nullable Object */;
5453 val* var23 /* : String */;
5454 static val* varonce24;
5455 val* var25 /* : String */;
5456 char* var26 /* : NativeString */;
5457 long var27 /* : Int */;
5458 val* var28 /* : String */;
5459 val* var29 /* : Array[Object] */;
5460 long var30 /* : Int */;
5461 val* var31 /* : NativeArray[Object] */;
5462 val* var32 /* : String */;
5463 val* var33 /* : nullable Object */;
5464 val* var34 /* : MType */;
5465 val* var35 /* : String */;
5466 static val* varonce36;
5467 val* var37 /* : String */;
5468 char* var38 /* : NativeString */;
5469 long var39 /* : Int */;
5470 val* var40 /* : String */;
5471 short int var41 /* : Bool */;
5472 val* var42 /* : nullable Object */;
5473 val* var43 /* : MType */;
5474 short int var44 /* : Bool */;
5475 int cltype;
5476 int idtype;
5477 const char* var_class_name;
5478 val* var_mclasstype /* var mclasstype: MClassType */;
5479 val* var45 /* : AbstractCompiler */;
5480 val* var46 /* : RapidTypeAnalysis */;
5481 val* var47 /* : HashSet[MClassType] */;
5482 short int var48 /* : Bool */;
5483 short int var49 /* : Bool */;
5484 static val* varonce50;
5485 val* var51 /* : String */;
5486 char* var52 /* : NativeString */;
5487 long var53 /* : Int */;
5488 val* var54 /* : String */;
5489 static val* varonce55;
5490 val* var56 /* : String */;
5491 char* var57 /* : NativeString */;
5492 long var58 /* : Int */;
5493 val* var59 /* : String */;
5494 val* var60 /* : Array[Object] */;
5495 long var61 /* : Int */;
5496 val* var62 /* : NativeArray[Object] */;
5497 val* var63 /* : String */;
5498 val* var64 /* : AbstractCompiler */;
5499 val* var65 /* : MModule */;
5500 val* var66 /* : MPropDef */;
5501 val* var_propdef /* var propdef: MMethodDef */;
5502 val* var67 /* : nullable RuntimeVariable */;
5503 val* var_res2 /* var res2: nullable RuntimeVariable */;
5504 val* var68 /* : null */;
5505 short int var69 /* : Bool */;
5506 short int var70 /* : Bool */;
5507 static val* varonce71;
5508 val* var72 /* : String */;
5509 char* var73 /* : NativeString */;
5510 long var74 /* : Int */;
5511 val* var75 /* : String */;
5512 static val* varonce76;
5513 val* var77 /* : String */;
5514 char* var78 /* : NativeString */;
5515 long var79 /* : Int */;
5516 val* var80 /* : String */;
5517 val* var81 /* : nullable Object */;
5518 val* var82 /* : String */;
5519 static val* varonce83;
5520 val* var84 /* : String */;
5521 char* var85 /* : NativeString */;
5522 long var86 /* : Int */;
5523 val* var87 /* : String */;
5524 static val* varonce88;
5525 val* var89 /* : String */;
5526 char* var90 /* : NativeString */;
5527 long var91 /* : Int */;
5528 val* var92 /* : String */;
5529 val* var93 /* : Array[Object] */;
5530 long var94 /* : Int */;
5531 val* var95 /* : NativeArray[Object] */;
5532 val* var96 /* : String */;
5533 val* var97 /* : nullable Object */;
5534 static val* varonce98;
5535 val* var99 /* : String */;
5536 char* var100 /* : NativeString */;
5537 long var101 /* : Int */;
5538 val* var102 /* : String */;
5539 static val* varonce103;
5540 val* var104 /* : String */;
5541 char* var105 /* : NativeString */;
5542 long var106 /* : Int */;
5543 val* var107 /* : String */;
5544 val* var108 /* : nullable Object */;
5545 static val* varonce109;
5546 val* var110 /* : String */;
5547 char* var111 /* : NativeString */;
5548 long var112 /* : Int */;
5549 val* var113 /* : String */;
5550 val* var114 /* : Array[Object] */;
5551 long var115 /* : Int */;
5552 val* var116 /* : NativeArray[Object] */;
5553 val* var117 /* : String */;
5554 val* var118 /* : nullable Object */;
5555 val* var_last /* var last: MClassType */;
5556 val* var119 /* : Iterator[nullable Object] */;
5557 short int var120 /* : Bool */;
5558 val* var121 /* : nullable Object */;
5559 val* var_t /* var t: MClassType */;
5560 val* var122 /* : AbstractCompiler */;
5561 val* var123 /* : MModule */;
5562 val* var124 /* : MPropDef */;
5563 val* var_propdef125 /* var propdef: MMethodDef */;
5564 short int var126 /* : Bool */;
5565 val* var127 /* : AbstractCompiler */;
5566 short int var128 /* : Bool */;
5567 short int var129 /* : Bool */;
5568 short int var_ /* var : Bool */;
5569 short int var130 /* : Bool */;
5570 static val* varonce131;
5571 val* var132 /* : String */;
5572 char* var133 /* : NativeString */;
5573 long var134 /* : Int */;
5574 val* var135 /* : String */;
5575 static val* varonce136;
5576 val* var137 /* : String */;
5577 char* var138 /* : NativeString */;
5578 long var139 /* : Int */;
5579 val* var140 /* : String */;
5580 val* var141 /* : Array[Object] */;
5581 long var142 /* : Int */;
5582 val* var143 /* : NativeArray[Object] */;
5583 val* var144 /* : String */;
5584 static val* varonce145;
5585 val* var146 /* : String */;
5586 char* var147 /* : NativeString */;
5587 long var148 /* : Int */;
5588 val* var149 /* : String */;
5589 val* var150 /* : AbstractCompiler */;
5590 val* var151 /* : String */;
5591 static val* varonce152;
5592 val* var153 /* : String */;
5593 char* var154 /* : NativeString */;
5594 long var155 /* : Int */;
5595 val* var156 /* : String */;
5596 static val* varonce157;
5597 val* var158 /* : String */;
5598 char* var159 /* : NativeString */;
5599 long var160 /* : Int */;
5600 val* var161 /* : String */;
5601 val* var162 /* : Array[Object] */;
5602 long var163 /* : Int */;
5603 val* var164 /* : NativeArray[Object] */;
5604 val* var165 /* : String */;
5605 val* var166 /* : nullable RuntimeVariable */;
5606 val* var_res2167 /* var res2: nullable RuntimeVariable */;
5607 val* var168 /* : null */;
5608 short int var169 /* : Bool */;
5609 static val* varonce170;
5610 val* var171 /* : String */;
5611 char* var172 /* : NativeString */;
5612 long var173 /* : Int */;
5613 val* var174 /* : String */;
5614 val* var175 /* : AbstractCompiler */;
5615 short int var176 /* : Bool */;
5616 static val* varonce177;
5617 val* var178 /* : String */;
5618 char* var179 /* : NativeString */;
5619 long var180 /* : Int */;
5620 val* var181 /* : String */;
5621 val* var182 /* : nullable Object */;
5622 static val* varonce183;
5623 val* var184 /* : String */;
5624 char* var185 /* : NativeString */;
5625 long var186 /* : Int */;
5626 val* var187 /* : String */;
5627 var_m = p0;
5628 var_recvtype = p1;
5629 var_args = p2;
5630 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5631 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var1) /* collect_types on <self:GlobalCompilerVisitor>*/;
5632 var_types = var2;
5633 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mproperty]))(var_m) /* mproperty on <var_m:MMethodDef>*/;
5634 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MProperty__intro]))(var3) /* intro on <var3:MProperty(MMethod)>*/;
5635 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_model__MMethodDef__msignature]))(var4) /* msignature on <var4:MPropDef(MMethodDef)>*/;
5636 if (var5 == NULL) {
5637 fprintf(stderr, "Runtime error: %s", "Receiver is null");
5638 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 489);
5639 show_backtrace(1);
5640 } else {
5641 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MSignature__return_mtype]))(var5) /* return_mtype on <var5:nullable MSignature>*/;
5642 }
5643 var_ret = var6;
5644 var7 = NULL;
5645 if (var_ret == NULL) {
5646 var8 = 1; /* is null */
5647 } else {
5648 var8 = 0; /* arg is null but recv is not */
5649 }
5650 if (var8){
5651 var9 = NULL;
5652 var_res = var9;
5653 } else {
5654 var10 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5655 var11 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var10) /* resolve_for on <self:GlobalCompilerVisitor>*/;
5656 var_ret = var11;
5657 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
5658 var_res = var12;
5659 }
5660 if (varonce) {
5661 var13 = varonce;
5662 } else {
5663 var14 = "/* super ";
5664 var15 = 9;
5665 var16 = string__NativeString__to_s_with_length(var14, var15);
5666 var13 = var16;
5667 varonce = var13;
5668 }
5669 if (varonce17) {
5670 var18 = varonce17;
5671 } else {
5672 var19 = " on ";
5673 var20 = 4;
5674 var21 = string__NativeString__to_s_with_length(var19, var20);
5675 var18 = var21;
5676 varonce17 = var18;
5677 }
5678 var22 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5679 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__inspect]))(var22) /* inspect on <var22:nullable Object(RuntimeVariable)>*/;
5680 if (varonce24) {
5681 var25 = varonce24;
5682 } else {
5683 var26 = " */";
5684 var27 = 3;
5685 var28 = string__NativeString__to_s_with_length(var26, var27);
5686 var25 = var28;
5687 varonce24 = var25;
5688 }
5689 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
5690 { /* var29 = array_instance Array[Object] */
5691 var30 = 5;
5692 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
5693 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var13;
5694 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var_m;
5695 ((struct instance_array__NativeArray*)var31)->values[2] = (val*) var18;
5696 ((struct instance_array__NativeArray*)var31)->values[3] = (val*) var23;
5697 ((struct instance_array__NativeArray*)var31)->values[4] = (val*) var25;
5698 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
5699 }
5700 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
5701 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var32) /* add on <self:GlobalCompilerVisitor>*/;
5702 var33 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5703 var34 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var33) /* mtype on <var33:nullable Object(RuntimeVariable)>*/;
5704 var35 = ((val* (*)(val*))(var34->class->vft[COLOR_abstract_compiler__MType__ctype]))(var34) /* ctype on <var34:MType>*/;
5705 if (varonce36) {
5706 var37 = varonce36;
5707 } else {
5708 var38 = "val*";
5709 var39 = 4;
5710 var40 = string__NativeString__to_s_with_length(var38, var39);
5711 var37 = var40;
5712 varonce36 = var37;
5713 }
5714 var41 = ((short int (*)(val*, val*))(var35->class->vft[COLOR_kernel__Object___33d_61d]))(var35, var37) /* != on <var35:String>*/;
5715 if (var41){
5716 var42 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5717 var43 = ((val* (*)(val*))(var42->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var42) /* mtype on <var42:nullable Object(RuntimeVariable)>*/;
5718 /* <var43:MType> isa MClassType */
5719 cltype = type_model__MClassType.color;
5720 idtype = type_model__MClassType.id;
5721 if(cltype >= var43->type->table_size) {
5722 var44 = 0;
5723 } else {
5724 var44 = var43->type->type_table[cltype] == idtype;
5725 }
5726 if (!var44) {
5727 var_class_name = var43 == NULL ? "null" : var43->type->name;
5728 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
5729 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 499);
5730 show_backtrace(1);
5731 }
5732 var_mclasstype = var43;
5733 var45 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5734 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var45) /* runtime_type_analysis on <var45:AbstractCompiler(GlobalCompiler)>*/;
5735 var47 = ((val* (*)(val*))(var46->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var46) /* live_types on <var46:RapidTypeAnalysis>*/;
5736 var48 = ((short int (*)(val*, val*))(var47->class->vft[COLOR_abstract_collection__Collection__has]))(var47, var_mclasstype) /* has on <var47:HashSet[MClassType]>*/;
5737 var49 = !var48;
5738 if (var49){
5739 if (varonce50) {
5740 var51 = varonce50;
5741 } else {
5742 var52 = "/* skip, no method ";
5743 var53 = 19;
5744 var54 = string__NativeString__to_s_with_length(var52, var53);
5745 var51 = var54;
5746 varonce50 = var51;
5747 }
5748 if (varonce55) {
5749 var56 = varonce55;
5750 } else {
5751 var57 = " */";
5752 var58 = 3;
5753 var59 = string__NativeString__to_s_with_length(var57, var58);
5754 var56 = var59;
5755 varonce55 = var56;
5756 }
5757 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
5758 { /* var60 = array_instance Array[Object] */
5759 var61 = 3;
5760 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
5761 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var51;
5762 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_m;
5763 ((struct instance_array__NativeArray*)var62)->values[2] = (val*) var56;
5764 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
5765 }
5766 var63 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
5767 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var63) /* add on <self:GlobalCompilerVisitor>*/;
5768 var = var_res;
5769 goto RET_LABEL;
5770 } else {
5771 }
5772 var64 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5773 var65 = ((val* (*)(val*))(var64->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var64) /* mainmodule on <var64:AbstractCompiler(GlobalCompiler)>*/;
5774 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>*/;
5775 var_propdef = var66;
5776 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>*/;
5777 var_res2 = var67;
5778 var68 = NULL;
5779 if (var_res == NULL) {
5780 var69 = 0; /* is null */
5781 } else {
5782 var69 = 1; /* arg is null and recv is not */
5783 }
5784 if (var69){
5785 if (var_res2 == NULL) {
5786 fprintf(stderr, "Runtime error: %s", "Cast failed");
5787 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 506);
5788 show_backtrace(1);
5789 }
5790 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
5791 } else {
5792 }
5793 var = var_res;
5794 goto RET_LABEL;
5795 } else {
5796 }
5797 var70 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
5798 if (var70){
5799 if (varonce71) {
5800 var72 = varonce71;
5801 } else {
5802 var73 = "{";
5803 var74 = 1;
5804 var75 = string__NativeString__to_s_with_length(var73, var74);
5805 var72 = var75;
5806 varonce71 = var72;
5807 }
5808 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var72) /* add on <self:GlobalCompilerVisitor>*/;
5809 if (varonce76) {
5810 var77 = varonce76;
5811 } else {
5812 var78 = "/*BUG: no live types for ";
5813 var79 = 25;
5814 var80 = string__NativeString__to_s_with_length(var78, var79);
5815 var77 = var80;
5816 varonce76 = var77;
5817 }
5818 var81 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5819 var82 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__inspect]))(var81) /* inspect on <var81:nullable Object(RuntimeVariable)>*/;
5820 if (varonce83) {
5821 var84 = varonce83;
5822 } else {
5823 var85 = " . ";
5824 var86 = 3;
5825 var87 = string__NativeString__to_s_with_length(var85, var86);
5826 var84 = var87;
5827 varonce83 = var84;
5828 }
5829 if (varonce88) {
5830 var89 = varonce88;
5831 } else {
5832 var90 = "*/";
5833 var91 = 2;
5834 var92 = string__NativeString__to_s_with_length(var90, var91);
5835 var89 = var92;
5836 varonce88 = var89;
5837 }
5838 var93 = NEW_array__Array(&type_array__Arraykernel__Object);
5839 { /* var93 = array_instance Array[Object] */
5840 var94 = 5;
5841 var95 = NEW_array__NativeArray(var94, &type_array__NativeArraykernel__Object);
5842 ((struct instance_array__NativeArray*)var95)->values[0] = (val*) var77;
5843 ((struct instance_array__NativeArray*)var95)->values[1] = (val*) var82;
5844 ((struct instance_array__NativeArray*)var95)->values[2] = (val*) var84;
5845 ((struct instance_array__NativeArray*)var95)->values[3] = (val*) var_m;
5846 ((struct instance_array__NativeArray*)var95)->values[4] = (val*) var89;
5847 ((void (*)(val*, val*, long))(var93->class->vft[COLOR_array__Array__with_native]))(var93, var95, var94) /* with_native on <var93:Array[Object]>*/;
5848 }
5849 var96 = ((val* (*)(val*))(var93->class->vft[COLOR_string__Object__to_s]))(var93) /* to_s on <var93:Array[Object]>*/;
5850 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var96) /* add on <self:GlobalCompilerVisitor>*/;
5851 var97 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5852 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var97) /* bugtype on <self:GlobalCompilerVisitor>*/;
5853 if (varonce98) {
5854 var99 = varonce98;
5855 } else {
5856 var100 = "}";
5857 var101 = 1;
5858 var102 = string__NativeString__to_s_with_length(var100, var101);
5859 var99 = var102;
5860 varonce98 = var99;
5861 }
5862 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var99) /* add on <self:GlobalCompilerVisitor>*/;
5863 var = var_res;
5864 goto RET_LABEL;
5865 } else {
5866 }
5867 if (varonce103) {
5868 var104 = varonce103;
5869 } else {
5870 var105 = "switch(";
5871 var106 = 7;
5872 var107 = string__NativeString__to_s_with_length(var105, var106);
5873 var104 = var107;
5874 varonce103 = var104;
5875 }
5876 var108 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5877 if (varonce109) {
5878 var110 = varonce109;
5879 } else {
5880 var111 = "->classid) {";
5881 var112 = 12;
5882 var113 = string__NativeString__to_s_with_length(var111, var112);
5883 var110 = var113;
5884 varonce109 = var110;
5885 }
5886 var114 = NEW_array__Array(&type_array__Arraykernel__Object);
5887 { /* var114 = array_instance Array[Object] */
5888 var115 = 3;
5889 var116 = NEW_array__NativeArray(var115, &type_array__NativeArraykernel__Object);
5890 ((struct instance_array__NativeArray*)var116)->values[0] = (val*) var104;
5891 ((struct instance_array__NativeArray*)var116)->values[1] = (val*) var108;
5892 ((struct instance_array__NativeArray*)var116)->values[2] = (val*) var110;
5893 ((void (*)(val*, val*, long))(var114->class->vft[COLOR_array__Array__with_native]))(var114, var116, var115) /* with_native on <var114:Array[Object]>*/;
5894 }
5895 var117 = ((val* (*)(val*))(var114->class->vft[COLOR_string__Object__to_s]))(var114) /* to_s on <var114:Array[Object]>*/;
5896 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var117) /* add on <self:GlobalCompilerVisitor>*/;
5897 var118 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
5898 var_last = var118;
5899 var119 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
5900 for(;;) {
5901 var120 = ((short int (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var119) /* is_ok on <var119:Iterator[nullable Object]>*/;
5902 if(!var120) break;
5903 var121 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__item]))(var119) /* item on <var119:Iterator[nullable Object]>*/;
5904 var_t = var121;
5905 var122 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5906 var123 = ((val* (*)(val*))(var122->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var122) /* mainmodule on <var122:AbstractCompiler(GlobalCompiler)>*/;
5907 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>*/;
5908 var_propdef125 = var124;
5909 var127 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5910 var128 = ((short int (*)(val*))(var127->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var127) /* hardening on <var127:AbstractCompiler(GlobalCompiler)>*/;
5911 var129 = !var128;
5912 var_ = var129;
5913 if (var129){
5914 var130 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
5915 var126 = var130;
5916 } else {
5917 var126 = var_;
5918 }
5919 if (var126){
5920 if (varonce131) {
5921 var132 = varonce131;
5922 } else {
5923 var133 = "default: /* test ";
5924 var134 = 17;
5925 var135 = string__NativeString__to_s_with_length(var133, var134);
5926 var132 = var135;
5927 varonce131 = var132;
5928 }
5929 if (varonce136) {
5930 var137 = varonce136;
5931 } else {
5932 var138 = " */";
5933 var139 = 3;
5934 var140 = string__NativeString__to_s_with_length(var138, var139);
5935 var137 = var140;
5936 varonce136 = var137;
5937 }
5938 var141 = NEW_array__Array(&type_array__Arraykernel__Object);
5939 { /* var141 = array_instance Array[Object] */
5940 var142 = 3;
5941 var143 = NEW_array__NativeArray(var142, &type_array__NativeArraykernel__Object);
5942 ((struct instance_array__NativeArray*)var143)->values[0] = (val*) var132;
5943 ((struct instance_array__NativeArray*)var143)->values[1] = (val*) var_t;
5944 ((struct instance_array__NativeArray*)var143)->values[2] = (val*) var137;
5945 ((void (*)(val*, val*, long))(var141->class->vft[COLOR_array__Array__with_native]))(var141, var143, var142) /* with_native on <var141:Array[Object]>*/;
5946 }
5947 var144 = ((val* (*)(val*))(var141->class->vft[COLOR_string__Object__to_s]))(var141) /* to_s on <var141:Array[Object]>*/;
5948 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var144) /* add on <self:GlobalCompilerVisitor>*/;
5949 } else {
5950 if (varonce145) {
5951 var146 = varonce145;
5952 } else {
5953 var147 = "case ";
5954 var148 = 5;
5955 var149 = string__NativeString__to_s_with_length(var147, var148);
5956 var146 = var149;
5957 varonce145 = var146;
5958 }
5959 var150 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5960 var151 = ((val* (*)(val*, val*))(var150->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var150, var_t) /* classid on <var150:AbstractCompiler(GlobalCompiler)>*/;
5961 if (varonce152) {
5962 var153 = varonce152;
5963 } else {
5964 var154 = ": /* test ";
5965 var155 = 10;
5966 var156 = string__NativeString__to_s_with_length(var154, var155);
5967 var153 = var156;
5968 varonce152 = var153;
5969 }
5970 if (varonce157) {
5971 var158 = varonce157;
5972 } else {
5973 var159 = " */";
5974 var160 = 3;
5975 var161 = string__NativeString__to_s_with_length(var159, var160);
5976 var158 = var161;
5977 varonce157 = var158;
5978 }
5979 var162 = NEW_array__Array(&type_array__Arraykernel__Object);
5980 { /* var162 = array_instance Array[Object] */
5981 var163 = 5;
5982 var164 = NEW_array__NativeArray(var163, &type_array__NativeArraykernel__Object);
5983 ((struct instance_array__NativeArray*)var164)->values[0] = (val*) var146;
5984 ((struct instance_array__NativeArray*)var164)->values[1] = (val*) var151;
5985 ((struct instance_array__NativeArray*)var164)->values[2] = (val*) var153;
5986 ((struct instance_array__NativeArray*)var164)->values[3] = (val*) var_t;
5987 ((struct instance_array__NativeArray*)var164)->values[4] = (val*) var158;
5988 ((void (*)(val*, val*, long))(var162->class->vft[COLOR_array__Array__with_native]))(var162, var164, var163) /* with_native on <var162:Array[Object]>*/;
5989 }
5990 var165 = ((val* (*)(val*))(var162->class->vft[COLOR_string__Object__to_s]))(var162) /* to_s on <var162:Array[Object]>*/;
5991 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var165) /* add on <self:GlobalCompilerVisitor>*/;
5992 }
5993 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>*/;
5994 var_res2167 = var166;
5995 var168 = NULL;
5996 if (var_res == NULL) {
5997 var169 = 0; /* is null */
5998 } else {
5999 var169 = 1; /* arg is null and recv is not */
6000 }
6001 if (var169){
6002 if (var_res2167 == NULL) {
6003 fprintf(stderr, "Runtime error: %s", "Cast failed");
6004 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 528);
6005 show_backtrace(1);
6006 }
6007 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2167) /* assign on <self:GlobalCompilerVisitor>*/;
6008 } else {
6009 }
6010 if (varonce170) {
6011 var171 = varonce170;
6012 } else {
6013 var172 = "break;";
6014 var173 = 6;
6015 var174 = string__NativeString__to_s_with_length(var172, var173);
6016 var171 = var174;
6017 varonce170 = var171;
6018 }
6019 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
6020 CONTINUE_label: (void)0;
6021 ((void (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__next]))(var119) /* next on <var119:Iterator[nullable Object]>*/;
6022 }
6023 BREAK_label: (void)0;
6024 var175 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6025 var176 = ((short int (*)(val*))(var175->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var175) /* hardening on <var175:AbstractCompiler(GlobalCompiler)>*/;
6026 if (var176){
6027 if (varonce177) {
6028 var178 = varonce177;
6029 } else {
6030 var179 = "default: /* bug */";
6031 var180 = 18;
6032 var181 = string__NativeString__to_s_with_length(var179, var180);
6033 var178 = var181;
6034 varonce177 = var178;
6035 }
6036 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var178) /* add on <self:GlobalCompilerVisitor>*/;
6037 var182 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6038 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var182) /* bugtype on <self:GlobalCompilerVisitor>*/;
6039 } else {
6040 }
6041 if (varonce183) {
6042 var184 = varonce183;
6043 } else {
6044 var185 = "}";
6045 var186 = 1;
6046 var187 = string__NativeString__to_s_with_length(var185, var186);
6047 var184 = var187;
6048 varonce183 = var184;
6049 }
6050 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var184) /* add on <self:GlobalCompilerVisitor>*/;
6051 var = var_res;
6052 goto RET_LABEL;
6053 RET_LABEL:;
6054 return var;
6055 }
6056 /* method global_compiler#GlobalCompilerVisitor#supercall for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
6057 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__supercall(val* self, val* p0, val* p1, val* p2) {
6058 val* var /* : nullable RuntimeVariable */;
6059 val* var1 /* : nullable RuntimeVariable */;
6060 var1 = global_compiler__GlobalCompilerVisitor__supercall(self, p0, p1, p2);
6061 var = var1;
6062 RET_LABEL:;
6063 return var;
6064 }
6065 /* method global_compiler#GlobalCompilerVisitor#adapt_signature for (self: GlobalCompilerVisitor, MMethodDef, Array[RuntimeVariable]) */
6066 void global_compiler__GlobalCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
6067 val* var_m /* var m: MMethodDef */;
6068 val* var_args /* var args: Array[RuntimeVariable] */;
6069 val* var /* : nullable Object */;
6070 val* var_recv /* var recv: RuntimeVariable */;
6071 val* var1 /* : Range[Int] */;
6072 long var2 /* : Int */;
6073 val* var3 /* : nullable MSignature */;
6074 long var4 /* : Int */;
6075 val* var5 /* : Discrete */;
6076 val* var6 /* : Discrete */;
6077 val* var7 /* : Iterator[nullable Object] */;
6078 short int var8 /* : Bool */;
6079 val* var9 /* : nullable Object */;
6080 long var_i /* var i: Int */;
6081 long var10 /* : Int */;
6082 val* var11 /* : nullable MSignature */;
6083 val* var12 /* : Array[MParameter] */;
6084 val* var13 /* : nullable Object */;
6085 val* var14 /* : MType */;
6086 val* var_t /* var t: MType */;
6087 val* var15 /* : nullable MSignature */;
6088 long var16 /* : Int */;
6089 short int var17 /* : Bool */;
6090 short int var19 /* : Bool */;
6091 long var20 /* : Int */;
6092 long var21 /* : Int */;
6093 long var23 /* : Int */;
6094 val* var24 /* : nullable Object */;
6095 val* var25 /* : MType */;
6096 val* var26 /* : MType */;
6097 long var27 /* : Int */;
6098 long var28 /* : Int */;
6099 long var30 /* : Int */;
6100 long var31 /* : Int */;
6101 long var32 /* : Int */;
6102 long var34 /* : Int */;
6103 val* var35 /* : nullable Object */;
6104 val* var36 /* : RuntimeVariable */;
6105 var_m = p0;
6106 var_args = p1;
6107 var = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6108 var_recv = var;
6109 var1 = NEW_range__Range(&type_range__Rangekernel__Int);
6110 var2 = 0;
6111 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6112 if (var3 == NULL) {
6113 fprintf(stderr, "Runtime error: %s", "Receiver is null");
6114 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 542);
6115 show_backtrace(1);
6116 } else {
6117 var4 = ((long (*)(val*))(var3->class->vft[COLOR_model__MSignature__arity]))(var3) /* arity on <var3:nullable MSignature>*/;
6118 }
6119 var5 = BOX_kernel__Int(var2); /* autobox from Int to Discrete */
6120 var6 = BOX_kernel__Int(var4); /* autobox from Int to Discrete */
6121 ((void (*)(val*, val*, val*))(var1->class->vft[COLOR_range__Range__without_last]))(var1, var5, var6) /* without_last on <var1:Range[Int]>*/;
6122 var7 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__iterator]))(var1) /* iterator on <var1:Range[Int]>*/;
6123 for(;;) {
6124 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
6125 if(!var8) break;
6126 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
6127 var10 = ((struct instance_kernel__Int*)var9)->value; /* autounbox from nullable Object to Int */;
6128 var_i = var10;
6129 var11 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6130 if (var11 == NULL) {
6131 fprintf(stderr, "Runtime error: %s", "Receiver is null");
6132 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 543);
6133 show_backtrace(1);
6134 } else {
6135 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_model__MSignature__mparameters]))(var11) /* mparameters on <var11:nullable MSignature>*/;
6136 }
6137 var13 = ((val* (*)(val*, long))(var12->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var12, var_i) /* [] on <var12:Array[MParameter]>*/;
6138 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_model__MParameter__mtype]))(var13) /* mtype on <var13:nullable Object(MParameter)>*/;
6139 var_t = var14;
6140 var15 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6141 if (var15 == NULL) {
6142 fprintf(stderr, "Runtime error: %s", "Receiver is null");
6143 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 544);
6144 show_backtrace(1);
6145 } else {
6146 var16 = ((long (*)(val*))(var15->class->vft[COLOR_model__MSignature__vararg_rank]))(var15) /* vararg_rank on <var15:nullable MSignature>*/;
6147 }
6148 { /* Inline kernel#Int#== (var_i,var16) */
6149 var19 = var_i == var16;
6150 var17 = var19;
6151 goto RET_LABEL18;
6152 RET_LABEL18:(void)0;
6153 }
6154 if (var17){
6155 var20 = 1;
6156 { /* Inline kernel#Int#+ (var_i,var20) */
6157 var23 = var_i + var20;
6158 var21 = var23;
6159 goto RET_LABEL22;
6160 RET_LABEL22:(void)0;
6161 }
6162 var24 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var21) /* [] on <var_args:Array[RuntimeVariable]>*/;
6163 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var24) /* mtype on <var24:nullable Object(RuntimeVariable)>*/;
6164 var_t = var25;
6165 } else {
6166 }
6167 var26 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_t, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6168 var_t = var26;
6169 var27 = 1;
6170 { /* Inline kernel#Int#+ (var_i,var27) */
6171 var30 = var_i + var27;
6172 var28 = var30;
6173 goto RET_LABEL29;
6174 RET_LABEL29:(void)0;
6175 }
6176 var31 = 1;
6177 { /* Inline kernel#Int#+ (var_i,var31) */
6178 var34 = var_i + var31;
6179 var32 = var34;
6180 goto RET_LABEL33;
6181 RET_LABEL33:(void)0;
6182 }
6183 var35 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var32) /* [] on <var_args:Array[RuntimeVariable]>*/;
6184 var36 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var35, var_t) /* autobox on <self:GlobalCompilerVisitor>*/;
6185 ((void (*)(val*, long, val*))(var_args->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_args, var28, var36) /* []= on <var_args:Array[RuntimeVariable]>*/;
6186 CONTINUE_label: (void)0;
6187 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
6188 }
6189 BREAK_label: (void)0;
6190 RET_LABEL:;
6191 }
6192 /* method global_compiler#GlobalCompilerVisitor#adapt_signature for (self: Object, MMethodDef, Array[RuntimeVariable]) */
6193 void VIRTUAL_global_compiler__GlobalCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
6194 global_compiler__GlobalCompilerVisitor__adapt_signature(self, p0, p1);
6195 RET_LABEL:;
6196 }
6197 /* method global_compiler#GlobalCompilerVisitor#vararg_instance for (self: GlobalCompilerVisitor, MPropDef, RuntimeVariable, Array[RuntimeVariable], MType): RuntimeVariable */
6198 val* global_compiler__GlobalCompilerVisitor__vararg_instance(val* self, val* p0, val* p1, val* p2, val* p3) {
6199 val* var /* : RuntimeVariable */;
6200 val* var_mpropdef /* var mpropdef: MPropDef */;
6201 val* var_recv /* var recv: RuntimeVariable */;
6202 val* var_varargs /* var varargs: Array[RuntimeVariable] */;
6203 val* var_elttype /* var elttype: MType */;
6204 val* var1 /* : MType */;
6205 val* var2 /* : RuntimeVariable */;
6206 var_mpropdef = p0;
6207 var_recv = p1;
6208 var_varargs = p2;
6209 var_elttype = p3;
6210 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_elttype, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6211 var_elttype = var1;
6212 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__array_instance]))(self, var_varargs, var_elttype) /* array_instance on <self:GlobalCompilerVisitor>*/;
6213 var = var2;
6214 goto RET_LABEL;
6215 RET_LABEL:;
6216 return var;
6217 }
6218 /* method global_compiler#GlobalCompilerVisitor#vararg_instance for (self: Object, MPropDef, RuntimeVariable, Array[RuntimeVariable], MType): RuntimeVariable */
6219 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__vararg_instance(val* self, val* p0, val* p1, val* p2, val* p3) {
6220 val* var /* : RuntimeVariable */;
6221 val* var1 /* : RuntimeVariable */;
6222 var1 = global_compiler__GlobalCompilerVisitor__vararg_instance(self, p0, p1, p2, p3);
6223 var = var1;
6224 RET_LABEL:;
6225 return var;
6226 }
6227 /* method global_compiler#GlobalCompilerVisitor#bugtype for (self: GlobalCompilerVisitor, RuntimeVariable) */
6228 void global_compiler__GlobalCompilerVisitor__bugtype(val* self, val* p0) {
6229 val* var_recv /* var recv: RuntimeVariable */;
6230 val* var /* : MType */;
6231 val* var1 /* : String */;
6232 static val* varonce;
6233 val* var2 /* : String */;
6234 char* var3 /* : NativeString */;
6235 long var4 /* : Int */;
6236 val* var5 /* : String */;
6237 short int var6 /* : Bool */;
6238 static val* varonce7;
6239 val* var8 /* : String */;
6240 char* var9 /* : NativeString */;
6241 long var10 /* : Int */;
6242 val* var11 /* : String */;
6243 static val* varonce12;
6244 val* var13 /* : String */;
6245 char* var14 /* : NativeString */;
6246 long var15 /* : Int */;
6247 val* var16 /* : String */;
6248 val* var17 /* : MType */;
6249 static val* varonce18;
6250 val* var19 /* : String */;
6251 char* var20 /* : NativeString */;
6252 long var21 /* : Int */;
6253 val* var22 /* : String */;
6254 val* var23 /* : Array[Object] */;
6255 long var24 /* : Int */;
6256 val* var25 /* : NativeArray[Object] */;
6257 val* var26 /* : String */;
6258 static val* varonce27;
6259 val* var28 /* : String */;
6260 char* var29 /* : NativeString */;
6261 long var30 /* : Int */;
6262 val* var31 /* : String */;
6263 var_recv = p0;
6264 var = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6265 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__MType__ctype]))(var) /* ctype on <var:MType>*/;
6266 if (varonce) {
6267 var2 = varonce;
6268 } else {
6269 var3 = "val*";
6270 var4 = 4;
6271 var5 = string__NativeString__to_s_with_length(var3, var4);
6272 var2 = var5;
6273 varonce = var2;
6274 }
6275 var6 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___33d_61d]))(var1, var2) /* != on <var1:String>*/;
6276 if (var6){
6277 goto RET_LABEL;
6278 } else {
6279 }
6280 if (varonce7) {
6281 var8 = varonce7;
6282 } else {
6283 var9 = "fprintf(stderr, \"BTD BUG: Dynamic type is %s, static type is %s\\n\", class_names[";
6284 var10 = 80;
6285 var11 = string__NativeString__to_s_with_length(var9, var10);
6286 var8 = var11;
6287 varonce7 = var8;
6288 }
6289 if (varonce12) {
6290 var13 = varonce12;
6291 } else {
6292 var14 = "->classid], \"";
6293 var15 = 13;
6294 var16 = string__NativeString__to_s_with_length(var14, var15);
6295 var13 = var16;
6296 varonce12 = var13;
6297 }
6298 var17 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_recv) /* mcasttype on <var_recv:RuntimeVariable>*/;
6299 if (varonce18) {
6300 var19 = varonce18;
6301 } else {
6302 var20 = "\");";
6303 var21 = 3;
6304 var22 = string__NativeString__to_s_with_length(var20, var21);
6305 var19 = var22;
6306 varonce18 = var19;
6307 }
6308 var23 = NEW_array__Array(&type_array__Arraykernel__Object);
6309 { /* var23 = array_instance Array[Object] */
6310 var24 = 5;
6311 var25 = NEW_array__NativeArray(var24, &type_array__NativeArraykernel__Object);
6312 ((struct instance_array__NativeArray*)var25)->values[0] = (val*) var8;
6313 ((struct instance_array__NativeArray*)var25)->values[1] = (val*) var_recv;
6314 ((struct instance_array__NativeArray*)var25)->values[2] = (val*) var13;
6315 ((struct instance_array__NativeArray*)var25)->values[3] = (val*) var17;
6316 ((struct instance_array__NativeArray*)var25)->values[4] = (val*) var19;
6317 ((void (*)(val*, val*, long))(var23->class->vft[COLOR_array__Array__with_native]))(var23, var25, var24) /* with_native on <var23:Array[Object]>*/;
6318 }
6319 var26 = ((val* (*)(val*))(var23->class->vft[COLOR_string__Object__to_s]))(var23) /* to_s on <var23:Array[Object]>*/;
6320 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var26) /* add on <self:GlobalCompilerVisitor>*/;
6321 if (varonce27) {
6322 var28 = varonce27;
6323 } else {
6324 var29 = "show_backtrace(1);";
6325 var30 = 18;
6326 var31 = string__NativeString__to_s_with_length(var29, var30);
6327 var28 = var31;
6328 varonce27 = var28;
6329 }
6330 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var28) /* add on <self:GlobalCompilerVisitor>*/;
6331 RET_LABEL:;
6332 }
6333 /* method global_compiler#GlobalCompilerVisitor#bugtype for (self: Object, RuntimeVariable) */
6334 void VIRTUAL_global_compiler__GlobalCompilerVisitor__bugtype(val* self, val* p0) {
6335 global_compiler__GlobalCompilerVisitor__bugtype(self, p0);
6336 RET_LABEL:;
6337 }
6338 /* method global_compiler#GlobalCompilerVisitor#isset_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable): RuntimeVariable */
6339 val* global_compiler__GlobalCompilerVisitor__isset_attribute(val* self, val* p0, val* p1) {
6340 val* var /* : RuntimeVariable */;
6341 val* var_a /* var a: MAttribute */;
6342 val* var_recv /* var recv: RuntimeVariable */;
6343 val* var1 /* : Array[MClassType] */;
6344 val* var_types /* var types: Array[MClassType] */;
6345 val* var2 /* : MClassType */;
6346 val* var3 /* : RuntimeVariable */;
6347 val* var_res /* var res: RuntimeVariable */;
6348 short int var4 /* : Bool */;
6349 static val* varonce;
6350 val* var5 /* : String */;
6351 char* var6 /* : NativeString */;
6352 long var7 /* : Int */;
6353 val* var8 /* : String */;
6354 val* var9 /* : String */;
6355 static val* varonce10;
6356 val* var11 /* : String */;
6357 char* var12 /* : NativeString */;
6358 long var13 /* : Int */;
6359 val* var14 /* : String */;
6360 static val* varonce15;
6361 val* var16 /* : String */;
6362 char* var17 /* : NativeString */;
6363 long var18 /* : Int */;
6364 val* var19 /* : String */;
6365 val* var20 /* : Array[Object] */;
6366 long var21 /* : Int */;
6367 val* var22 /* : NativeArray[Object] */;
6368 val* var23 /* : String */;
6369 static val* varonce24;
6370 val* var25 /* : String */;
6371 char* var26 /* : NativeString */;
6372 long var27 /* : Int */;
6373 val* var28 /* : String */;
6374 static val* varonce29;
6375 val* var30 /* : String */;
6376 char* var31 /* : NativeString */;
6377 long var32 /* : Int */;
6378 val* var33 /* : String */;
6379 val* var34 /* : String */;
6380 static val* varonce35;
6381 val* var36 /* : String */;
6382 char* var37 /* : NativeString */;
6383 long var38 /* : Int */;
6384 val* var39 /* : String */;
6385 val* var40 /* : Array[Object] */;
6386 long var41 /* : Int */;
6387 val* var42 /* : NativeArray[Object] */;
6388 val* var43 /* : String */;
6389 static val* varonce44;
6390 val* var45 /* : String */;
6391 char* var46 /* : NativeString */;
6392 long var47 /* : Int */;
6393 val* var48 /* : String */;
6394 static val* varonce49;
6395 val* var50 /* : String */;
6396 char* var51 /* : NativeString */;
6397 long var52 /* : Int */;
6398 val* var53 /* : String */;
6399 val* var54 /* : Array[Object] */;
6400 long var55 /* : Int */;
6401 val* var56 /* : NativeArray[Object] */;
6402 val* var57 /* : String */;
6403 val* var58 /* : nullable Object */;
6404 val* var_last /* var last: MClassType */;
6405 val* var59 /* : Iterator[nullable Object] */;
6406 short int var60 /* : Bool */;
6407 val* var61 /* : nullable Object */;
6408 val* var_t /* var t: MClassType */;
6409 short int var62 /* : Bool */;
6410 val* var63 /* : AbstractCompiler */;
6411 short int var64 /* : Bool */;
6412 short int var65 /* : Bool */;
6413 short int var_ /* var : Bool */;
6414 short int var66 /* : Bool */;
6415 static val* varonce67;
6416 val* var68 /* : String */;
6417 char* var69 /* : NativeString */;
6418 long var70 /* : Int */;
6419 val* var71 /* : String */;
6420 val* var72 /* : AbstractCompiler */;
6421 val* var73 /* : String */;
6422 static val* varonce74;
6423 val* var75 /* : String */;
6424 char* var76 /* : NativeString */;
6425 long var77 /* : Int */;
6426 val* var78 /* : String */;
6427 val* var79 /* : Array[Object] */;
6428 long var80 /* : Int */;
6429 val* var81 /* : NativeArray[Object] */;
6430 val* var82 /* : String */;
6431 static val* varonce83;
6432 val* var84 /* : String */;
6433 char* var85 /* : NativeString */;
6434 long var86 /* : Int */;
6435 val* var87 /* : String */;
6436 val* var88 /* : AbstractCompiler */;
6437 val* var89 /* : String */;
6438 static val* varonce90;
6439 val* var91 /* : String */;
6440 char* var92 /* : NativeString */;
6441 long var93 /* : Int */;
6442 val* var94 /* : String */;
6443 val* var95 /* : Array[Object] */;
6444 long var96 /* : Int */;
6445 val* var97 /* : NativeArray[Object] */;
6446 val* var98 /* : String */;
6447 val* var99 /* : RuntimeVariable */;
6448 val* var_recv2 /* var recv2: RuntimeVariable */;
6449 val* var100 /* : MPropDef */;
6450 val* var101 /* : nullable MType */;
6451 val* var_ta /* var ta: MType */;
6452 val* var102 /* : MType */;
6453 static val* varonce103;
6454 val* var104 /* : String */;
6455 char* var105 /* : NativeString */;
6456 long var106 /* : Int */;
6457 val* var107 /* : String */;
6458 val* var108 /* : String */;
6459 static val* varonce109;
6460 val* var110 /* : String */;
6461 char* var111 /* : NativeString */;
6462 long var112 /* : Int */;
6463 val* var113 /* : String */;
6464 static val* varonce114;
6465 val* var115 /* : String */;
6466 char* var116 /* : NativeString */;
6467 long var117 /* : Int */;
6468 val* var118 /* : String */;
6469 val* var119 /* : MPropDef */;
6470 val* var120 /* : String */;
6471 val* var121 /* : Array[Object] */;
6472 long var122 /* : Int */;
6473 val* var123 /* : NativeArray[Object] */;
6474 val* var124 /* : String */;
6475 val* var125 /* : RuntimeVariable */;
6476 val* var_attr /* var attr: RuntimeVariable */;
6477 short int var126 /* : Bool */;
6478 int cltype;
6479 int idtype;
6480 short int var127 /* : Bool */;
6481 val* var128 /* : String */;
6482 static val* varonce129;
6483 val* var130 /* : String */;
6484 char* var131 /* : NativeString */;
6485 long var132 /* : Int */;
6486 val* var133 /* : String */;
6487 short int var134 /* : Bool */;
6488 static val* varonce135;
6489 val* var136 /* : String */;
6490 char* var137 /* : NativeString */;
6491 long var138 /* : Int */;
6492 val* var139 /* : String */;
6493 static val* varonce140;
6494 val* var141 /* : String */;
6495 char* var142 /* : NativeString */;
6496 long var143 /* : Int */;
6497 val* var144 /* : String */;
6498 val* var145 /* : Array[Object] */;
6499 long var146 /* : Int */;
6500 val* var147 /* : NativeArray[Object] */;
6501 val* var148 /* : String */;
6502 static val* varonce149;
6503 val* var150 /* : String */;
6504 char* var151 /* : NativeString */;
6505 long var152 /* : Int */;
6506 val* var153 /* : String */;
6507 val* var154 /* : Array[Object] */;
6508 long var155 /* : Int */;
6509 val* var156 /* : NativeArray[Object] */;
6510 val* var157 /* : String */;
6511 static val* varonce158;
6512 val* var159 /* : String */;
6513 char* var160 /* : NativeString */;
6514 long var161 /* : Int */;
6515 val* var162 /* : String */;
6516 val* var163 /* : AbstractCompiler */;
6517 short int var164 /* : Bool */;
6518 static val* varonce165;
6519 val* var166 /* : String */;
6520 char* var167 /* : NativeString */;
6521 long var168 /* : Int */;
6522 val* var169 /* : String */;
6523 static val* varonce170;
6524 val* var171 /* : String */;
6525 char* var172 /* : NativeString */;
6526 long var173 /* : Int */;
6527 val* var174 /* : String */;
6528 var_a = p0;
6529 var_recv = p1;
6530 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
6531 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
6532 var_types = var1;
6533 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
6534 var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var2) /* new_var on <self:GlobalCompilerVisitor>*/;
6535 var_res = var3;
6536 var4 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
6537 if (var4){
6538 if (varonce) {
6539 var5 = varonce;
6540 } else {
6541 var6 = "/*BUG: no live types for ";
6542 var7 = 25;
6543 var8 = string__NativeString__to_s_with_length(var6, var7);
6544 var5 = var8;
6545 varonce = var5;
6546 }
6547 var9 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
6548 if (varonce10) {
6549 var11 = varonce10;
6550 } else {
6551 var12 = " . ";
6552 var13 = 3;
6553 var14 = string__NativeString__to_s_with_length(var12, var13);
6554 var11 = var14;
6555 varonce10 = var11;
6556 }
6557 if (varonce15) {
6558 var16 = varonce15;
6559 } else {
6560 var17 = "*/";
6561 var18 = 2;
6562 var19 = string__NativeString__to_s_with_length(var17, var18);
6563 var16 = var19;
6564 varonce15 = var16;
6565 }
6566 var20 = NEW_array__Array(&type_array__Arraykernel__Object);
6567 { /* var20 = array_instance Array[Object] */
6568 var21 = 5;
6569 var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
6570 ((struct instance_array__NativeArray*)var22)->values[0] = (val*) var5;
6571 ((struct instance_array__NativeArray*)var22)->values[1] = (val*) var9;
6572 ((struct instance_array__NativeArray*)var22)->values[2] = (val*) var11;
6573 ((struct instance_array__NativeArray*)var22)->values[3] = (val*) var_a;
6574 ((struct instance_array__NativeArray*)var22)->values[4] = (val*) var16;
6575 ((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
6576 }
6577 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
6578 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var23) /* add on <self:GlobalCompilerVisitor>*/;
6579 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
6580 var = var_res;
6581 goto RET_LABEL;
6582 } else {
6583 }
6584 if (varonce24) {
6585 var25 = varonce24;
6586 } else {
6587 var26 = "/* isset ";
6588 var27 = 9;
6589 var28 = string__NativeString__to_s_with_length(var26, var27);
6590 var25 = var28;
6591 varonce24 = var25;
6592 }
6593 if (varonce29) {
6594 var30 = varonce29;
6595 } else {
6596 var31 = " on ";
6597 var32 = 4;
6598 var33 = string__NativeString__to_s_with_length(var31, var32);
6599 var30 = var33;
6600 varonce29 = var30;
6601 }
6602 var34 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
6603 if (varonce35) {
6604 var36 = varonce35;
6605 } else {
6606 var37 = " */";
6607 var38 = 3;
6608 var39 = string__NativeString__to_s_with_length(var37, var38);
6609 var36 = var39;
6610 varonce35 = var36;
6611 }
6612 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
6613 { /* var40 = array_instance Array[Object] */
6614 var41 = 5;
6615 var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
6616 ((struct instance_array__NativeArray*)var42)->values[0] = (val*) var25;
6617 ((struct instance_array__NativeArray*)var42)->values[1] = (val*) var_a;
6618 ((struct instance_array__NativeArray*)var42)->values[2] = (val*) var30;
6619 ((struct instance_array__NativeArray*)var42)->values[3] = (val*) var34;
6620 ((struct instance_array__NativeArray*)var42)->values[4] = (val*) var36;
6621 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
6622 }
6623 var43 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
6624 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var43) /* add on <self:GlobalCompilerVisitor>*/;
6625 if (varonce44) {
6626 var45 = varonce44;
6627 } else {
6628 var46 = "switch(";
6629 var47 = 7;
6630 var48 = string__NativeString__to_s_with_length(var46, var47);
6631 var45 = var48;
6632 varonce44 = var45;
6633 }
6634 if (varonce49) {
6635 var50 = varonce49;
6636 } else {
6637 var51 = "->classid) {";
6638 var52 = 12;
6639 var53 = string__NativeString__to_s_with_length(var51, var52);
6640 var50 = var53;
6641 varonce49 = var50;
6642 }
6643 var54 = NEW_array__Array(&type_array__Arraykernel__Object);
6644 { /* var54 = array_instance Array[Object] */
6645 var55 = 3;
6646 var56 = NEW_array__NativeArray(var55, &type_array__NativeArraykernel__Object);
6647 ((struct instance_array__NativeArray*)var56)->values[0] = (val*) var45;
6648 ((struct instance_array__NativeArray*)var56)->values[1] = (val*) var_recv;
6649 ((struct instance_array__NativeArray*)var56)->values[2] = (val*) var50;
6650 ((void (*)(val*, val*, long))(var54->class->vft[COLOR_array__Array__with_native]))(var54, var56, var55) /* with_native on <var54:Array[Object]>*/;
6651 }
6652 var57 = ((val* (*)(val*))(var54->class->vft[COLOR_string__Object__to_s]))(var54) /* to_s on <var54:Array[Object]>*/;
6653 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var57) /* add on <self:GlobalCompilerVisitor>*/;
6654 var58 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
6655 var_last = var58;
6656 var59 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
6657 for(;;) {
6658 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var59) /* is_ok on <var59:Iterator[nullable Object]>*/;
6659 if(!var60) break;
6660 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__item]))(var59) /* item on <var59:Iterator[nullable Object]>*/;
6661 var_t = var61;
6662 var63 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6663 var64 = ((short int (*)(val*))(var63->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var63) /* hardening on <var63:AbstractCompiler(GlobalCompiler)>*/;
6664 var65 = !var64;
6665 var_ = var65;
6666 if (var65){
6667 var66 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
6668 var62 = var66;
6669 } else {
6670 var62 = var_;
6671 }
6672 if (var62){
6673 if (varonce67) {
6674 var68 = varonce67;
6675 } else {
6676 var69 = "default: /*";
6677 var70 = 11;
6678 var71 = string__NativeString__to_s_with_length(var69, var70);
6679 var68 = var71;
6680 varonce67 = var68;
6681 }
6682 var72 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6683 var73 = ((val* (*)(val*, val*))(var72->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var72, var_t) /* classid on <var72:AbstractCompiler(GlobalCompiler)>*/;
6684 if (varonce74) {
6685 var75 = varonce74;
6686 } else {
6687 var76 = "*/";
6688 var77 = 2;
6689 var78 = string__NativeString__to_s_with_length(var76, var77);
6690 var75 = var78;
6691 varonce74 = var75;
6692 }
6693 var79 = NEW_array__Array(&type_array__Arraykernel__Object);
6694 { /* var79 = array_instance Array[Object] */
6695 var80 = 3;
6696 var81 = NEW_array__NativeArray(var80, &type_array__NativeArraykernel__Object);
6697 ((struct instance_array__NativeArray*)var81)->values[0] = (val*) var68;
6698 ((struct instance_array__NativeArray*)var81)->values[1] = (val*) var73;
6699 ((struct instance_array__NativeArray*)var81)->values[2] = (val*) var75;
6700 ((void (*)(val*, val*, long))(var79->class->vft[COLOR_array__Array__with_native]))(var79, var81, var80) /* with_native on <var79:Array[Object]>*/;
6701 }
6702 var82 = ((val* (*)(val*))(var79->class->vft[COLOR_string__Object__to_s]))(var79) /* to_s on <var79:Array[Object]>*/;
6703 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var82) /* add on <self:GlobalCompilerVisitor>*/;
6704 } else {
6705 if (varonce83) {
6706 var84 = varonce83;
6707 } else {
6708 var85 = "case ";
6709 var86 = 5;
6710 var87 = string__NativeString__to_s_with_length(var85, var86);
6711 var84 = var87;
6712 varonce83 = var84;
6713 }
6714 var88 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6715 var89 = ((val* (*)(val*, val*))(var88->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var88, var_t) /* classid on <var88:AbstractCompiler(GlobalCompiler)>*/;
6716 if (varonce90) {
6717 var91 = varonce90;
6718 } else {
6719 var92 = ":";
6720 var93 = 1;
6721 var94 = string__NativeString__to_s_with_length(var92, var93);
6722 var91 = var94;
6723 varonce90 = var91;
6724 }
6725 var95 = NEW_array__Array(&type_array__Arraykernel__Object);
6726 { /* var95 = array_instance Array[Object] */
6727 var96 = 3;
6728 var97 = NEW_array__NativeArray(var96, &type_array__NativeArraykernel__Object);
6729 ((struct instance_array__NativeArray*)var97)->values[0] = (val*) var84;
6730 ((struct instance_array__NativeArray*)var97)->values[1] = (val*) var89;
6731 ((struct instance_array__NativeArray*)var97)->values[2] = (val*) var91;
6732 ((void (*)(val*, val*, long))(var95->class->vft[COLOR_array__Array__with_native]))(var95, var97, var96) /* with_native on <var95:Array[Object]>*/;
6733 }
6734 var98 = ((val* (*)(val*))(var95->class->vft[COLOR_string__Object__to_s]))(var95) /* to_s on <var95:Array[Object]>*/;
6735 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var98) /* add on <self:GlobalCompilerVisitor>*/;
6736 }
6737 var99 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
6738 var_recv2 = var99;
6739 var100 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
6740 var101 = ((val* (*)(val*))(var100->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var100) /* static_mtype on <var100:MPropDef(MAttributeDef)>*/;
6741 if (var101 == NULL) {
6742 fprintf(stderr, "Runtime error: %s", "Cast failed");
6743 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 588);
6744 show_backtrace(1);
6745 }
6746 var_ta = var101;
6747 var102 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6748 var_ta = var102;
6749 if (varonce103) {
6750 var104 = varonce103;
6751 } else {
6752 var105 = "((struct ";
6753 var106 = 9;
6754 var107 = string__NativeString__to_s_with_length(var105, var106);
6755 var104 = var107;
6756 varonce103 = var104;
6757 }
6758 var108 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
6759 if (varonce109) {
6760 var110 = varonce109;
6761 } else {
6762 var111 = "*)";
6763 var112 = 2;
6764 var113 = string__NativeString__to_s_with_length(var111, var112);
6765 var110 = var113;
6766 varonce109 = var110;
6767 }
6768 if (varonce114) {
6769 var115 = varonce114;
6770 } else {
6771 var116 = ")->";
6772 var117 = 3;
6773 var118 = string__NativeString__to_s_with_length(var116, var117);
6774 var115 = var118;
6775 varonce114 = var115;
6776 }
6777 var119 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
6778 var120 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var119) /* c_name on <var119:MPropDef(MAttributeDef)>*/;
6779 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
6780 { /* var121 = array_instance Array[Object] */
6781 var122 = 6;
6782 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
6783 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var104;
6784 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var108;
6785 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var110;
6786 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var_recv;
6787 ((struct instance_array__NativeArray*)var123)->values[4] = (val*) var115;
6788 ((struct instance_array__NativeArray*)var123)->values[5] = (val*) var120;
6789 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
6790 }
6791 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
6792 var125 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var124, var_ta) /* new_expr on <self:GlobalCompilerVisitor>*/;
6793 var_attr = var125;
6794 /* <var_ta:MType> isa MNullableType */
6795 cltype = type_model__MNullableType.color;
6796 idtype = type_model__MNullableType.id;
6797 if(cltype >= var_ta->type->table_size) {
6798 var126 = 0;
6799 } else {
6800 var126 = var_ta->type->type_table[cltype] == idtype;
6801 }
6802 var127 = !var126;
6803 if (var127){
6804 var128 = ((val* (*)(val*))(var_ta->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_ta) /* ctype on <var_ta:MType>*/;
6805 if (varonce129) {
6806 var130 = varonce129;
6807 } else {
6808 var131 = "val*";
6809 var132 = 4;
6810 var133 = string__NativeString__to_s_with_length(var131, var132);
6811 var130 = var133;
6812 varonce129 = var130;
6813 }
6814 var134 = ((short int (*)(val*, val*))(var128->class->vft[COLOR_kernel__Object___61d_61d]))(var128, var130) /* == on <var128:String>*/;
6815 if (var134){
6816 if (varonce135) {
6817 var136 = varonce135;
6818 } else {
6819 var137 = " = (";
6820 var138 = 4;
6821 var139 = string__NativeString__to_s_with_length(var137, var138);
6822 var136 = var139;
6823 varonce135 = var136;
6824 }
6825 if (varonce140) {
6826 var141 = varonce140;
6827 } else {
6828 var142 = " != NULL);";
6829 var143 = 10;
6830 var144 = string__NativeString__to_s_with_length(var142, var143);
6831 var141 = var144;
6832 varonce140 = var141;
6833 }
6834 var145 = NEW_array__Array(&type_array__Arraykernel__Object);
6835 { /* var145 = array_instance Array[Object] */
6836 var146 = 4;
6837 var147 = NEW_array__NativeArray(var146, &type_array__NativeArraykernel__Object);
6838 ((struct instance_array__NativeArray*)var147)->values[0] = (val*) var_res;
6839 ((struct instance_array__NativeArray*)var147)->values[1] = (val*) var136;
6840 ((struct instance_array__NativeArray*)var147)->values[2] = (val*) var_attr;
6841 ((struct instance_array__NativeArray*)var147)->values[3] = (val*) var141;
6842 ((void (*)(val*, val*, long))(var145->class->vft[COLOR_array__Array__with_native]))(var145, var147, var146) /* with_native on <var145:Array[Object]>*/;
6843 }
6844 var148 = ((val* (*)(val*))(var145->class->vft[COLOR_string__Object__to_s]))(var145) /* to_s on <var145:Array[Object]>*/;
6845 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var148) /* add on <self:GlobalCompilerVisitor>*/;
6846 } else {
6847 if (varonce149) {
6848 var150 = varonce149;
6849 } else {
6850 var151 = " = 1; /*NOTYET isset on primitive attributes*/";
6851 var152 = 46;
6852 var153 = string__NativeString__to_s_with_length(var151, var152);
6853 var150 = var153;
6854 varonce149 = var150;
6855 }
6856 var154 = NEW_array__Array(&type_array__Arraykernel__Object);
6857 { /* var154 = array_instance Array[Object] */
6858 var155 = 2;
6859 var156 = NEW_array__NativeArray(var155, &type_array__NativeArraykernel__Object);
6860 ((struct instance_array__NativeArray*)var156)->values[0] = (val*) var_res;
6861 ((struct instance_array__NativeArray*)var156)->values[1] = (val*) var150;
6862 ((void (*)(val*, val*, long))(var154->class->vft[COLOR_array__Array__with_native]))(var154, var156, var155) /* with_native on <var154:Array[Object]>*/;
6863 }
6864 var157 = ((val* (*)(val*))(var154->class->vft[COLOR_string__Object__to_s]))(var154) /* to_s on <var154:Array[Object]>*/;
6865 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var157) /* add on <self:GlobalCompilerVisitor>*/;
6866 }
6867 } else {
6868 }
6869 if (varonce158) {
6870 var159 = varonce158;
6871 } else {
6872 var160 = "break;";
6873 var161 = 6;
6874 var162 = string__NativeString__to_s_with_length(var160, var161);
6875 var159 = var162;
6876 varonce158 = var159;
6877 }
6878 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var159) /* add on <self:GlobalCompilerVisitor>*/;
6879 CONTINUE_label: (void)0;
6880 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__next]))(var59) /* next on <var59:Iterator[nullable Object]>*/;
6881 }
6882 BREAK_label: (void)0;
6883 var163 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6884 var164 = ((short int (*)(val*))(var163->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var163) /* hardening on <var163:AbstractCompiler(GlobalCompiler)>*/;
6885 if (var164){
6886 if (varonce165) {
6887 var166 = varonce165;
6888 } else {
6889 var167 = "default: /* Bug */";
6890 var168 = 18;
6891 var169 = string__NativeString__to_s_with_length(var167, var168);
6892 var166 = var169;
6893 varonce165 = var166;
6894 }
6895 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var166) /* add on <self:GlobalCompilerVisitor>*/;
6896 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
6897 } else {
6898 }
6899 if (varonce170) {
6900 var171 = varonce170;
6901 } else {
6902 var172 = "}";
6903 var173 = 1;
6904 var174 = string__NativeString__to_s_with_length(var172, var173);
6905 var171 = var174;
6906 varonce170 = var171;
6907 }
6908 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
6909 var = var_res;
6910 goto RET_LABEL;
6911 RET_LABEL:;
6912 return var;
6913 }
6914 /* method global_compiler#GlobalCompilerVisitor#isset_attribute for (self: Object, MAttribute, RuntimeVariable): RuntimeVariable */
6915 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__isset_attribute(val* self, val* p0, val* p1) {
6916 val* var /* : RuntimeVariable */;
6917 val* var1 /* : RuntimeVariable */;
6918 var1 = global_compiler__GlobalCompilerVisitor__isset_attribute(self, p0, p1);
6919 var = var1;
6920 RET_LABEL:;
6921 return var;
6922 }
6923 /* method global_compiler#GlobalCompilerVisitor#read_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable): RuntimeVariable */
6924 val* global_compiler__GlobalCompilerVisitor__read_attribute(val* self, val* p0, val* p1) {
6925 val* var /* : RuntimeVariable */;
6926 val* var_a /* var a: MAttribute */;
6927 val* var_recv /* var recv: RuntimeVariable */;
6928 val* var1 /* : Array[MClassType] */;
6929 val* var_types /* var types: Array[MClassType] */;
6930 val* var2 /* : MPropDef */;
6931 val* var3 /* : nullable MType */;
6932 val* var_ret /* var ret: MType */;
6933 val* var4 /* : MType */;
6934 val* var5 /* : RuntimeVariable */;
6935 val* var_res /* var res: RuntimeVariable */;
6936 short int var6 /* : Bool */;
6937 static val* varonce;
6938 val* var7 /* : String */;
6939 char* var8 /* : NativeString */;
6940 long var9 /* : Int */;
6941 val* var10 /* : String */;
6942 val* var11 /* : String */;
6943 static val* varonce12;
6944 val* var13 /* : String */;
6945 char* var14 /* : NativeString */;
6946 long var15 /* : Int */;
6947 val* var16 /* : String */;
6948 static val* varonce17;
6949 val* var18 /* : String */;
6950 char* var19 /* : NativeString */;
6951 long var20 /* : Int */;
6952 val* var21 /* : String */;
6953 val* var22 /* : Array[Object] */;
6954 long var23 /* : Int */;
6955 val* var24 /* : NativeArray[Object] */;
6956 val* var25 /* : String */;
6957 static val* varonce26;
6958 val* var27 /* : String */;
6959 char* var28 /* : NativeString */;
6960 long var29 /* : Int */;
6961 val* var30 /* : String */;
6962 static val* varonce31;
6963 val* var32 /* : String */;
6964 char* var33 /* : NativeString */;
6965 long var34 /* : Int */;
6966 val* var35 /* : String */;
6967 val* var36 /* : String */;
6968 static val* varonce37;
6969 val* var38 /* : String */;
6970 char* var39 /* : NativeString */;
6971 long var40 /* : Int */;
6972 val* var41 /* : String */;
6973 val* var42 /* : Array[Object] */;
6974 long var43 /* : Int */;
6975 val* var44 /* : NativeArray[Object] */;
6976 val* var45 /* : String */;
6977 static val* varonce46;
6978 val* var47 /* : String */;
6979 char* var48 /* : NativeString */;
6980 long var49 /* : Int */;
6981 val* var50 /* : String */;
6982 static val* varonce51;
6983 val* var52 /* : String */;
6984 char* var53 /* : NativeString */;
6985 long var54 /* : Int */;
6986 val* var55 /* : String */;
6987 val* var56 /* : Array[Object] */;
6988 long var57 /* : Int */;
6989 val* var58 /* : NativeArray[Object] */;
6990 val* var59 /* : String */;
6991 val* var60 /* : nullable Object */;
6992 val* var_last /* var last: MClassType */;
6993 val* var61 /* : Iterator[nullable Object] */;
6994 short int var62 /* : Bool */;
6995 val* var63 /* : nullable Object */;
6996 val* var_t /* var t: MClassType */;
6997 short int var64 /* : Bool */;
6998 val* var65 /* : AbstractCompiler */;
6999 short int var66 /* : Bool */;
7000 short int var67 /* : Bool */;
7001 short int var_ /* var : Bool */;
7002 short int var68 /* : Bool */;
7003 static val* varonce69;
7004 val* var70 /* : String */;
7005 char* var71 /* : NativeString */;
7006 long var72 /* : Int */;
7007 val* var73 /* : String */;
7008 val* var74 /* : AbstractCompiler */;
7009 val* var75 /* : String */;
7010 static val* varonce76;
7011 val* var77 /* : String */;
7012 char* var78 /* : NativeString */;
7013 long var79 /* : Int */;
7014 val* var80 /* : String */;
7015 val* var81 /* : Array[Object] */;
7016 long var82 /* : Int */;
7017 val* var83 /* : NativeArray[Object] */;
7018 val* var84 /* : String */;
7019 static val* varonce85;
7020 val* var86 /* : String */;
7021 char* var87 /* : NativeString */;
7022 long var88 /* : Int */;
7023 val* var89 /* : String */;
7024 val* var90 /* : AbstractCompiler */;
7025 val* var91 /* : String */;
7026 static val* varonce92;
7027 val* var93 /* : String */;
7028 char* var94 /* : NativeString */;
7029 long var95 /* : Int */;
7030 val* var96 /* : String */;
7031 val* var97 /* : Array[Object] */;
7032 long var98 /* : Int */;
7033 val* var99 /* : NativeArray[Object] */;
7034 val* var100 /* : String */;
7035 val* var101 /* : RuntimeVariable */;
7036 val* var_recv2 /* var recv2: RuntimeVariable */;
7037 val* var102 /* : MPropDef */;
7038 val* var103 /* : nullable MType */;
7039 val* var_ta /* var ta: MType */;
7040 val* var104 /* : MType */;
7041 static val* varonce105;
7042 val* var106 /* : String */;
7043 char* var107 /* : NativeString */;
7044 long var108 /* : Int */;
7045 val* var109 /* : String */;
7046 val* var110 /* : String */;
7047 static val* varonce111;
7048 val* var112 /* : String */;
7049 char* var113 /* : NativeString */;
7050 long var114 /* : Int */;
7051 val* var115 /* : String */;
7052 static val* varonce116;
7053 val* var117 /* : String */;
7054 char* var118 /* : NativeString */;
7055 long var119 /* : Int */;
7056 val* var120 /* : String */;
7057 val* var121 /* : MPropDef */;
7058 val* var122 /* : String */;
7059 val* var123 /* : Array[Object] */;
7060 long var124 /* : Int */;
7061 val* var125 /* : NativeArray[Object] */;
7062 val* var126 /* : String */;
7063 val* var127 /* : RuntimeVariable */;
7064 val* var_res2 /* var res2: RuntimeVariable */;
7065 short int var128 /* : Bool */;
7066 short int var129 /* : Bool */;
7067 int cltype;
7068 int idtype;
7069 short int var130 /* : Bool */;
7070 short int var_131 /* var : Bool */;
7071 val* var132 /* : AbstractCompiler */;
7072 val* var133 /* : ModelBuilder */;
7073 val* var134 /* : ToolContext */;
7074 val* var135 /* : OptionBool */;
7075 val* var136 /* : nullable Object */;
7076 short int var137 /* : Bool */;
7077 short int var138 /* : Bool */;
7078 val* var139 /* : String */;
7079 static val* varonce140;
7080 val* var141 /* : String */;
7081 char* var142 /* : NativeString */;
7082 long var143 /* : Int */;
7083 val* var144 /* : String */;
7084 short int var145 /* : Bool */;
7085 static val* varonce146;
7086 val* var147 /* : String */;
7087 char* var148 /* : NativeString */;
7088 long var149 /* : Int */;
7089 val* var150 /* : String */;
7090 static val* varonce151;
7091 val* var152 /* : String */;
7092 char* var153 /* : NativeString */;
7093 long var154 /* : Int */;
7094 val* var155 /* : String */;
7095 val* var156 /* : Array[Object] */;
7096 long var157 /* : Int */;
7097 val* var158 /* : NativeArray[Object] */;
7098 val* var159 /* : String */;
7099 static val* varonce160;
7100 val* var161 /* : String */;
7101 char* var162 /* : NativeString */;
7102 long var163 /* : Int */;
7103 val* var164 /* : String */;
7104 val* var165 /* : String */;
7105 val* var166 /* : Array[Object] */;
7106 long var167 /* : Int */;
7107 val* var168 /* : NativeArray[Object] */;
7108 val* var169 /* : String */;
7109 static val* varonce170;
7110 val* var171 /* : String */;
7111 char* var172 /* : NativeString */;
7112 long var173 /* : Int */;
7113 val* var174 /* : String */;
7114 static val* varonce175;
7115 val* var176 /* : String */;
7116 char* var177 /* : NativeString */;
7117 long var178 /* : Int */;
7118 val* var179 /* : String */;
7119 static val* varonce180;
7120 val* var181 /* : String */;
7121 char* var182 /* : NativeString */;
7122 long var183 /* : Int */;
7123 val* var184 /* : String */;
7124 val* var185 /* : AbstractCompiler */;
7125 short int var186 /* : Bool */;
7126 static val* varonce187;
7127 val* var188 /* : String */;
7128 char* var189 /* : NativeString */;
7129 long var190 /* : Int */;
7130 val* var191 /* : String */;
7131 static val* varonce192;
7132 val* var193 /* : String */;
7133 char* var194 /* : NativeString */;
7134 long var195 /* : Int */;
7135 val* var196 /* : String */;
7136 var_a = p0;
7137 var_recv = p1;
7138 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
7139 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
7140 var_types = var1;
7141 var2 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7142 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var2) /* static_mtype on <var2:MPropDef(MAttributeDef)>*/;
7143 if (var3 == NULL) {
7144 fprintf(stderr, "Runtime error: %s", "Cast failed");
7145 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 615);
7146 show_backtrace(1);
7147 }
7148 var_ret = var3;
7149 var4 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7150 var_ret = var4;
7151 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
7152 var_res = var5;
7153 var6 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
7154 if (var6){
7155 if (varonce) {
7156 var7 = varonce;
7157 } else {
7158 var8 = "/*BUG: no live types for ";
7159 var9 = 25;
7160 var10 = string__NativeString__to_s_with_length(var8, var9);
7161 var7 = var10;
7162 varonce = var7;
7163 }
7164 var11 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7165 if (varonce12) {
7166 var13 = varonce12;
7167 } else {
7168 var14 = " . ";
7169 var15 = 3;
7170 var16 = string__NativeString__to_s_with_length(var14, var15);
7171 var13 = var16;
7172 varonce12 = var13;
7173 }
7174 if (varonce17) {
7175 var18 = varonce17;
7176 } else {
7177 var19 = "*/";
7178 var20 = 2;
7179 var21 = string__NativeString__to_s_with_length(var19, var20);
7180 var18 = var21;
7181 varonce17 = var18;
7182 }
7183 var22 = NEW_array__Array(&type_array__Arraykernel__Object);
7184 { /* var22 = array_instance Array[Object] */
7185 var23 = 5;
7186 var24 = NEW_array__NativeArray(var23, &type_array__NativeArraykernel__Object);
7187 ((struct instance_array__NativeArray*)var24)->values[0] = (val*) var7;
7188 ((struct instance_array__NativeArray*)var24)->values[1] = (val*) var11;
7189 ((struct instance_array__NativeArray*)var24)->values[2] = (val*) var13;
7190 ((struct instance_array__NativeArray*)var24)->values[3] = (val*) var_a;
7191 ((struct instance_array__NativeArray*)var24)->values[4] = (val*) var18;
7192 ((void (*)(val*, val*, long))(var22->class->vft[COLOR_array__Array__with_native]))(var22, var24, var23) /* with_native on <var22:Array[Object]>*/;
7193 }
7194 var25 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__to_s]))(var22) /* to_s on <var22:Array[Object]>*/;
7195 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var25) /* add on <self:GlobalCompilerVisitor>*/;
7196 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7197 var = var_res;
7198 goto RET_LABEL;
7199 } else {
7200 }
7201 if (varonce26) {
7202 var27 = varonce26;
7203 } else {
7204 var28 = "/* read ";
7205 var29 = 8;
7206 var30 = string__NativeString__to_s_with_length(var28, var29);
7207 var27 = var30;
7208 varonce26 = var27;
7209 }
7210 if (varonce31) {
7211 var32 = varonce31;
7212 } else {
7213 var33 = " on ";
7214 var34 = 4;
7215 var35 = string__NativeString__to_s_with_length(var33, var34);
7216 var32 = var35;
7217 varonce31 = var32;
7218 }
7219 var36 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7220 if (varonce37) {
7221 var38 = varonce37;
7222 } else {
7223 var39 = " */";
7224 var40 = 3;
7225 var41 = string__NativeString__to_s_with_length(var39, var40);
7226 var38 = var41;
7227 varonce37 = var38;
7228 }
7229 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
7230 { /* var42 = array_instance Array[Object] */
7231 var43 = 5;
7232 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
7233 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var27;
7234 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_a;
7235 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var32;
7236 ((struct instance_array__NativeArray*)var44)->values[3] = (val*) var36;
7237 ((struct instance_array__NativeArray*)var44)->values[4] = (val*) var38;
7238 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
7239 }
7240 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
7241 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var45) /* add on <self:GlobalCompilerVisitor>*/;
7242 if (varonce46) {
7243 var47 = varonce46;
7244 } else {
7245 var48 = "switch(";
7246 var49 = 7;
7247 var50 = string__NativeString__to_s_with_length(var48, var49);
7248 var47 = var50;
7249 varonce46 = var47;
7250 }
7251 if (varonce51) {
7252 var52 = varonce51;
7253 } else {
7254 var53 = "->classid) {";
7255 var54 = 12;
7256 var55 = string__NativeString__to_s_with_length(var53, var54);
7257 var52 = var55;
7258 varonce51 = var52;
7259 }
7260 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
7261 { /* var56 = array_instance Array[Object] */
7262 var57 = 3;
7263 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
7264 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var47;
7265 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var_recv;
7266 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var52;
7267 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
7268 }
7269 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
7270 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
7271 var60 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
7272 var_last = var60;
7273 var61 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
7274 for(;;) {
7275 var62 = ((short int (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var61) /* is_ok on <var61:Iterator[nullable Object]>*/;
7276 if(!var62) break;
7277 var63 = ((val* (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__item]))(var61) /* item on <var61:Iterator[nullable Object]>*/;
7278 var_t = var63;
7279 var65 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7280 var66 = ((short int (*)(val*))(var65->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var65) /* hardening on <var65:AbstractCompiler(GlobalCompiler)>*/;
7281 var67 = !var66;
7282 var_ = var67;
7283 if (var67){
7284 var68 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
7285 var64 = var68;
7286 } else {
7287 var64 = var_;
7288 }
7289 if (var64){
7290 if (varonce69) {
7291 var70 = varonce69;
7292 } else {
7293 var71 = "default: /*";
7294 var72 = 11;
7295 var73 = string__NativeString__to_s_with_length(var71, var72);
7296 var70 = var73;
7297 varonce69 = var70;
7298 }
7299 var74 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7300 var75 = ((val* (*)(val*, val*))(var74->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var74, var_t) /* classid on <var74:AbstractCompiler(GlobalCompiler)>*/;
7301 if (varonce76) {
7302 var77 = varonce76;
7303 } else {
7304 var78 = "*/";
7305 var79 = 2;
7306 var80 = string__NativeString__to_s_with_length(var78, var79);
7307 var77 = var80;
7308 varonce76 = var77;
7309 }
7310 var81 = NEW_array__Array(&type_array__Arraykernel__Object);
7311 { /* var81 = array_instance Array[Object] */
7312 var82 = 3;
7313 var83 = NEW_array__NativeArray(var82, &type_array__NativeArraykernel__Object);
7314 ((struct instance_array__NativeArray*)var83)->values[0] = (val*) var70;
7315 ((struct instance_array__NativeArray*)var83)->values[1] = (val*) var75;
7316 ((struct instance_array__NativeArray*)var83)->values[2] = (val*) var77;
7317 ((void (*)(val*, val*, long))(var81->class->vft[COLOR_array__Array__with_native]))(var81, var83, var82) /* with_native on <var81:Array[Object]>*/;
7318 }
7319 var84 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__to_s]))(var81) /* to_s on <var81:Array[Object]>*/;
7320 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var84) /* add on <self:GlobalCompilerVisitor>*/;
7321 } else {
7322 if (varonce85) {
7323 var86 = varonce85;
7324 } else {
7325 var87 = "case ";
7326 var88 = 5;
7327 var89 = string__NativeString__to_s_with_length(var87, var88);
7328 var86 = var89;
7329 varonce85 = var86;
7330 }
7331 var90 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7332 var91 = ((val* (*)(val*, val*))(var90->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var90, var_t) /* classid on <var90:AbstractCompiler(GlobalCompiler)>*/;
7333 if (varonce92) {
7334 var93 = varonce92;
7335 } else {
7336 var94 = ":";
7337 var95 = 1;
7338 var96 = string__NativeString__to_s_with_length(var94, var95);
7339 var93 = var96;
7340 varonce92 = var93;
7341 }
7342 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
7343 { /* var97 = array_instance Array[Object] */
7344 var98 = 3;
7345 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
7346 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var86;
7347 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var91;
7348 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
7349 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
7350 }
7351 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
7352 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var100) /* add on <self:GlobalCompilerVisitor>*/;
7353 }
7354 var101 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
7355 var_recv2 = var101;
7356 var102 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7357 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var102) /* static_mtype on <var102:MPropDef(MAttributeDef)>*/;
7358 if (var103 == NULL) {
7359 fprintf(stderr, "Runtime error: %s", "Cast failed");
7360 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 634);
7361 show_backtrace(1);
7362 }
7363 var_ta = var103;
7364 var104 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7365 var_ta = var104;
7366 if (varonce105) {
7367 var106 = varonce105;
7368 } else {
7369 var107 = "((struct ";
7370 var108 = 9;
7371 var109 = string__NativeString__to_s_with_length(var107, var108);
7372 var106 = var109;
7373 varonce105 = var106;
7374 }
7375 var110 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
7376 if (varonce111) {
7377 var112 = varonce111;
7378 } else {
7379 var113 = "*)";
7380 var114 = 2;
7381 var115 = string__NativeString__to_s_with_length(var113, var114);
7382 var112 = var115;
7383 varonce111 = var112;
7384 }
7385 if (varonce116) {
7386 var117 = varonce116;
7387 } else {
7388 var118 = ")->";
7389 var119 = 3;
7390 var120 = string__NativeString__to_s_with_length(var118, var119);
7391 var117 = var120;
7392 varonce116 = var117;
7393 }
7394 var121 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7395 var122 = ((val* (*)(val*))(var121->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var121) /* c_name on <var121:MPropDef(MAttributeDef)>*/;
7396 var123 = NEW_array__Array(&type_array__Arraykernel__Object);
7397 { /* var123 = array_instance Array[Object] */
7398 var124 = 6;
7399 var125 = NEW_array__NativeArray(var124, &type_array__NativeArraykernel__Object);
7400 ((struct instance_array__NativeArray*)var125)->values[0] = (val*) var106;
7401 ((struct instance_array__NativeArray*)var125)->values[1] = (val*) var110;
7402 ((struct instance_array__NativeArray*)var125)->values[2] = (val*) var112;
7403 ((struct instance_array__NativeArray*)var125)->values[3] = (val*) var_recv;
7404 ((struct instance_array__NativeArray*)var125)->values[4] = (val*) var117;
7405 ((struct instance_array__NativeArray*)var125)->values[5] = (val*) var122;
7406 ((void (*)(val*, val*, long))(var123->class->vft[COLOR_array__Array__with_native]))(var123, var125, var124) /* with_native on <var123:Array[Object]>*/;
7407 }
7408 var126 = ((val* (*)(val*))(var123->class->vft[COLOR_string__Object__to_s]))(var123) /* to_s on <var123:Array[Object]>*/;
7409 var127 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var126, var_ta) /* new_expr on <self:GlobalCompilerVisitor>*/;
7410 var_res2 = var127;
7411 /* <var_ta:MType> isa MNullableType */
7412 cltype = type_model__MNullableType.color;
7413 idtype = type_model__MNullableType.id;
7414 if(cltype >= var_ta->type->table_size) {
7415 var129 = 0;
7416 } else {
7417 var129 = var_ta->type->type_table[cltype] == idtype;
7418 }
7419 var130 = !var129;
7420 var_131 = var130;
7421 if (var130){
7422 var132 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7423 var133 = ((val* (*)(val*))(var132->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var132) /* modelbuilder on <var132:AbstractCompiler(GlobalCompiler)>*/;
7424 var134 = ((val* (*)(val*))(var133->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var133) /* toolcontext on <var133:ModelBuilder>*/;
7425 var135 = ((val* (*)(val*))(var134->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_other]))(var134) /* opt_no_check_other on <var134:ToolContext>*/;
7426 var136 = ((val* (*)(val*))(var135->class->vft[COLOR_opts__Option__value]))(var135) /* value on <var135:OptionBool>*/;
7427 var137 = ((struct instance_kernel__Bool*)var136)->value; /* autounbox from nullable Object to Bool */;
7428 var138 = !var137;
7429 var128 = var138;
7430 } else {
7431 var128 = var_131;
7432 }
7433 if (var128){
7434 var139 = ((val* (*)(val*))(var_ta->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_ta) /* ctype on <var_ta:MType>*/;
7435 if (varonce140) {
7436 var141 = varonce140;
7437 } else {
7438 var142 = "val*";
7439 var143 = 4;
7440 var144 = string__NativeString__to_s_with_length(var142, var143);
7441 var141 = var144;
7442 varonce140 = var141;
7443 }
7444 var145 = ((short int (*)(val*, val*))(var139->class->vft[COLOR_kernel__Object___61d_61d]))(var139, var141) /* == on <var139:String>*/;
7445 if (var145){
7446 if (varonce146) {
7447 var147 = varonce146;
7448 } else {
7449 var148 = "if (";
7450 var149 = 4;
7451 var150 = string__NativeString__to_s_with_length(var148, var149);
7452 var147 = var150;
7453 varonce146 = var147;
7454 }
7455 if (varonce151) {
7456 var152 = varonce151;
7457 } else {
7458 var153 = " == NULL) {";
7459 var154 = 11;
7460 var155 = string__NativeString__to_s_with_length(var153, var154);
7461 var152 = var155;
7462 varonce151 = var152;
7463 }
7464 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
7465 { /* var156 = array_instance Array[Object] */
7466 var157 = 3;
7467 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
7468 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var147;
7469 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var_res2;
7470 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var152;
7471 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
7472 }
7473 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
7474 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var159) /* add on <self:GlobalCompilerVisitor>*/;
7475 if (varonce160) {
7476 var161 = varonce160;
7477 } else {
7478 var162 = "Uninitialized attribute ";
7479 var163 = 24;
7480 var164 = string__NativeString__to_s_with_length(var162, var163);
7481 var161 = var164;
7482 varonce160 = var161;
7483 }
7484 var165 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__name]))(var_a) /* name on <var_a:MAttribute>*/;
7485 var166 = NEW_array__Array(&type_array__Arraykernel__Object);
7486 { /* var166 = array_instance Array[Object] */
7487 var167 = 2;
7488 var168 = NEW_array__NativeArray(var167, &type_array__NativeArraykernel__Object);
7489 ((struct instance_array__NativeArray*)var168)->values[0] = (val*) var161;
7490 ((struct instance_array__NativeArray*)var168)->values[1] = (val*) var165;
7491 ((void (*)(val*, val*, long))(var166->class->vft[COLOR_array__Array__with_native]))(var166, var168, var167) /* with_native on <var166:Array[Object]>*/;
7492 }
7493 var169 = ((val* (*)(val*))(var166->class->vft[COLOR_string__Object__to_s]))(var166) /* to_s on <var166:Array[Object]>*/;
7494 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var169) /* add_abort on <self:GlobalCompilerVisitor>*/;
7495 if (varonce170) {
7496 var171 = varonce170;
7497 } else {
7498 var172 = "}";
7499 var173 = 1;
7500 var174 = string__NativeString__to_s_with_length(var172, var173);
7501 var171 = var174;
7502 varonce170 = var171;
7503 }
7504 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
7505 } else {
7506 if (varonce175) {
7507 var176 = varonce175;
7508 } else {
7509 var177 = "/*NOTYET isset on primitive attributes*/";
7510 var178 = 40;
7511 var179 = string__NativeString__to_s_with_length(var177, var178);
7512 var176 = var179;
7513 varonce175 = var176;
7514 }
7515 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var176) /* add on <self:GlobalCompilerVisitor>*/;
7516 }
7517 } else {
7518 }
7519 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
7520 if (varonce180) {
7521 var181 = varonce180;
7522 } else {
7523 var182 = "break;";
7524 var183 = 6;
7525 var184 = string__NativeString__to_s_with_length(var182, var183);
7526 var181 = var184;
7527 varonce180 = var181;
7528 }
7529 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var181) /* add on <self:GlobalCompilerVisitor>*/;
7530 CONTINUE_label: (void)0;
7531 ((void (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__next]))(var61) /* next on <var61:Iterator[nullable Object]>*/;
7532 }
7533 BREAK_label: (void)0;
7534 var185 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7535 var186 = ((short int (*)(val*))(var185->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var185) /* hardening on <var185:AbstractCompiler(GlobalCompiler)>*/;
7536 if (var186){
7537 if (varonce187) {
7538 var188 = varonce187;
7539 } else {
7540 var189 = "default: /* Bug */";
7541 var190 = 18;
7542 var191 = string__NativeString__to_s_with_length(var189, var190);
7543 var188 = var191;
7544 varonce187 = var188;
7545 }
7546 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
7547 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7548 } else {
7549 }
7550 if (varonce192) {
7551 var193 = varonce192;
7552 } else {
7553 var194 = "}";
7554 var195 = 1;
7555 var196 = string__NativeString__to_s_with_length(var194, var195);
7556 var193 = var196;
7557 varonce192 = var193;
7558 }
7559 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var193) /* add on <self:GlobalCompilerVisitor>*/;
7560 var = var_res;
7561 goto RET_LABEL;
7562 RET_LABEL:;
7563 return var;
7564 }
7565 /* method global_compiler#GlobalCompilerVisitor#read_attribute for (self: Object, MAttribute, RuntimeVariable): RuntimeVariable */
7566 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__read_attribute(val* self, val* p0, val* p1) {
7567 val* var /* : RuntimeVariable */;
7568 val* var1 /* : RuntimeVariable */;
7569 var1 = global_compiler__GlobalCompilerVisitor__read_attribute(self, p0, p1);
7570 var = var1;
7571 RET_LABEL:;
7572 return var;
7573 }
7574 /* method global_compiler#GlobalCompilerVisitor#write_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable, RuntimeVariable) */
7575 void global_compiler__GlobalCompilerVisitor__write_attribute(val* self, val* p0, val* p1, val* p2) {
7576 val* var_a /* var a: MAttribute */;
7577 val* var_recv /* var recv: RuntimeVariable */;
7578 val* var_value /* var value: RuntimeVariable */;
7579 val* var /* : Array[MClassType] */;
7580 val* var_types /* var types: Array[MClassType] */;
7581 short int var1 /* : Bool */;
7582 static val* varonce;
7583 val* var2 /* : String */;
7584 char* var3 /* : NativeString */;
7585 long var4 /* : Int */;
7586 val* var5 /* : String */;
7587 val* var6 /* : String */;
7588 static val* varonce7;
7589 val* var8 /* : String */;
7590 char* var9 /* : NativeString */;
7591 long var10 /* : Int */;
7592 val* var11 /* : String */;
7593 static val* varonce12;
7594 val* var13 /* : String */;
7595 char* var14 /* : NativeString */;
7596 long var15 /* : Int */;
7597 val* var16 /* : String */;
7598 val* var17 /* : Array[Object] */;
7599 long var18 /* : Int */;
7600 val* var19 /* : NativeArray[Object] */;
7601 val* var20 /* : String */;
7602 static val* varonce21;
7603 val* var22 /* : String */;
7604 char* var23 /* : NativeString */;
7605 long var24 /* : Int */;
7606 val* var25 /* : String */;
7607 static val* varonce26;
7608 val* var27 /* : String */;
7609 char* var28 /* : NativeString */;
7610 long var29 /* : Int */;
7611 val* var30 /* : String */;
7612 val* var31 /* : String */;
7613 static val* varonce32;
7614 val* var33 /* : String */;
7615 char* var34 /* : NativeString */;
7616 long var35 /* : Int */;
7617 val* var36 /* : String */;
7618 val* var37 /* : Array[Object] */;
7619 long var38 /* : Int */;
7620 val* var39 /* : NativeArray[Object] */;
7621 val* var40 /* : String */;
7622 static val* varonce41;
7623 val* var42 /* : String */;
7624 char* var43 /* : NativeString */;
7625 long var44 /* : Int */;
7626 val* var45 /* : String */;
7627 static val* varonce46;
7628 val* var47 /* : String */;
7629 char* var48 /* : NativeString */;
7630 long var49 /* : Int */;
7631 val* var50 /* : String */;
7632 val* var51 /* : Array[Object] */;
7633 long var52 /* : Int */;
7634 val* var53 /* : NativeArray[Object] */;
7635 val* var54 /* : String */;
7636 val* var55 /* : nullable Object */;
7637 val* var_last /* var last: MClassType */;
7638 val* var56 /* : Iterator[nullable Object] */;
7639 short int var57 /* : Bool */;
7640 val* var58 /* : nullable Object */;
7641 val* var_t /* var t: MClassType */;
7642 short int var59 /* : Bool */;
7643 val* var60 /* : AbstractCompiler */;
7644 short int var61 /* : Bool */;
7645 short int var62 /* : Bool */;
7646 short int var_ /* var : Bool */;
7647 short int var63 /* : Bool */;
7648 static val* varonce64;
7649 val* var65 /* : String */;
7650 char* var66 /* : NativeString */;
7651 long var67 /* : Int */;
7652 val* var68 /* : String */;
7653 val* var69 /* : AbstractCompiler */;
7654 val* var70 /* : String */;
7655 static val* varonce71;
7656 val* var72 /* : String */;
7657 char* var73 /* : NativeString */;
7658 long var74 /* : Int */;
7659 val* var75 /* : String */;
7660 val* var76 /* : Array[Object] */;
7661 long var77 /* : Int */;
7662 val* var78 /* : NativeArray[Object] */;
7663 val* var79 /* : String */;
7664 static val* varonce80;
7665 val* var81 /* : String */;
7666 char* var82 /* : NativeString */;
7667 long var83 /* : Int */;
7668 val* var84 /* : String */;
7669 val* var85 /* : AbstractCompiler */;
7670 val* var86 /* : String */;
7671 static val* varonce87;
7672 val* var88 /* : String */;
7673 char* var89 /* : NativeString */;
7674 long var90 /* : Int */;
7675 val* var91 /* : String */;
7676 val* var92 /* : Array[Object] */;
7677 long var93 /* : Int */;
7678 val* var94 /* : NativeArray[Object] */;
7679 val* var95 /* : String */;
7680 val* var96 /* : RuntimeVariable */;
7681 val* var_recv2 /* var recv2: RuntimeVariable */;
7682 val* var97 /* : MPropDef */;
7683 val* var98 /* : nullable MType */;
7684 val* var_ta /* var ta: MType */;
7685 val* var99 /* : MType */;
7686 static val* varonce100;
7687 val* var101 /* : String */;
7688 char* var102 /* : NativeString */;
7689 long var103 /* : Int */;
7690 val* var104 /* : String */;
7691 val* var105 /* : String */;
7692 static val* varonce106;
7693 val* var107 /* : String */;
7694 char* var108 /* : NativeString */;
7695 long var109 /* : Int */;
7696 val* var110 /* : String */;
7697 static val* varonce111;
7698 val* var112 /* : String */;
7699 char* var113 /* : NativeString */;
7700 long var114 /* : Int */;
7701 val* var115 /* : String */;
7702 val* var116 /* : MPropDef */;
7703 val* var117 /* : String */;
7704 static val* varonce118;
7705 val* var119 /* : String */;
7706 char* var120 /* : NativeString */;
7707 long var121 /* : Int */;
7708 val* var122 /* : String */;
7709 val* var123 /* : RuntimeVariable */;
7710 static val* varonce124;
7711 val* var125 /* : String */;
7712 char* var126 /* : NativeString */;
7713 long var127 /* : Int */;
7714 val* var128 /* : String */;
7715 val* var129 /* : Array[Object] */;
7716 long var130 /* : Int */;
7717 val* var131 /* : NativeArray[Object] */;
7718 val* var132 /* : String */;
7719 static val* varonce133;
7720 val* var134 /* : String */;
7721 char* var135 /* : NativeString */;
7722 long var136 /* : Int */;
7723 val* var137 /* : String */;
7724 val* var138 /* : AbstractCompiler */;
7725 short int var139 /* : Bool */;
7726 static val* varonce140;
7727 val* var141 /* : String */;
7728 char* var142 /* : NativeString */;
7729 long var143 /* : Int */;
7730 val* var144 /* : String */;
7731 static val* varonce145;
7732 val* var146 /* : String */;
7733 char* var147 /* : NativeString */;
7734 long var148 /* : Int */;
7735 val* var149 /* : String */;
7736 var_a = p0;
7737 var_recv = p1;
7738 var_value = p2;
7739 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
7740 var = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
7741 var_types = var;
7742 var1 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
7743 if (var1){
7744 if (varonce) {
7745 var2 = varonce;
7746 } else {
7747 var3 = "/*BUG: no live types for ";
7748 var4 = 25;
7749 var5 = string__NativeString__to_s_with_length(var3, var4);
7750 var2 = var5;
7751 varonce = var2;
7752 }
7753 var6 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7754 if (varonce7) {
7755 var8 = varonce7;
7756 } else {
7757 var9 = " . ";
7758 var10 = 3;
7759 var11 = string__NativeString__to_s_with_length(var9, var10);
7760 var8 = var11;
7761 varonce7 = var8;
7762 }
7763 if (varonce12) {
7764 var13 = varonce12;
7765 } else {
7766 var14 = "*/";
7767 var15 = 2;
7768 var16 = string__NativeString__to_s_with_length(var14, var15);
7769 var13 = var16;
7770 varonce12 = var13;
7771 }
7772 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
7773 { /* var17 = array_instance Array[Object] */
7774 var18 = 5;
7775 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
7776 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var2;
7777 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var6;
7778 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var8;
7779 ((struct instance_array__NativeArray*)var19)->values[3] = (val*) var_a;
7780 ((struct instance_array__NativeArray*)var19)->values[4] = (val*) var13;
7781 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
7782 }
7783 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
7784 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var20) /* add on <self:GlobalCompilerVisitor>*/;
7785 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7786 goto RET_LABEL;
7787 } else {
7788 }
7789 if (varonce21) {
7790 var22 = varonce21;
7791 } else {
7792 var23 = "/* write ";
7793 var24 = 9;
7794 var25 = string__NativeString__to_s_with_length(var23, var24);
7795 var22 = var25;
7796 varonce21 = var22;
7797 }
7798 if (varonce26) {
7799 var27 = varonce26;
7800 } else {
7801 var28 = " on ";
7802 var29 = 4;
7803 var30 = string__NativeString__to_s_with_length(var28, var29);
7804 var27 = var30;
7805 varonce26 = var27;
7806 }
7807 var31 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7808 if (varonce32) {
7809 var33 = varonce32;
7810 } else {
7811 var34 = " */";
7812 var35 = 3;
7813 var36 = string__NativeString__to_s_with_length(var34, var35);
7814 var33 = var36;
7815 varonce32 = var33;
7816 }
7817 var37 = NEW_array__Array(&type_array__Arraykernel__Object);
7818 { /* var37 = array_instance Array[Object] */
7819 var38 = 5;
7820 var39 = NEW_array__NativeArray(var38, &type_array__NativeArraykernel__Object);
7821 ((struct instance_array__NativeArray*)var39)->values[0] = (val*) var22;
7822 ((struct instance_array__NativeArray*)var39)->values[1] = (val*) var_a;
7823 ((struct instance_array__NativeArray*)var39)->values[2] = (val*) var27;
7824 ((struct instance_array__NativeArray*)var39)->values[3] = (val*) var31;
7825 ((struct instance_array__NativeArray*)var39)->values[4] = (val*) var33;
7826 ((void (*)(val*, val*, long))(var37->class->vft[COLOR_array__Array__with_native]))(var37, var39, var38) /* with_native on <var37:Array[Object]>*/;
7827 }
7828 var40 = ((val* (*)(val*))(var37->class->vft[COLOR_string__Object__to_s]))(var37) /* to_s on <var37:Array[Object]>*/;
7829 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var40) /* add on <self:GlobalCompilerVisitor>*/;
7830 if (varonce41) {
7831 var42 = varonce41;
7832 } else {
7833 var43 = "switch(";
7834 var44 = 7;
7835 var45 = string__NativeString__to_s_with_length(var43, var44);
7836 var42 = var45;
7837 varonce41 = var42;
7838 }
7839 if (varonce46) {
7840 var47 = varonce46;
7841 } else {
7842 var48 = "->classid) {";
7843 var49 = 12;
7844 var50 = string__NativeString__to_s_with_length(var48, var49);
7845 var47 = var50;
7846 varonce46 = var47;
7847 }
7848 var51 = NEW_array__Array(&type_array__Arraykernel__Object);
7849 { /* var51 = array_instance Array[Object] */
7850 var52 = 3;
7851 var53 = NEW_array__NativeArray(var52, &type_array__NativeArraykernel__Object);
7852 ((struct instance_array__NativeArray*)var53)->values[0] = (val*) var42;
7853 ((struct instance_array__NativeArray*)var53)->values[1] = (val*) var_recv;
7854 ((struct instance_array__NativeArray*)var53)->values[2] = (val*) var47;
7855 ((void (*)(val*, val*, long))(var51->class->vft[COLOR_array__Array__with_native]))(var51, var53, var52) /* with_native on <var51:Array[Object]>*/;
7856 }
7857 var54 = ((val* (*)(val*))(var51->class->vft[COLOR_string__Object__to_s]))(var51) /* to_s on <var51:Array[Object]>*/;
7858 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var54) /* add on <self:GlobalCompilerVisitor>*/;
7859 var55 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
7860 var_last = var55;
7861 var56 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
7862 for(;;) {
7863 var57 = ((short int (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var56) /* is_ok on <var56:Iterator[nullable Object]>*/;
7864 if(!var57) break;
7865 var58 = ((val* (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__item]))(var56) /* item on <var56:Iterator[nullable Object]>*/;
7866 var_t = var58;
7867 var60 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7868 var61 = ((short int (*)(val*))(var60->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var60) /* hardening on <var60:AbstractCompiler(GlobalCompiler)>*/;
7869 var62 = !var61;
7870 var_ = var62;
7871 if (var62){
7872 var63 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
7873 var59 = var63;
7874 } else {
7875 var59 = var_;
7876 }
7877 if (var59){
7878 if (varonce64) {
7879 var65 = varonce64;
7880 } else {
7881 var66 = "default: /*";
7882 var67 = 11;
7883 var68 = string__NativeString__to_s_with_length(var66, var67);
7884 var65 = var68;
7885 varonce64 = var65;
7886 }
7887 var69 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7888 var70 = ((val* (*)(val*, val*))(var69->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var69, var_t) /* classid on <var69:AbstractCompiler(GlobalCompiler)>*/;
7889 if (varonce71) {
7890 var72 = varonce71;
7891 } else {
7892 var73 = "*/";
7893 var74 = 2;
7894 var75 = string__NativeString__to_s_with_length(var73, var74);
7895 var72 = var75;
7896 varonce71 = var72;
7897 }
7898 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
7899 { /* var76 = array_instance Array[Object] */
7900 var77 = 3;
7901 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
7902 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var65;
7903 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var70;
7904 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var72;
7905 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
7906 }
7907 var79 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
7908 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var79) /* add on <self:GlobalCompilerVisitor>*/;
7909 } else {
7910 if (varonce80) {
7911 var81 = varonce80;
7912 } else {
7913 var82 = "case ";
7914 var83 = 5;
7915 var84 = string__NativeString__to_s_with_length(var82, var83);
7916 var81 = var84;
7917 varonce80 = var81;
7918 }
7919 var85 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7920 var86 = ((val* (*)(val*, val*))(var85->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var85, var_t) /* classid on <var85:AbstractCompiler(GlobalCompiler)>*/;
7921 if (varonce87) {
7922 var88 = varonce87;
7923 } else {
7924 var89 = ":";
7925 var90 = 1;
7926 var91 = string__NativeString__to_s_with_length(var89, var90);
7927 var88 = var91;
7928 varonce87 = var88;
7929 }
7930 var92 = NEW_array__Array(&type_array__Arraykernel__Object);
7931 { /* var92 = array_instance Array[Object] */
7932 var93 = 3;
7933 var94 = NEW_array__NativeArray(var93, &type_array__NativeArraykernel__Object);
7934 ((struct instance_array__NativeArray*)var94)->values[0] = (val*) var81;
7935 ((struct instance_array__NativeArray*)var94)->values[1] = (val*) var86;
7936 ((struct instance_array__NativeArray*)var94)->values[2] = (val*) var88;
7937 ((void (*)(val*, val*, long))(var92->class->vft[COLOR_array__Array__with_native]))(var92, var94, var93) /* with_native on <var92:Array[Object]>*/;
7938 }
7939 var95 = ((val* (*)(val*))(var92->class->vft[COLOR_string__Object__to_s]))(var92) /* to_s on <var92:Array[Object]>*/;
7940 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var95) /* add on <self:GlobalCompilerVisitor>*/;
7941 }
7942 var96 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
7943 var_recv2 = var96;
7944 var97 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7945 var98 = ((val* (*)(val*))(var97->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var97) /* static_mtype on <var97:MPropDef(MAttributeDef)>*/;
7946 if (var98 == NULL) {
7947 fprintf(stderr, "Runtime error: %s", "Cast failed");
7948 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 679);
7949 show_backtrace(1);
7950 }
7951 var_ta = var98;
7952 var99 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7953 var_ta = var99;
7954 if (varonce100) {
7955 var101 = varonce100;
7956 } else {
7957 var102 = "((struct ";
7958 var103 = 9;
7959 var104 = string__NativeString__to_s_with_length(var102, var103);
7960 var101 = var104;
7961 varonce100 = var101;
7962 }
7963 var105 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
7964 if (varonce106) {
7965 var107 = varonce106;
7966 } else {
7967 var108 = "*)";
7968 var109 = 2;
7969 var110 = string__NativeString__to_s_with_length(var108, var109);
7970 var107 = var110;
7971 varonce106 = var107;
7972 }
7973 if (varonce111) {
7974 var112 = varonce111;
7975 } else {
7976 var113 = ")->";
7977 var114 = 3;
7978 var115 = string__NativeString__to_s_with_length(var113, var114);
7979 var112 = var115;
7980 varonce111 = var112;
7981 }
7982 var116 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7983 var117 = ((val* (*)(val*))(var116->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var116) /* c_name on <var116:MPropDef(MAttributeDef)>*/;
7984 if (varonce118) {
7985 var119 = varonce118;
7986 } else {
7987 var120 = " = ";
7988 var121 = 3;
7989 var122 = string__NativeString__to_s_with_length(var120, var121);
7990 var119 = var122;
7991 varonce118 = var119;
7992 }
7993 var123 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var_value, var_ta) /* autobox on <self:GlobalCompilerVisitor>*/;
7994 if (varonce124) {
7995 var125 = varonce124;
7996 } else {
7997 var126 = ";";
7998 var127 = 1;
7999 var128 = string__NativeString__to_s_with_length(var126, var127);
8000 var125 = var128;
8001 varonce124 = var125;
8002 }
8003 var129 = NEW_array__Array(&type_array__Arraykernel__Object);
8004 { /* var129 = array_instance Array[Object] */
8005 var130 = 9;
8006 var131 = NEW_array__NativeArray(var130, &type_array__NativeArraykernel__Object);
8007 ((struct instance_array__NativeArray*)var131)->values[0] = (val*) var101;
8008 ((struct instance_array__NativeArray*)var131)->values[1] = (val*) var105;
8009 ((struct instance_array__NativeArray*)var131)->values[2] = (val*) var107;
8010 ((struct instance_array__NativeArray*)var131)->values[3] = (val*) var_recv;
8011 ((struct instance_array__NativeArray*)var131)->values[4] = (val*) var112;
8012 ((struct instance_array__NativeArray*)var131)->values[5] = (val*) var117;
8013 ((struct instance_array__NativeArray*)var131)->values[6] = (val*) var119;
8014 ((struct instance_array__NativeArray*)var131)->values[7] = (val*) var123;
8015 ((struct instance_array__NativeArray*)var131)->values[8] = (val*) var125;
8016 ((void (*)(val*, val*, long))(var129->class->vft[COLOR_array__Array__with_native]))(var129, var131, var130) /* with_native on <var129:Array[Object]>*/;
8017 }
8018 var132 = ((val* (*)(val*))(var129->class->vft[COLOR_string__Object__to_s]))(var129) /* to_s on <var129:Array[Object]>*/;
8019 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var132) /* add on <self:GlobalCompilerVisitor>*/;
8020 if (varonce133) {
8021 var134 = varonce133;
8022 } else {
8023 var135 = "break;";
8024 var136 = 6;
8025 var137 = string__NativeString__to_s_with_length(var135, var136);
8026 var134 = var137;
8027 varonce133 = var134;
8028 }
8029 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
8030 CONTINUE_label: (void)0;
8031 ((void (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__next]))(var56) /* next on <var56:Iterator[nullable Object]>*/;
8032 }
8033 BREAK_label: (void)0;
8034 var138 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8035 var139 = ((short int (*)(val*))(var138->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var138) /* hardening on <var138:AbstractCompiler(GlobalCompiler)>*/;
8036 if (var139){
8037 if (varonce140) {
8038 var141 = varonce140;
8039 } else {
8040 var142 = "default: /* Bug*/";
8041 var143 = 17;
8042 var144 = string__NativeString__to_s_with_length(var142, var143);
8043 var141 = var144;
8044 varonce140 = var141;
8045 }
8046 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var141) /* add on <self:GlobalCompilerVisitor>*/;
8047 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
8048 } else {
8049 }
8050 if (varonce145) {
8051 var146 = varonce145;
8052 } else {
8053 var147 = "}";
8054 var148 = 1;
8055 var149 = string__NativeString__to_s_with_length(var147, var148);
8056 var146 = var149;
8057 varonce145 = var146;
8058 }
8059 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var146) /* add on <self:GlobalCompilerVisitor>*/;
8060 RET_LABEL:;
8061 }
8062 /* method global_compiler#GlobalCompilerVisitor#write_attribute for (self: Object, MAttribute, RuntimeVariable, RuntimeVariable) */
8063 void VIRTUAL_global_compiler__GlobalCompilerVisitor__write_attribute(val* self, val* p0, val* p1, val* p2) {
8064 global_compiler__GlobalCompilerVisitor__write_attribute(self, p0, p1, p2);
8065 RET_LABEL:;
8066 }
8067 /* method global_compiler#GlobalCompilerVisitor#init_instance for (self: GlobalCompilerVisitor, MClassType): RuntimeVariable */
8068 val* global_compiler__GlobalCompilerVisitor__init_instance(val* self, val* p0) {
8069 val* var /* : RuntimeVariable */;
8070 val* var_mtype /* var mtype: MClassType */;
8071 val* var1 /* : MType */;
8072 short int var2 /* : Bool */;
8073 int cltype;
8074 int idtype;
8075 const char* var_class_name;
8076 val* var3 /* : AbstractCompiler */;
8077 val* var4 /* : RapidTypeAnalysis */;
8078 val* var5 /* : HashSet[MClassType] */;
8079 short int var6 /* : Bool */;
8080 short int var7 /* : Bool */;
8081 static val* varonce;
8082 val* var8 /* : String */;
8083 char* var9 /* : NativeString */;
8084 long var10 /* : Int */;
8085 val* var11 /* : String */;
8086 static val* varonce12;
8087 val* var13 /* : String */;
8088 char* var14 /* : NativeString */;
8089 long var15 /* : Int */;
8090 val* var16 /* : String */;
8091 val* var17 /* : Array[Object] */;
8092 long var18 /* : Int */;
8093 val* var19 /* : NativeArray[Object] */;
8094 val* var20 /* : String */;
8095 static val* varonce21;
8096 val* var22 /* : String */;
8097 char* var23 /* : NativeString */;
8098 long var24 /* : Int */;
8099 val* var25 /* : String */;
8100 val* var26 /* : String */;
8101 static val* varonce27;
8102 val* var28 /* : String */;
8103 char* var29 /* : NativeString */;
8104 long var30 /* : Int */;
8105 val* var31 /* : String */;
8106 val* var32 /* : Array[Object] */;
8107 long var33 /* : Int */;
8108 val* var34 /* : NativeArray[Object] */;
8109 val* var35 /* : String */;
8110 val* var36 /* : RuntimeVariable */;
8111 val* var_res /* var res: RuntimeVariable */;
8112 short int var37 /* : Bool */;
8113 var_mtype = p0;
8114 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_mtype) /* anchor on <self:GlobalCompilerVisitor>*/;
8115 /* <var1:MType> isa MClassType */
8116 cltype = type_model__MClassType.color;
8117 idtype = type_model__MClassType.id;
8118 if(cltype >= var1->type->table_size) {
8119 var2 = 0;
8120 } else {
8121 var2 = var1->type->type_table[cltype] == idtype;
8122 }
8123 if (!var2) {
8124 var_class_name = var1 == NULL ? "null" : var1->type->name;
8125 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
8126 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 693);
8127 show_backtrace(1);
8128 }
8129 var_mtype = var1;
8130 var3 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8131 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var3) /* runtime_type_analysis on <var3:AbstractCompiler(GlobalCompiler)>*/;
8132 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var4) /* live_types on <var4:RapidTypeAnalysis>*/;
8133 var6 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__Collection__has]))(var5, var_mtype) /* has on <var5:HashSet[MClassType]>*/;
8134 var7 = !var6;
8135 if (var7){
8136 if (varonce) {
8137 var8 = varonce;
8138 } else {
8139 var9 = "problem: ";
8140 var10 = 9;
8141 var11 = string__NativeString__to_s_with_length(var9, var10);
8142 var8 = var11;
8143 varonce = var8;
8144 }
8145 if (varonce12) {
8146 var13 = varonce12;
8147 } else {
8148 var14 = " was detected dead";
8149 var15 = 18;
8150 var16 = string__NativeString__to_s_with_length(var14, var15);
8151 var13 = var16;
8152 varonce12 = var13;
8153 }
8154 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
8155 { /* var17 = array_instance Array[Object] */
8156 var18 = 3;
8157 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
8158 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var8;
8159 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var_mtype;
8160 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var13;
8161 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
8162 }
8163 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
8164 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var20) /* debug on <self:GlobalCompilerVisitor>*/;
8165 } else {
8166 }
8167 if (varonce21) {
8168 var22 = varonce21;
8169 } else {
8170 var23 = "NEW_";
8171 var24 = 4;
8172 var25 = string__NativeString__to_s_with_length(var23, var24);
8173 var22 = var25;
8174 varonce21 = var22;
8175 }
8176 var26 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
8177 if (varonce27) {
8178 var28 = varonce27;
8179 } else {
8180 var29 = "()";
8181 var30 = 2;
8182 var31 = string__NativeString__to_s_with_length(var29, var30);
8183 var28 = var31;
8184 varonce27 = var28;
8185 }
8186 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
8187 { /* var32 = array_instance Array[Object] */
8188 var33 = 3;
8189 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
8190 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var22;
8191 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var26;
8192 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var28;
8193 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
8194 }
8195 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
8196 var36 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var35, var_mtype) /* new_expr on <self:GlobalCompilerVisitor>*/;
8197 var_res = var36;
8198 var37 = 1;
8199 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var37) /* is_exact= on <var_res:RuntimeVariable>*/;
8200 var = var_res;
8201 goto RET_LABEL;
8202 RET_LABEL:;
8203 return var;
8204 }
8205 /* method global_compiler#GlobalCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
8206 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__init_instance(val* self, val* p0) {
8207 val* var /* : RuntimeVariable */;
8208 val* var1 /* : RuntimeVariable */;
8209 var1 = global_compiler__GlobalCompilerVisitor__init_instance(self, p0);
8210 var = var1;
8211 RET_LABEL:;
8212 return var;
8213 }
8214 /* method global_compiler#GlobalCompilerVisitor#type_test for (self: GlobalCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
8215 val* global_compiler__GlobalCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
8216 val* var /* : RuntimeVariable */;
8217 val* var_value /* var value: RuntimeVariable */;
8218 val* var_mtype /* var mtype: MType */;
8219 val* var_tag /* var tag: String */;
8220 val* var1 /* : MType */;
8221 val* var2 /* : AbstractCompiler */;
8222 val* var3 /* : RapidTypeAnalysis */;
8223 val* var4 /* : HashSet[MType] */;
8224 short int var5 /* : Bool */;
8225 short int var6 /* : Bool */;
8226 static val* varonce;
8227 val* var7 /* : String */;
8228 char* var8 /* : NativeString */;
8229 long var9 /* : Int */;
8230 val* var10 /* : String */;
8231 static val* varonce11;
8232 val* var12 /* : String */;
8233 char* var13 /* : NativeString */;
8234 long var14 /* : Int */;
8235 val* var15 /* : String */;
8236 val* var16 /* : Array[Object] */;
8237 long var17 /* : Int */;
8238 val* var18 /* : NativeArray[Object] */;
8239 val* var19 /* : String */;
8240 val* var20 /* : Array[MClassType] */;
8241 val* var_types /* var types: Array[MClassType] */;
8242 val* var21 /* : MClassType */;
8243 val* var22 /* : RuntimeVariable */;
8244 val* var_res /* var res: RuntimeVariable */;
8245 static val* varonce23;
8246 val* var24 /* : String */;
8247 char* var25 /* : NativeString */;
8248 long var26 /* : Int */;
8249 val* var27 /* : String */;
8250 static val* varonce28;
8251 val* var29 /* : String */;
8252 char* var30 /* : NativeString */;
8253 long var31 /* : Int */;
8254 val* var32 /* : String */;
8255 val* var33 /* : String */;
8256 static val* varonce34;
8257 val* var35 /* : String */;
8258 char* var36 /* : NativeString */;
8259 long var37 /* : Int */;
8260 val* var38 /* : String */;
8261 val* var39 /* : Array[Object] */;
8262 long var40 /* : Int */;
8263 val* var41 /* : NativeArray[Object] */;
8264 val* var42 /* : String */;
8265 val* var43 /* : MType */;
8266 val* var44 /* : String */;
8267 static val* varonce45;
8268 val* var46 /* : String */;
8269 char* var47 /* : NativeString */;
8270 long var48 /* : Int */;
8271 val* var49 /* : String */;
8272 short int var50 /* : Bool */;
8273 val* var51 /* : MType */;
8274 val* var52 /* : AbstractCompiler */;
8275 val* var53 /* : MModule */;
8276 val* var54 /* : null */;
8277 short int var55 /* : Bool */;
8278 static val* varonce56;
8279 val* var57 /* : String */;
8280 char* var58 /* : NativeString */;
8281 long var59 /* : Int */;
8282 val* var60 /* : String */;
8283 val* var61 /* : Array[Object] */;
8284 long var62 /* : Int */;
8285 val* var63 /* : NativeArray[Object] */;
8286 val* var64 /* : String */;
8287 static val* varonce65;
8288 val* var66 /* : String */;
8289 char* var67 /* : NativeString */;
8290 long var68 /* : Int */;
8291 val* var69 /* : String */;
8292 val* var70 /* : Array[Object] */;
8293 long var71 /* : Int */;
8294 val* var72 /* : NativeArray[Object] */;
8295 val* var73 /* : String */;
8296 short int var74 /* : Bool */;
8297 val* var75 /* : MType */;
8298 short int var76 /* : Bool */;
8299 int cltype;
8300 int idtype;
8301 short int var_ /* var : Bool */;
8302 val* var77 /* : MType */;
8303 short int var78 /* : Bool */;
8304 int cltype79;
8305 int idtype80;
8306 static val* varonce81;
8307 val* var82 /* : String */;
8308 char* var83 /* : NativeString */;
8309 long var84 /* : Int */;
8310 val* var85 /* : String */;
8311 static val* varonce86;
8312 val* var87 /* : String */;
8313 char* var88 /* : NativeString */;
8314 long var89 /* : Int */;
8315 val* var90 /* : String */;
8316 val* var91 /* : Array[Object] */;
8317 long var92 /* : Int */;
8318 val* var93 /* : NativeArray[Object] */;
8319 val* var94 /* : String */;
8320 short int var95 /* : Bool */;
8321 int cltype96;
8322 int idtype97;
8323 static val* varonce98;
8324 val* var99 /* : String */;
8325 char* var100 /* : NativeString */;
8326 long var101 /* : Int */;
8327 val* var102 /* : String */;
8328 static val* varonce103;
8329 val* var104 /* : String */;
8330 char* var105 /* : NativeString */;
8331 long var106 /* : Int */;
8332 val* var107 /* : String */;
8333 val* var108 /* : Array[Object] */;
8334 long var109 /* : Int */;
8335 val* var110 /* : NativeArray[Object] */;
8336 val* var111 /* : String */;
8337 static val* varonce112;
8338 val* var113 /* : String */;
8339 char* var114 /* : NativeString */;
8340 long var115 /* : Int */;
8341 val* var116 /* : String */;
8342 static val* varonce117;
8343 val* var118 /* : String */;
8344 char* var119 /* : NativeString */;
8345 long var120 /* : Int */;
8346 val* var121 /* : String */;
8347 val* var122 /* : Array[Object] */;
8348 long var123 /* : Int */;
8349 val* var124 /* : NativeArray[Object] */;
8350 val* var125 /* : String */;
8351 static val* varonce126;
8352 val* var127 /* : String */;
8353 char* var128 /* : NativeString */;
8354 long var129 /* : Int */;
8355 val* var130 /* : String */;
8356 static val* varonce131;
8357 val* var132 /* : String */;
8358 char* var133 /* : NativeString */;
8359 long var134 /* : Int */;
8360 val* var135 /* : String */;
8361 static val* varonce136;
8362 val* var137 /* : String */;
8363 char* var138 /* : NativeString */;
8364 long var139 /* : Int */;
8365 val* var140 /* : String */;
8366 val* var141 /* : Array[Object] */;
8367 long var142 /* : Int */;
8368 val* var143 /* : NativeArray[Object] */;
8369 val* var144 /* : String */;
8370 val* var145 /* : Iterator[nullable Object] */;
8371 short int var146 /* : Bool */;
8372 val* var147 /* : nullable Object */;
8373 val* var_t /* var t: MClassType */;
8374 val* var148 /* : AbstractCompiler */;
8375 val* var149 /* : MModule */;
8376 val* var150 /* : null */;
8377 short int var151 /* : Bool */;
8378 static val* varonce152;
8379 val* var153 /* : String */;
8380 char* var154 /* : NativeString */;
8381 long var155 /* : Int */;
8382 val* var156 /* : String */;
8383 val* var157 /* : AbstractCompiler */;
8384 val* var158 /* : String */;
8385 static val* varonce159;
8386 val* var160 /* : String */;
8387 char* var161 /* : NativeString */;
8388 long var162 /* : Int */;
8389 val* var163 /* : String */;
8390 static val* varonce164;
8391 val* var165 /* : String */;
8392 char* var166 /* : NativeString */;
8393 long var167 /* : Int */;
8394 val* var168 /* : String */;
8395 val* var169 /* : Array[Object] */;
8396 long var170 /* : Int */;
8397 val* var171 /* : NativeArray[Object] */;
8398 val* var172 /* : String */;
8399 static val* varonce173;
8400 val* var174 /* : String */;
8401 char* var175 /* : NativeString */;
8402 long var176 /* : Int */;
8403 val* var177 /* : String */;
8404 val* var178 /* : Array[Object] */;
8405 long var179 /* : Int */;
8406 val* var180 /* : NativeArray[Object] */;
8407 val* var181 /* : String */;
8408 static val* varonce182;
8409 val* var183 /* : String */;
8410 char* var184 /* : NativeString */;
8411 long var185 /* : Int */;
8412 val* var186 /* : String */;
8413 static val* varonce187;
8414 val* var188 /* : String */;
8415 char* var189 /* : NativeString */;
8416 long var190 /* : Int */;
8417 val* var191 /* : String */;
8418 static val* varonce192;
8419 val* var193 /* : String */;
8420 char* var194 /* : NativeString */;
8421 long var195 /* : Int */;
8422 val* var196 /* : String */;
8423 val* var197 /* : Array[Object] */;
8424 long var198 /* : Int */;
8425 val* var199 /* : NativeArray[Object] */;
8426 val* var200 /* : String */;
8427 static val* varonce201;
8428 val* var202 /* : String */;
8429 char* var203 /* : NativeString */;
8430 long var204 /* : Int */;
8431 val* var205 /* : String */;
8432 var_value = p0;
8433 var_mtype = p1;
8434 var_tag = p2;
8435 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_mtype) /* anchor on <self:GlobalCompilerVisitor>*/;
8436 var_mtype = var1;
8437 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8438 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var2) /* runtime_type_analysis on <var2:AbstractCompiler(GlobalCompiler)>*/;
8439 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_cast_types]))(var3) /* live_cast_types on <var3:RapidTypeAnalysis>*/;
8440 var5 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__Collection__has]))(var4, var_mtype) /* has on <var4:HashSet[MType]>*/;
8441 var6 = !var5;
8442 if (var6){
8443 if (varonce) {
8444 var7 = varonce;
8445 } else {
8446 var8 = "problem: ";
8447 var9 = 9;
8448 var10 = string__NativeString__to_s_with_length(var8, var9);
8449 var7 = var10;
8450 varonce = var7;
8451 }
8452 if (varonce11) {
8453 var12 = varonce11;
8454 } else {
8455 var13 = " was detected cast-dead";
8456 var14 = 23;
8457 var15 = string__NativeString__to_s_with_length(var13, var14);
8458 var12 = var15;
8459 varonce11 = var12;
8460 }
8461 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
8462 { /* var16 = array_instance Array[Object] */
8463 var17 = 3;
8464 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
8465 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
8466 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_mtype;
8467 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
8468 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
8469 }
8470 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
8471 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var19) /* debug on <self:GlobalCompilerVisitor>*/;
8472 fprintf(stderr, "Runtime error: %s", "Aborted");
8473 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 707);
8474 show_backtrace(1);
8475 } else {
8476 }
8477 var20 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_value) /* collect_types on <self:GlobalCompilerVisitor>*/;
8478 var_types = var20;
8479 var21 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
8480 var22 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var21) /* new_var on <self:GlobalCompilerVisitor>*/;
8481 var_res = var22;
8482 if (varonce23) {
8483 var24 = varonce23;
8484 } else {
8485 var25 = "/* isa ";
8486 var26 = 7;
8487 var27 = string__NativeString__to_s_with_length(var25, var26);
8488 var24 = var27;
8489 varonce23 = var24;
8490 }
8491 if (varonce28) {
8492 var29 = varonce28;
8493 } else {
8494 var30 = " on ";
8495 var31 = 4;
8496 var32 = string__NativeString__to_s_with_length(var30, var31);
8497 var29 = var32;
8498 varonce28 = var29;
8499 }
8500 var33 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
8501 if (varonce34) {
8502 var35 = varonce34;
8503 } else {
8504 var36 = " */";
8505 var37 = 3;
8506 var38 = string__NativeString__to_s_with_length(var36, var37);
8507 var35 = var38;
8508 varonce34 = var35;
8509 }
8510 var39 = NEW_array__Array(&type_array__Arraykernel__Object);
8511 { /* var39 = array_instance Array[Object] */
8512 var40 = 5;
8513 var41 = NEW_array__NativeArray(var40, &type_array__NativeArraykernel__Object);
8514 ((struct instance_array__NativeArray*)var41)->values[0] = (val*) var24;
8515 ((struct instance_array__NativeArray*)var41)->values[1] = (val*) var_mtype;
8516 ((struct instance_array__NativeArray*)var41)->values[2] = (val*) var29;
8517 ((struct instance_array__NativeArray*)var41)->values[3] = (val*) var33;
8518 ((struct instance_array__NativeArray*)var41)->values[4] = (val*) var35;
8519 ((void (*)(val*, val*, long))(var39->class->vft[COLOR_array__Array__with_native]))(var39, var41, var40) /* with_native on <var39:Array[Object]>*/;
8520 }
8521 var42 = ((val* (*)(val*))(var39->class->vft[COLOR_string__Object__to_s]))(var39) /* to_s on <var39:Array[Object]>*/;
8522 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var42) /* add on <self:GlobalCompilerVisitor>*/;
8523 var43 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
8524 var44 = ((val* (*)(val*))(var43->class->vft[COLOR_abstract_compiler__MType__ctype]))(var43) /* ctype on <var43:MType>*/;
8525 if (varonce45) {
8526 var46 = varonce45;
8527 } else {
8528 var47 = "val*";
8529 var48 = 4;
8530 var49 = string__NativeString__to_s_with_length(var47, var48);
8531 var46 = var49;
8532 varonce45 = var46;
8533 }
8534 var50 = ((short int (*)(val*, val*))(var44->class->vft[COLOR_kernel__Object___33d_61d]))(var44, var46) /* != on <var44:String>*/;
8535 if (var50){
8536 var51 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
8537 var52 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8538 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var52) /* mainmodule on <var52:AbstractCompiler(GlobalCompiler)>*/;
8539 var54 = NULL;
8540 var55 = ((short int (*)(val*, val*, val*, val*))(var51->class->vft[COLOR_model__MType__is_subtype]))(var51, var53, var54, var_mtype) /* is_subtype on <var51:MType>*/;
8541 if (var55){
8542 if (varonce56) {
8543 var57 = varonce56;
8544 } else {
8545 var58 = " = 1;";
8546 var59 = 5;
8547 var60 = string__NativeString__to_s_with_length(var58, var59);
8548 var57 = var60;
8549 varonce56 = var57;
8550 }
8551 var61 = NEW_array__Array(&type_array__Arraykernel__Object);
8552 { /* var61 = array_instance Array[Object] */
8553 var62 = 2;
8554 var63 = NEW_array__NativeArray(var62, &type_array__NativeArraykernel__Object);
8555 ((struct instance_array__NativeArray*)var63)->values[0] = (val*) var_res;
8556 ((struct instance_array__NativeArray*)var63)->values[1] = (val*) var57;
8557 ((void (*)(val*, val*, long))(var61->class->vft[COLOR_array__Array__with_native]))(var61, var63, var62) /* with_native on <var61:Array[Object]>*/;
8558 }
8559 var64 = ((val* (*)(val*))(var61->class->vft[COLOR_string__Object__to_s]))(var61) /* to_s on <var61:Array[Object]>*/;
8560 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var64) /* add on <self:GlobalCompilerVisitor>*/;
8561 } else {
8562 if (varonce65) {
8563 var66 = varonce65;
8564 } else {
8565 var67 = " = 0;";
8566 var68 = 5;
8567 var69 = string__NativeString__to_s_with_length(var67, var68);
8568 var66 = var69;
8569 varonce65 = var66;
8570 }
8571 var70 = NEW_array__Array(&type_array__Arraykernel__Object);
8572 { /* var70 = array_instance Array[Object] */
8573 var71 = 2;
8574 var72 = NEW_array__NativeArray(var71, &type_array__NativeArraykernel__Object);
8575 ((struct instance_array__NativeArray*)var72)->values[0] = (val*) var_res;
8576 ((struct instance_array__NativeArray*)var72)->values[1] = (val*) var66;
8577 ((void (*)(val*, val*, long))(var70->class->vft[COLOR_array__Array__with_native]))(var70, var72, var71) /* with_native on <var70:Array[Object]>*/;
8578 }
8579 var73 = ((val* (*)(val*))(var70->class->vft[COLOR_string__Object__to_s]))(var70) /* to_s on <var70:Array[Object]>*/;
8580 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var73) /* add on <self:GlobalCompilerVisitor>*/;
8581 }
8582 var = var_res;
8583 goto RET_LABEL;
8584 } else {
8585 }
8586 var75 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
8587 /* <var75:MType> isa MNullableType */
8588 cltype = type_model__MNullableType.color;
8589 idtype = type_model__MNullableType.id;
8590 if(cltype >= var75->type->table_size) {
8591 var76 = 0;
8592 } else {
8593 var76 = var75->type->type_table[cltype] == idtype;
8594 }
8595 var_ = var76;
8596 if (var76){
8597 var74 = var_;
8598 } else {
8599 var77 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
8600 /* <var77:MType> isa MNullType */
8601 cltype79 = type_model__MNullType.color;
8602 idtype80 = type_model__MNullType.id;
8603 if(cltype79 >= var77->type->table_size) {
8604 var78 = 0;
8605 } else {
8606 var78 = var77->type->type_table[cltype79] == idtype80;
8607 }
8608 var74 = var78;
8609 }
8610 if (var74){
8611 if (varonce81) {
8612 var82 = varonce81;
8613 } else {
8614 var83 = "if (";
8615 var84 = 4;
8616 var85 = string__NativeString__to_s_with_length(var83, var84);
8617 var82 = var85;
8618 varonce81 = var82;
8619 }
8620 if (varonce86) {
8621 var87 = varonce86;
8622 } else {
8623 var88 = " == NULL) {";
8624 var89 = 11;
8625 var90 = string__NativeString__to_s_with_length(var88, var89);
8626 var87 = var90;
8627 varonce86 = var87;
8628 }
8629 var91 = NEW_array__Array(&type_array__Arraykernel__Object);
8630 { /* var91 = array_instance Array[Object] */
8631 var92 = 3;
8632 var93 = NEW_array__NativeArray(var92, &type_array__NativeArraykernel__Object);
8633 ((struct instance_array__NativeArray*)var93)->values[0] = (val*) var82;
8634 ((struct instance_array__NativeArray*)var93)->values[1] = (val*) var_value;
8635 ((struct instance_array__NativeArray*)var93)->values[2] = (val*) var87;
8636 ((void (*)(val*, val*, long))(var91->class->vft[COLOR_array__Array__with_native]))(var91, var93, var92) /* with_native on <var91:Array[Object]>*/;
8637 }
8638 var94 = ((val* (*)(val*))(var91->class->vft[COLOR_string__Object__to_s]))(var91) /* to_s on <var91:Array[Object]>*/;
8639 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var94) /* add on <self:GlobalCompilerVisitor>*/;
8640 /* <var_mtype:MType> isa MNullableType */
8641 cltype96 = type_model__MNullableType.color;
8642 idtype97 = type_model__MNullableType.id;
8643 if(cltype96 >= var_mtype->type->table_size) {
8644 var95 = 0;
8645 } else {
8646 var95 = var_mtype->type->type_table[cltype96] == idtype97;
8647 }
8648 if (var95){
8649 if (varonce98) {
8650 var99 = varonce98;
8651 } else {
8652 var100 = " = 1; /* isa ";
8653 var101 = 13;
8654 var102 = string__NativeString__to_s_with_length(var100, var101);
8655 var99 = var102;
8656 varonce98 = var99;
8657 }
8658 if (varonce103) {
8659 var104 = varonce103;
8660 } else {
8661 var105 = " */";
8662 var106 = 3;
8663 var107 = string__NativeString__to_s_with_length(var105, var106);
8664 var104 = var107;
8665 varonce103 = var104;
8666 }
8667 var108 = NEW_array__Array(&type_array__Arraykernel__Object);
8668 { /* var108 = array_instance Array[Object] */
8669 var109 = 4;
8670 var110 = NEW_array__NativeArray(var109, &type_array__NativeArraykernel__Object);
8671 ((struct instance_array__NativeArray*)var110)->values[0] = (val*) var_res;
8672 ((struct instance_array__NativeArray*)var110)->values[1] = (val*) var99;
8673 ((struct instance_array__NativeArray*)var110)->values[2] = (val*) var_mtype;
8674 ((struct instance_array__NativeArray*)var110)->values[3] = (val*) var104;
8675 ((void (*)(val*, val*, long))(var108->class->vft[COLOR_array__Array__with_native]))(var108, var110, var109) /* with_native on <var108:Array[Object]>*/;
8676 }
8677 var111 = ((val* (*)(val*))(var108->class->vft[COLOR_string__Object__to_s]))(var108) /* to_s on <var108:Array[Object]>*/;
8678 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var111) /* add on <self:GlobalCompilerVisitor>*/;
8679 } else {
8680 if (varonce112) {
8681 var113 = varonce112;
8682 } else {
8683 var114 = " = 0; /* not isa ";
8684 var115 = 17;
8685 var116 = string__NativeString__to_s_with_length(var114, var115);
8686 var113 = var116;
8687 varonce112 = var113;
8688 }
8689 if (varonce117) {
8690 var118 = varonce117;
8691 } else {
8692 var119 = " */";
8693 var120 = 3;
8694 var121 = string__NativeString__to_s_with_length(var119, var120);
8695 var118 = var121;
8696 varonce117 = var118;
8697 }
8698 var122 = NEW_array__Array(&type_array__Arraykernel__Object);
8699 { /* var122 = array_instance Array[Object] */
8700 var123 = 4;
8701 var124 = NEW_array__NativeArray(var123, &type_array__NativeArraykernel__Object);
8702 ((struct instance_array__NativeArray*)var124)->values[0] = (val*) var_res;
8703 ((struct instance_array__NativeArray*)var124)->values[1] = (val*) var113;
8704 ((struct instance_array__NativeArray*)var124)->values[2] = (val*) var_mtype;
8705 ((struct instance_array__NativeArray*)var124)->values[3] = (val*) var118;
8706 ((void (*)(val*, val*, long))(var122->class->vft[COLOR_array__Array__with_native]))(var122, var124, var123) /* with_native on <var122:Array[Object]>*/;
8707 }
8708 var125 = ((val* (*)(val*))(var122->class->vft[COLOR_string__Object__to_s]))(var122) /* to_s on <var122:Array[Object]>*/;
8709 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var125) /* add on <self:GlobalCompilerVisitor>*/;
8710 }
8711 if (varonce126) {
8712 var127 = varonce126;
8713 } else {
8714 var128 = "} else ";
8715 var129 = 7;
8716 var130 = string__NativeString__to_s_with_length(var128, var129);
8717 var127 = var130;
8718 varonce126 = var127;
8719 }
8720 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var127) /* add on <self:GlobalCompilerVisitor>*/;
8721 } else {
8722 }
8723 if (varonce131) {
8724 var132 = varonce131;
8725 } else {
8726 var133 = "switch(";
8727 var134 = 7;
8728 var135 = string__NativeString__to_s_with_length(var133, var134);
8729 var132 = var135;
8730 varonce131 = var132;
8731 }
8732 if (varonce136) {
8733 var137 = varonce136;
8734 } else {
8735 var138 = "->classid) {";
8736 var139 = 12;
8737 var140 = string__NativeString__to_s_with_length(var138, var139);
8738 var137 = var140;
8739 varonce136 = var137;
8740 }
8741 var141 = NEW_array__Array(&type_array__Arraykernel__Object);
8742 { /* var141 = array_instance Array[Object] */
8743 var142 = 3;
8744 var143 = NEW_array__NativeArray(var142, &type_array__NativeArraykernel__Object);
8745 ((struct instance_array__NativeArray*)var143)->values[0] = (val*) var132;
8746 ((struct instance_array__NativeArray*)var143)->values[1] = (val*) var_value;
8747 ((struct instance_array__NativeArray*)var143)->values[2] = (val*) var137;
8748 ((void (*)(val*, val*, long))(var141->class->vft[COLOR_array__Array__with_native]))(var141, var143, var142) /* with_native on <var141:Array[Object]>*/;
8749 }
8750 var144 = ((val* (*)(val*))(var141->class->vft[COLOR_string__Object__to_s]))(var141) /* to_s on <var141:Array[Object]>*/;
8751 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var144) /* add on <self:GlobalCompilerVisitor>*/;
8752 var145 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
8753 for(;;) {
8754 var146 = ((short int (*)(val*))(var145->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var145) /* is_ok on <var145:Iterator[nullable Object]>*/;
8755 if(!var146) break;
8756 var147 = ((val* (*)(val*))(var145->class->vft[COLOR_abstract_collection__Iterator__item]))(var145) /* item on <var145:Iterator[nullable Object]>*/;
8757 var_t = var147;
8758 var148 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8759 var149 = ((val* (*)(val*))(var148->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var148) /* mainmodule on <var148:AbstractCompiler(GlobalCompiler)>*/;
8760 var150 = NULL;
8761 var151 = ((short int (*)(val*, val*, val*, val*))(var_t->class->vft[COLOR_model__MType__is_subtype]))(var_t, var149, var150, var_mtype) /* is_subtype on <var_t:MClassType>*/;
8762 if (var151){
8763 if (varonce152) {
8764 var153 = varonce152;
8765 } else {
8766 var154 = "case ";
8767 var155 = 5;
8768 var156 = string__NativeString__to_s_with_length(var154, var155);
8769 var153 = var156;
8770 varonce152 = var153;
8771 }
8772 var157 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8773 var158 = ((val* (*)(val*, val*))(var157->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var157, var_t) /* classid on <var157:AbstractCompiler(GlobalCompiler)>*/;
8774 if (varonce159) {
8775 var160 = varonce159;
8776 } else {
8777 var161 = ": /* ";
8778 var162 = 5;
8779 var163 = string__NativeString__to_s_with_length(var161, var162);
8780 var160 = var163;
8781 varonce159 = var160;
8782 }
8783 if (varonce164) {
8784 var165 = varonce164;
8785 } else {
8786 var166 = " */";
8787 var167 = 3;
8788 var168 = string__NativeString__to_s_with_length(var166, var167);
8789 var165 = var168;
8790 varonce164 = var165;
8791 }
8792 var169 = NEW_array__Array(&type_array__Arraykernel__Object);
8793 { /* var169 = array_instance Array[Object] */
8794 var170 = 5;
8795 var171 = NEW_array__NativeArray(var170, &type_array__NativeArraykernel__Object);
8796 ((struct instance_array__NativeArray*)var171)->values[0] = (val*) var153;
8797 ((struct instance_array__NativeArray*)var171)->values[1] = (val*) var158;
8798 ((struct instance_array__NativeArray*)var171)->values[2] = (val*) var160;
8799 ((struct instance_array__NativeArray*)var171)->values[3] = (val*) var_t;
8800 ((struct instance_array__NativeArray*)var171)->values[4] = (val*) var165;
8801 ((void (*)(val*, val*, long))(var169->class->vft[COLOR_array__Array__with_native]))(var169, var171, var170) /* with_native on <var169:Array[Object]>*/;
8802 }
8803 var172 = ((val* (*)(val*))(var169->class->vft[COLOR_string__Object__to_s]))(var169) /* to_s on <var169:Array[Object]>*/;
8804 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var172) /* add on <self:GlobalCompilerVisitor>*/;
8805 } else {
8806 }
8807 CONTINUE_label: (void)0;
8808 ((void (*)(val*))(var145->class->vft[COLOR_abstract_collection__Iterator__next]))(var145) /* next on <var145:Iterator[nullable Object]>*/;
8809 }
8810 BREAK_label: (void)0;
8811 if (varonce173) {
8812 var174 = varonce173;
8813 } else {
8814 var175 = " = 1;";
8815 var176 = 5;
8816 var177 = string__NativeString__to_s_with_length(var175, var176);
8817 var174 = var177;
8818 varonce173 = var174;
8819 }
8820 var178 = NEW_array__Array(&type_array__Arraykernel__Object);
8821 { /* var178 = array_instance Array[Object] */
8822 var179 = 2;
8823 var180 = NEW_array__NativeArray(var179, &type_array__NativeArraykernel__Object);
8824 ((struct instance_array__NativeArray*)var180)->values[0] = (val*) var_res;
8825 ((struct instance_array__NativeArray*)var180)->values[1] = (val*) var174;
8826 ((void (*)(val*, val*, long))(var178->class->vft[COLOR_array__Array__with_native]))(var178, var180, var179) /* with_native on <var178:Array[Object]>*/;
8827 }
8828 var181 = ((val* (*)(val*))(var178->class->vft[COLOR_string__Object__to_s]))(var178) /* to_s on <var178:Array[Object]>*/;
8829 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var181) /* add on <self:GlobalCompilerVisitor>*/;
8830 if (varonce182) {
8831 var183 = varonce182;
8832 } else {
8833 var184 = "break;";
8834 var185 = 6;
8835 var186 = string__NativeString__to_s_with_length(var184, var185);
8836 var183 = var186;
8837 varonce182 = var183;
8838 }
8839 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var183) /* add on <self:GlobalCompilerVisitor>*/;
8840 if (varonce187) {
8841 var188 = varonce187;
8842 } else {
8843 var189 = "default:";
8844 var190 = 8;
8845 var191 = string__NativeString__to_s_with_length(var189, var190);
8846 var188 = var191;
8847 varonce187 = var188;
8848 }
8849 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
8850 if (varonce192) {
8851 var193 = varonce192;
8852 } else {
8853 var194 = " = 0;";
8854 var195 = 5;
8855 var196 = string__NativeString__to_s_with_length(var194, var195);
8856 var193 = var196;
8857 varonce192 = var193;
8858 }
8859 var197 = NEW_array__Array(&type_array__Arraykernel__Object);
8860 { /* var197 = array_instance Array[Object] */
8861 var198 = 2;
8862 var199 = NEW_array__NativeArray(var198, &type_array__NativeArraykernel__Object);
8863 ((struct instance_array__NativeArray*)var199)->values[0] = (val*) var_res;
8864 ((struct instance_array__NativeArray*)var199)->values[1] = (val*) var193;
8865 ((void (*)(val*, val*, long))(var197->class->vft[COLOR_array__Array__with_native]))(var197, var199, var198) /* with_native on <var197:Array[Object]>*/;
8866 }
8867 var200 = ((val* (*)(val*))(var197->class->vft[COLOR_string__Object__to_s]))(var197) /* to_s on <var197:Array[Object]>*/;
8868 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var200) /* add on <self:GlobalCompilerVisitor>*/;
8869 if (varonce201) {
8870 var202 = varonce201;
8871 } else {
8872 var203 = "}";
8873 var204 = 1;
8874 var205 = string__NativeString__to_s_with_length(var203, var204);
8875 var202 = var205;
8876 varonce201 = var202;
8877 }
8878 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var202) /* add on <self:GlobalCompilerVisitor>*/;
8879 var = var_res;
8880 goto RET_LABEL;
8881 RET_LABEL:;
8882 return var;
8883 }
8884 /* method global_compiler#GlobalCompilerVisitor#type_test for (self: Object, RuntimeVariable, MType, String): RuntimeVariable */
8885 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
8886 val* var /* : RuntimeVariable */;
8887 val* var1 /* : RuntimeVariable */;
8888 var1 = global_compiler__GlobalCompilerVisitor__type_test(self, p0, p1, p2);
8889 var = var1;
8890 RET_LABEL:;
8891 return var;
8892 }
8893 /* method global_compiler#GlobalCompilerVisitor#is_same_type_test for (self: GlobalCompilerVisitor, RuntimeVariable, RuntimeVariable): RuntimeVariable */
8894 val* global_compiler__GlobalCompilerVisitor__is_same_type_test(val* self, val* p0, val* p1) {
8895 val* var /* : RuntimeVariable */;
8896 val* var_value1 /* var value1: RuntimeVariable */;
8897 val* var_value2 /* var value2: RuntimeVariable */;
8898 val* var1 /* : MClassType */;
8899 val* var2 /* : RuntimeVariable */;
8900 val* var_res /* var res: RuntimeVariable */;
8901 val* var3 /* : MType */;
8902 val* var4 /* : String */;
8903 static val* varonce;
8904 val* var5 /* : String */;
8905 char* var6 /* : NativeString */;
8906 long var7 /* : Int */;
8907 val* var8 /* : String */;
8908 short int var9 /* : Bool */;
8909 val* var10 /* : MType */;
8910 val* var11 /* : String */;
8911 static val* varonce12;
8912 val* var13 /* : String */;
8913 char* var14 /* : NativeString */;
8914 long var15 /* : Int */;
8915 val* var16 /* : String */;
8916 short int var17 /* : Bool */;
8917 static val* varonce18;
8918 val* var19 /* : String */;
8919 char* var20 /* : NativeString */;
8920 long var21 /* : Int */;
8921 val* var22 /* : String */;
8922 static val* varonce23;
8923 val* var24 /* : String */;
8924 char* var25 /* : NativeString */;
8925 long var26 /* : Int */;
8926 val* var27 /* : String */;
8927 static val* varonce28;
8928 val* var29 /* : String */;
8929 char* var30 /* : NativeString */;
8930 long var31 /* : Int */;
8931 val* var32 /* : String */;
8932 val* var33 /* : Array[Object] */;
8933 long var34 /* : Int */;
8934 val* var35 /* : NativeArray[Object] */;
8935 val* var36 /* : String */;
8936 static val* varonce37;
8937 val* var38 /* : String */;
8938 char* var39 /* : NativeString */;
8939 long var40 /* : Int */;
8940 val* var41 /* : String */;
8941 val* var42 /* : AbstractCompiler */;
8942 val* var43 /* : MType */;
8943 short int var44 /* : Bool */;
8944 int cltype;
8945 int idtype;
8946 const char* var_class_name;
8947 val* var45 /* : String */;
8948 static val* varonce46;
8949 val* var47 /* : String */;
8950 char* var48 /* : NativeString */;
8951 long var49 /* : Int */;
8952 val* var50 /* : String */;
8953 static val* varonce51;
8954 val* var52 /* : String */;
8955 char* var53 /* : NativeString */;
8956 long var54 /* : Int */;
8957 val* var55 /* : String */;
8958 val* var56 /* : Array[Object] */;
8959 long var57 /* : Int */;
8960 val* var58 /* : NativeArray[Object] */;
8961 val* var59 /* : String */;
8962 val* var60 /* : MType */;
8963 val* var61 /* : String */;
8964 static val* varonce62;
8965 val* var63 /* : String */;
8966 char* var64 /* : NativeString */;
8967 long var65 /* : Int */;
8968 val* var66 /* : String */;
8969 short int var67 /* : Bool */;
8970 static val* varonce68;
8971 val* var69 /* : String */;
8972 char* var70 /* : NativeString */;
8973 long var71 /* : Int */;
8974 val* var72 /* : String */;
8975 static val* varonce73;
8976 val* var74 /* : String */;
8977 char* var75 /* : NativeString */;
8978 long var76 /* : Int */;
8979 val* var77 /* : String */;
8980 val* var78 /* : AbstractCompiler */;
8981 val* var79 /* : MType */;
8982 short int var80 /* : Bool */;
8983 int cltype81;
8984 int idtype82;
8985 const char* var_class_name83;
8986 val* var84 /* : String */;
8987 static val* varonce85;
8988 val* var86 /* : String */;
8989 char* var87 /* : NativeString */;
8990 long var88 /* : Int */;
8991 val* var89 /* : String */;
8992 val* var90 /* : Array[Object] */;
8993 long var91 /* : Int */;
8994 val* var92 /* : NativeArray[Object] */;
8995 val* var93 /* : String */;
8996 val* var94 /* : MType */;
8997 val* var95 /* : MType */;
8998 short int var96 /* : Bool */;
8999 static val* varonce97;
9000 val* var98 /* : String */;
9001 char* var99 /* : NativeString */;
9002 long var100 /* : Int */;
9003 val* var101 /* : String */;
9004 val* var102 /* : Array[Object] */;
9005 long var103 /* : Int */;
9006 val* var104 /* : NativeArray[Object] */;
9007 val* var105 /* : String */;
9008 static val* varonce106;
9009 val* var107 /* : String */;
9010 char* var108 /* : NativeString */;
9011 long var109 /* : Int */;
9012 val* var110 /* : String */;
9013 val* var111 /* : Array[Object] */;
9014 long var112 /* : Int */;
9015 val* var113 /* : NativeArray[Object] */;
9016 val* var114 /* : String */;
9017 var_value1 = p0;
9018 var_value2 = p1;
9019 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
9020 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var1) /* new_var on <self:GlobalCompilerVisitor>*/;
9021 var_res = var2;
9022 var3 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value2) /* mtype on <var_value2:RuntimeVariable>*/;
9023 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_compiler__MType__ctype]))(var3) /* ctype on <var3:MType>*/;
9024 if (varonce) {
9025 var5 = varonce;
9026 } else {
9027 var6 = "val*";
9028 var7 = 4;
9029 var8 = string__NativeString__to_s_with_length(var6, var7);
9030 var5 = var8;
9031 varonce = var5;
9032 }
9033 var9 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_kernel__Object___61d_61d]))(var4, var5) /* == on <var4:String>*/;
9034 if (var9){
9035 var10 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9036 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__MType__ctype]))(var10) /* ctype on <var10:MType>*/;
9037 if (varonce12) {
9038 var13 = varonce12;
9039 } else {
9040 var14 = "val*";
9041 var15 = 4;
9042 var16 = string__NativeString__to_s_with_length(var14, var15);
9043 var13 = var16;
9044 varonce12 = var13;
9045 }
9046 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
9047 if (var17){
9048 if (varonce18) {
9049 var19 = varonce18;
9050 } else {
9051 var20 = " = ";
9052 var21 = 3;
9053 var22 = string__NativeString__to_s_with_length(var20, var21);
9054 var19 = var22;
9055 varonce18 = var19;
9056 }
9057 if (varonce23) {
9058 var24 = varonce23;
9059 } else {
9060 var25 = "->classid == ";
9061 var26 = 13;
9062 var27 = string__NativeString__to_s_with_length(var25, var26);
9063 var24 = var27;
9064 varonce23 = var24;
9065 }
9066 if (varonce28) {
9067 var29 = varonce28;
9068 } else {
9069 var30 = "->classid;";
9070 var31 = 10;
9071 var32 = string__NativeString__to_s_with_length(var30, var31);
9072 var29 = var32;
9073 varonce28 = var29;
9074 }
9075 var33 = NEW_array__Array(&type_array__Arraykernel__Object);
9076 { /* var33 = array_instance Array[Object] */
9077 var34 = 6;
9078 var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
9079 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var_res;
9080 ((struct instance_array__NativeArray*)var35)->values[1] = (val*) var19;
9081 ((struct instance_array__NativeArray*)var35)->values[2] = (val*) var_value1;
9082 ((struct instance_array__NativeArray*)var35)->values[3] = (val*) var24;
9083 ((struct instance_array__NativeArray*)var35)->values[4] = (val*) var_value2;
9084 ((struct instance_array__NativeArray*)var35)->values[5] = (val*) var29;
9085 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
9086 }
9087 var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
9088 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var36) /* add on <self:GlobalCompilerVisitor>*/;
9089 } else {
9090 if (varonce37) {
9091 var38 = varonce37;
9092 } else {
9093 var39 = " = ";
9094 var40 = 3;
9095 var41 = string__NativeString__to_s_with_length(var39, var40);
9096 var38 = var41;
9097 varonce37 = var38;
9098 }
9099 var42 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9100 var43 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9101 /* <var43:MType> isa MClassType */
9102 cltype = type_model__MClassType.color;
9103 idtype = type_model__MClassType.id;
9104 if(cltype >= var43->type->table_size) {
9105 var44 = 0;
9106 } else {
9107 var44 = var43->type->type_table[cltype] == idtype;
9108 }
9109 if (!var44) {
9110 var_class_name = var43 == NULL ? "null" : var43->type->name;
9111 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
9112 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 753);
9113 show_backtrace(1);
9114 }
9115 var45 = ((val* (*)(val*, val*))(var42->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var42, var43) /* classid on <var42:AbstractCompiler(GlobalCompiler)>*/;
9116 if (varonce46) {
9117 var47 = varonce46;
9118 } else {
9119 var48 = " == ";
9120 var49 = 4;
9121 var50 = string__NativeString__to_s_with_length(var48, var49);
9122 var47 = var50;
9123 varonce46 = var47;
9124 }
9125 if (varonce51) {
9126 var52 = varonce51;
9127 } else {
9128 var53 = "->classid;";
9129 var54 = 10;
9130 var55 = string__NativeString__to_s_with_length(var53, var54);
9131 var52 = var55;
9132 varonce51 = var52;
9133 }
9134 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
9135 { /* var56 = array_instance Array[Object] */
9136 var57 = 6;
9137 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
9138 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var_res;
9139 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var38;
9140 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var45;
9141 ((struct instance_array__NativeArray*)var58)->values[3] = (val*) var47;
9142 ((struct instance_array__NativeArray*)var58)->values[4] = (val*) var_value2;
9143 ((struct instance_array__NativeArray*)var58)->values[5] = (val*) var52;
9144 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
9145 }
9146 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
9147 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
9148 }
9149 } else {
9150 var60 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9151 var61 = ((val* (*)(val*))(var60->class->vft[COLOR_abstract_compiler__MType__ctype]))(var60) /* ctype on <var60:MType>*/;
9152 if (varonce62) {
9153 var63 = varonce62;
9154 } else {
9155 var64 = "val*";
9156 var65 = 4;
9157 var66 = string__NativeString__to_s_with_length(var64, var65);
9158 var63 = var66;
9159 varonce62 = var63;
9160 }
9161 var67 = ((short int (*)(val*, val*))(var61->class->vft[COLOR_kernel__Object___61d_61d]))(var61, var63) /* == on <var61:String>*/;
9162 if (var67){
9163 if (varonce68) {
9164 var69 = varonce68;
9165 } else {
9166 var70 = " = ";
9167 var71 = 3;
9168 var72 = string__NativeString__to_s_with_length(var70, var71);
9169 var69 = var72;
9170 varonce68 = var69;
9171 }
9172 if (varonce73) {
9173 var74 = varonce73;
9174 } else {
9175 var75 = "->classid == ";
9176 var76 = 13;
9177 var77 = string__NativeString__to_s_with_length(var75, var76);
9178 var74 = var77;
9179 varonce73 = var74;
9180 }
9181 var78 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9182 var79 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value2) /* mtype on <var_value2:RuntimeVariable>*/;
9183 /* <var79:MType> isa MClassType */
9184 cltype81 = type_model__MClassType.color;
9185 idtype82 = type_model__MClassType.id;
9186 if(cltype81 >= var79->type->table_size) {
9187 var80 = 0;
9188 } else {
9189 var80 = var79->type->type_table[cltype81] == idtype82;
9190 }
9191 if (!var80) {
9192 var_class_name83 = var79 == NULL ? "null" : var79->type->name;
9193 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name83);
9194 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 757);
9195 show_backtrace(1);
9196 }
9197 var84 = ((val* (*)(val*, val*))(var78->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var78, var79) /* classid on <var78:AbstractCompiler(GlobalCompiler)>*/;
9198 if (varonce85) {
9199 var86 = varonce85;
9200 } else {
9201 var87 = ";";
9202 var88 = 1;
9203 var89 = string__NativeString__to_s_with_length(var87, var88);
9204 var86 = var89;
9205 varonce85 = var86;
9206 }
9207 var90 = NEW_array__Array(&type_array__Arraykernel__Object);
9208 { /* var90 = array_instance Array[Object] */
9209 var91 = 6;
9210 var92 = NEW_array__NativeArray(var91, &type_array__NativeArraykernel__Object);
9211 ((struct instance_array__NativeArray*)var92)->values[0] = (val*) var_res;
9212 ((struct instance_array__NativeArray*)var92)->values[1] = (val*) var69;
9213 ((struct instance_array__NativeArray*)var92)->values[2] = (val*) var_value1;
9214 ((struct instance_array__NativeArray*)var92)->values[3] = (val*) var74;
9215 ((struct instance_array__NativeArray*)var92)->values[4] = (val*) var84;
9216 ((struct instance_array__NativeArray*)var92)->values[5] = (val*) var86;
9217 ((void (*)(val*, val*, long))(var90->class->vft[COLOR_array__Array__with_native]))(var90, var92, var91) /* with_native on <var90:Array[Object]>*/;
9218 }
9219 var93 = ((val* (*)(val*))(var90->class->vft[COLOR_string__Object__to_s]))(var90) /* to_s on <var90:Array[Object]>*/;
9220 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var93) /* add on <self:GlobalCompilerVisitor>*/;
9221 } else {
9222 var94 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value1) /* mcasttype on <var_value1:RuntimeVariable>*/;
9223 var95 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value2) /* mcasttype on <var_value2:RuntimeVariable>*/;
9224 var96 = ((short int (*)(val*, val*))(var94->class->vft[COLOR_kernel__Object___61d_61d]))(var94, var95) /* == on <var94:MType>*/;
9225 if (var96){
9226 if (varonce97) {
9227 var98 = varonce97;
9228 } else {
9229 var99 = " = 1;";
9230 var100 = 5;
9231 var101 = string__NativeString__to_s_with_length(var99, var100);
9232 var98 = var101;
9233 varonce97 = var98;
9234 }
9235 var102 = NEW_array__Array(&type_array__Arraykernel__Object);
9236 { /* var102 = array_instance Array[Object] */
9237 var103 = 2;
9238 var104 = NEW_array__NativeArray(var103, &type_array__NativeArraykernel__Object);
9239 ((struct instance_array__NativeArray*)var104)->values[0] = (val*) var_res;
9240 ((struct instance_array__NativeArray*)var104)->values[1] = (val*) var98;
9241 ((void (*)(val*, val*, long))(var102->class->vft[COLOR_array__Array__with_native]))(var102, var104, var103) /* with_native on <var102:Array[Object]>*/;
9242 }
9243 var105 = ((val* (*)(val*))(var102->class->vft[COLOR_string__Object__to_s]))(var102) /* to_s on <var102:Array[Object]>*/;
9244 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var105) /* add on <self:GlobalCompilerVisitor>*/;
9245 } else {
9246 if (varonce106) {
9247 var107 = varonce106;
9248 } else {
9249 var108 = " = 0;";
9250 var109 = 5;
9251 var110 = string__NativeString__to_s_with_length(var108, var109);
9252 var107 = var110;
9253 varonce106 = var107;
9254 }
9255 var111 = NEW_array__Array(&type_array__Arraykernel__Object);
9256 { /* var111 = array_instance Array[Object] */
9257 var112 = 2;
9258 var113 = NEW_array__NativeArray(var112, &type_array__NativeArraykernel__Object);
9259 ((struct instance_array__NativeArray*)var113)->values[0] = (val*) var_res;
9260 ((struct instance_array__NativeArray*)var113)->values[1] = (val*) var107;
9261 ((void (*)(val*, val*, long))(var111->class->vft[COLOR_array__Array__with_native]))(var111, var113, var112) /* with_native on <var111:Array[Object]>*/;
9262 }
9263 var114 = ((val* (*)(val*))(var111->class->vft[COLOR_string__Object__to_s]))(var111) /* to_s on <var111:Array[Object]>*/;
9264 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var114) /* add on <self:GlobalCompilerVisitor>*/;
9265 }
9266 }
9267 }
9268 var = var_res;
9269 goto RET_LABEL;
9270 RET_LABEL:;
9271 return var;
9272 }
9273 /* method global_compiler#GlobalCompilerVisitor#is_same_type_test for (self: Object, RuntimeVariable, RuntimeVariable): RuntimeVariable */
9274 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__is_same_type_test(val* self, val* p0, val* p1) {
9275 val* var /* : RuntimeVariable */;
9276 val* var1 /* : RuntimeVariable */;
9277 var1 = global_compiler__GlobalCompilerVisitor__is_same_type_test(self, p0, p1);
9278 var = var1;
9279 RET_LABEL:;
9280 return var;
9281 }
9282 /* method global_compiler#GlobalCompilerVisitor#class_name_string for (self: GlobalCompilerVisitor, RuntimeVariable): String */
9283 val* global_compiler__GlobalCompilerVisitor__class_name_string(val* self, val* p0) {
9284 val* var /* : String */;
9285 val* var_value /* var value: RuntimeVariable */;
9286 static val* varonce;
9287 val* var1 /* : String */;
9288 char* var2 /* : NativeString */;
9289 long var3 /* : Int */;
9290 val* var4 /* : String */;
9291 val* var5 /* : String */;
9292 val* var_res /* var res: String */;
9293 static val* varonce6;
9294 val* var7 /* : String */;
9295 char* var8 /* : NativeString */;
9296 long var9 /* : Int */;
9297 val* var10 /* : String */;
9298 static val* varonce11;
9299 val* var12 /* : String */;
9300 char* var13 /* : NativeString */;
9301 long var14 /* : Int */;
9302 val* var15 /* : String */;
9303 val* var16 /* : Array[Object] */;
9304 long var17 /* : Int */;
9305 val* var18 /* : NativeArray[Object] */;
9306 val* var19 /* : String */;
9307 val* var20 /* : MType */;
9308 val* var21 /* : String */;
9309 static val* varonce22;
9310 val* var23 /* : String */;
9311 char* var24 /* : NativeString */;
9312 long var25 /* : Int */;
9313 val* var26 /* : String */;
9314 short int var27 /* : Bool */;
9315 static val* varonce28;
9316 val* var29 /* : String */;
9317 char* var30 /* : NativeString */;
9318 long var31 /* : Int */;
9319 val* var32 /* : String */;
9320 static val* varonce33;
9321 val* var34 /* : String */;
9322 char* var35 /* : NativeString */;
9323 long var36 /* : Int */;
9324 val* var37 /* : String */;
9325 val* var38 /* : Array[Object] */;
9326 long var39 /* : Int */;
9327 val* var40 /* : NativeArray[Object] */;
9328 val* var41 /* : String */;
9329 static val* varonce42;
9330 val* var43 /* : String */;
9331 char* var44 /* : NativeString */;
9332 long var45 /* : Int */;
9333 val* var46 /* : String */;
9334 val* var47 /* : AbstractCompiler */;
9335 val* var48 /* : MType */;
9336 short int var49 /* : Bool */;
9337 int cltype;
9338 int idtype;
9339 const char* var_class_name;
9340 val* var50 /* : String */;
9341 static val* varonce51;
9342 val* var52 /* : String */;
9343 char* var53 /* : NativeString */;
9344 long var54 /* : Int */;
9345 val* var55 /* : String */;
9346 val* var56 /* : Array[Object] */;
9347 long var57 /* : Int */;
9348 val* var58 /* : NativeArray[Object] */;
9349 val* var59 /* : String */;
9350 var_value = p0;
9351 if (varonce) {
9352 var1 = varonce;
9353 } else {
9354 var2 = "var_class_name";
9355 var3 = 14;
9356 var4 = string__NativeString__to_s_with_length(var2, var3);
9357 var1 = var4;
9358 varonce = var1;
9359 }
9360 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var1) /* get_name on <self:GlobalCompilerVisitor>*/;
9361 var_res = var5;
9362 if (varonce6) {
9363 var7 = varonce6;
9364 } else {
9365 var8 = "const char* ";
9366 var9 = 12;
9367 var10 = string__NativeString__to_s_with_length(var8, var9);
9368 var7 = var10;
9369 varonce6 = var7;
9370 }
9371 if (varonce11) {
9372 var12 = varonce11;
9373 } else {
9374 var13 = ";";
9375 var14 = 1;
9376 var15 = string__NativeString__to_s_with_length(var13, var14);
9377 var12 = var15;
9378 varonce11 = var12;
9379 }
9380 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
9381 { /* var16 = array_instance Array[Object] */
9382 var17 = 3;
9383 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
9384 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
9385 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_res;
9386 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
9387 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
9388 }
9389 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
9390 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var19) /* add_decl on <self:GlobalCompilerVisitor>*/;
9391 var20 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
9392 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_compiler__MType__ctype]))(var20) /* ctype on <var20:MType>*/;
9393 if (varonce22) {
9394 var23 = varonce22;
9395 } else {
9396 var24 = "val*";
9397 var25 = 4;
9398 var26 = string__NativeString__to_s_with_length(var24, var25);
9399 var23 = var26;
9400 varonce22 = var23;
9401 }
9402 var27 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var23) /* == on <var21:String>*/;
9403 if (var27){
9404 if (varonce28) {
9405 var29 = varonce28;
9406 } else {
9407 var30 = " = class_names[";
9408 var31 = 15;
9409 var32 = string__NativeString__to_s_with_length(var30, var31);
9410 var29 = var32;
9411 varonce28 = var29;
9412 }
9413 if (varonce33) {
9414 var34 = varonce33;
9415 } else {
9416 var35 = "->classid];";
9417 var36 = 11;
9418 var37 = string__NativeString__to_s_with_length(var35, var36);
9419 var34 = var37;
9420 varonce33 = var34;
9421 }
9422 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
9423 { /* var38 = array_instance Array[Object] */
9424 var39 = 4;
9425 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
9426 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var_res;
9427 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var29;
9428 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var_value;
9429 ((struct instance_array__NativeArray*)var40)->values[3] = (val*) var34;
9430 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
9431 }
9432 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
9433 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var41) /* add on <self:GlobalCompilerVisitor>*/;
9434 } else {
9435 if (varonce42) {
9436 var43 = varonce42;
9437 } else {
9438 var44 = " = class_names[";
9439 var45 = 15;
9440 var46 = string__NativeString__to_s_with_length(var44, var45);
9441 var43 = var46;
9442 varonce42 = var43;
9443 }
9444 var47 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9445 var48 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
9446 /* <var48:MType> isa MClassType */
9447 cltype = type_model__MClassType.color;
9448 idtype = type_model__MClassType.id;
9449 if(cltype >= var48->type->table_size) {
9450 var49 = 0;
9451 } else {
9452 var49 = var48->type->type_table[cltype] == idtype;
9453 }
9454 if (!var49) {
9455 var_class_name = var48 == NULL ? "null" : var48->type->name;
9456 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
9457 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 774);
9458 show_backtrace(1);
9459 }
9460 var50 = ((val* (*)(val*, val*))(var47->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var47, var48) /* classid on <var47:AbstractCompiler(GlobalCompiler)>*/;
9461 if (varonce51) {
9462 var52 = varonce51;
9463 } else {
9464 var53 = "];";
9465 var54 = 2;
9466 var55 = string__NativeString__to_s_with_length(var53, var54);
9467 var52 = var55;
9468 varonce51 = var52;
9469 }
9470 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
9471 { /* var56 = array_instance Array[Object] */
9472 var57 = 4;
9473 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
9474 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var_res;
9475 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var43;
9476 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var50;
9477 ((struct instance_array__NativeArray*)var58)->values[3] = (val*) var52;
9478 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
9479 }
9480 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
9481 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
9482 }
9483 var = var_res;
9484 goto RET_LABEL;
9485 RET_LABEL:;
9486 return var;
9487 }
9488 /* method global_compiler#GlobalCompilerVisitor#class_name_string for (self: Object, RuntimeVariable): String */
9489 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__class_name_string(val* self, val* p0) {
9490 val* var /* : String */;
9491 val* var1 /* : String */;
9492 var1 = global_compiler__GlobalCompilerVisitor__class_name_string(self, p0);
9493 var = var1;
9494 RET_LABEL:;
9495 return var;
9496 }