nitg: move adding gc_chooser out of the makefile generation
[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 CHECK_NEW_global_compiler__GlobalCompiler(var7);
130 var_compiler = var7;
131 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_header]))(var_compiler) /* compile_header on <var_compiler:GlobalCompiler>*/;
132 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>*/;
133 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Collection__iterator]))(var8) /* iterator on <var8:HashSet[MClassType]>*/;
134 for(;;) {
135 var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
136 if(!var10) break;
137 var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
138 var_t = var11;
139 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__declare_runtimeclass]))(var_compiler, var_t) /* declare_runtimeclass on <var_compiler:GlobalCompiler>*/;
140 CONTINUE_label: (void)0;
141 ((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
142 }
143 BREAK_label: (void)0;
144 ((void (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__compile_class_names]))(var_compiler) /* compile_class_names on <var_compiler:GlobalCompiler>*/;
145 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>*/;
146 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:HashSet[MClassType]>*/;
147 for(;;) {
148 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
149 if(!var14) break;
150 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
151 var_t16 = var15;
152 var17 = ((val* (*)(val*))(var_t16->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t16) /* ctype on <var_t16:MClassType>*/;
153 if (varonce18) {
154 var19 = varonce18;
155 } else {
156 var20 = "val*";
157 var21 = 4;
158 var22 = string__NativeString__to_s_with_length(var20, var21);
159 var19 = var22;
160 varonce18 = var19;
161 }
162 var23 = ((short int (*)(val*, val*))(var17->class->vft[COLOR_kernel__Object___61d_61d]))(var17, var19) /* == on <var17:String>*/;
163 if (var23){
164 ((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>*/;
165 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_check_init_instance]))(var_compiler, var_t16) /* generate_check_init_instance on <var_compiler:GlobalCompiler>*/;
166 } else {
167 ((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>*/;
168 }
169 CONTINUE_label24: (void)0;
170 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
171 }
172 BREAK_label24: (void)0;
173 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_main_function]))(var_compiler) /* compile_main_function on <var_compiler:GlobalCompiler>*/;
174 for(;;) {
175 var25 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__todos]))(var_compiler) /* todos on <var_compiler:GlobalCompiler>*/;
176 var26 = ((short int (*)(val*))(var25->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var25) /* is_empty on <var25:List[AbstractRuntimeFunction]>*/;
177 var27 = !var26;
178 if (!var27) break;
179 var28 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__todos]))(var_compiler) /* todos on <var_compiler:GlobalCompiler>*/;
180 var29 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Sequence__shift]))(var28) /* shift on <var28:List[AbstractRuntimeFunction]>*/;
181 var_m = var29;
182 var30 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
183 if (varonce31) {
184 var32 = varonce31;
185 } else {
186 var33 = "Compile ";
187 var34 = 8;
188 var35 = string__NativeString__to_s_with_length(var33, var34);
189 var32 = var35;
190 varonce31 = var32;
191 }
192 if (varonce36) {
193 var37 = varonce36;
194 } else {
195 var38 = " (";
196 var39 = 2;
197 var40 = string__NativeString__to_s_with_length(var38, var39);
198 var37 = var40;
199 varonce36 = var37;
200 }
201 var41 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(var_compiler) /* seen on <var_compiler:GlobalCompiler>*/;
202 var42 = ((long (*)(val*))(var41->class->vft[COLOR_abstract_collection__Collection__length]))(var41) /* length on <var41:HashSet[AbstractRuntimeFunction]>*/;
203 var43 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__todos]))(var_compiler) /* todos on <var_compiler:GlobalCompiler>*/;
204 var44 = ((long (*)(val*))(var43->class->vft[COLOR_abstract_collection__Collection__length]))(var43) /* length on <var43:List[AbstractRuntimeFunction]>*/;
205 { /* Inline kernel#Int#- (var42,var44) */
206 var47 = var42 - var44;
207 var45 = var47;
208 goto RET_LABEL46;
209 RET_LABEL46:(void)0;
210 }
211 if (varonce48) {
212 var49 = varonce48;
213 } else {
214 var50 = "/";
215 var51 = 1;
216 var52 = string__NativeString__to_s_with_length(var50, var51);
217 var49 = var52;
218 varonce48 = var49;
219 }
220 var53 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(var_compiler) /* seen on <var_compiler:GlobalCompiler>*/;
221 var54 = ((long (*)(val*))(var53->class->vft[COLOR_abstract_collection__Collection__length]))(var53) /* length on <var53:HashSet[AbstractRuntimeFunction]>*/;
222 if (varonce55) {
223 var56 = varonce55;
224 } else {
225 var57 = ")";
226 var58 = 1;
227 var59 = string__NativeString__to_s_with_length(var57, var58);
228 var56 = var59;
229 varonce55 = var56;
230 }
231 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
232 { /* var60 = array_instance Array[Object] */
233 var61 = 7;
234 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
235 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var32;
236 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_m;
237 ((struct instance_array__NativeArray*)var62)->values[2] = (val*) var37;
238 var63 = BOX_kernel__Int(var45); /* autobox from Int to Object */
239 ((struct instance_array__NativeArray*)var62)->values[3] = (val*) var63;
240 ((struct instance_array__NativeArray*)var62)->values[4] = (val*) var49;
241 var64 = BOX_kernel__Int(var54); /* autobox from Int to Object */
242 ((struct instance_array__NativeArray*)var62)->values[5] = (val*) var64;
243 ((struct instance_array__NativeArray*)var62)->values[6] = (val*) var56;
244 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
245 CHECK_NEW_array__Array(var60);
246 }
247 var65 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
248 var66 = 3;
249 ((void (*)(val*, val*, long))(var30->class->vft[COLOR_toolcontext__ToolContext__info]))(var30, var65, var66) /* info on <var30:ToolContext>*/;
250 ((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>*/;
251 CONTINUE_label67: (void)0;
252 }
253 BREAK_label67: (void)0;
254 var68 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
255 if (varonce69) {
256 var70 = varonce69;
257 } else {
258 var71 = "Total methods to compile to C: ";
259 var72 = 31;
260 var73 = string__NativeString__to_s_with_length(var71, var72);
261 var70 = var73;
262 varonce69 = var70;
263 }
264 var74 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(var_compiler) /* seen on <var_compiler:GlobalCompiler>*/;
265 var75 = ((long (*)(val*))(var74->class->vft[COLOR_abstract_collection__Collection__length]))(var74) /* length on <var74:HashSet[AbstractRuntimeFunction]>*/;
266 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
267 { /* var76 = array_instance Array[Object] */
268 var77 = 2;
269 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
270 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var70;
271 var79 = BOX_kernel__Int(var75); /* autobox from Int to Object */
272 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var79;
273 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
274 CHECK_NEW_array__Array(var76);
275 }
276 var80 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
277 var81 = 2;
278 ((void (*)(val*, val*, long))(var68->class->vft[COLOR_toolcontext__ToolContext__info]))(var68, var80, var81) /* info on <var68:ToolContext>*/;
279 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__display_stats]))(var_compiler) /* display_stats on <var_compiler:GlobalCompiler>*/;
280 var82 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
281 var_time1 = var82;
282 var83 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
283 if (varonce84) {
284 var85 = varonce84;
285 } else {
286 var86 = "*** END GENERATING C: ";
287 var87 = 22;
288 var88 = string__NativeString__to_s_with_length(var86, var87);
289 var85 = var88;
290 varonce84 = var85;
291 }
292 { /* Inline kernel#Int#- (var_time1,var_time0) */
293 var91 = var_time1 - var_time0;
294 var89 = var91;
295 goto RET_LABEL90;
296 RET_LABEL90:(void)0;
297 }
298 if (varonce92) {
299 var93 = varonce92;
300 } else {
301 var94 = " ***";
302 var95 = 4;
303 var96 = string__NativeString__to_s_with_length(var94, var95);
304 var93 = var96;
305 varonce92 = var93;
306 }
307 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
308 { /* var97 = array_instance Array[Object] */
309 var98 = 3;
310 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
311 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var85;
312 var100 = BOX_kernel__Int(var89); /* autobox from Int to Object */
313 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var100;
314 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
315 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
316 CHECK_NEW_array__Array(var97);
317 }
318 var101 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
319 var102 = 2;
320 ((void (*)(val*, val*, long))(var83->class->vft[COLOR_toolcontext__ToolContext__info]))(var83, var101, var102) /* info on <var83:ToolContext>*/;
321 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__ModelBuilder__write_and_make]))(self, var_compiler) /* write_and_make on <self:ModelBuilder>*/;
322 RET_LABEL:;
323 }
324 /* method global_compiler#ModelBuilder#run_global_compiler for (self: Object, MModule, RapidTypeAnalysis) */
325 void VIRTUAL_global_compiler__ModelBuilder__run_global_compiler(val* self, val* p0, val* p1) {
326 global_compiler__ModelBuilder__run_global_compiler(self, p0, p1);
327 RET_LABEL:;
328 }
329 /* method global_compiler#GlobalCompiler#runtime_type_analysis for (self: GlobalCompiler): RapidTypeAnalysis */
330 val* global_compiler__GlobalCompiler__runtime_type_analysis(val* self) {
331 val* var /* : RapidTypeAnalysis */;
332 val* var1 /* : RapidTypeAnalysis */;
333 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64druntime_type_analysis].val; /* @runtime_type_analysis on <self:GlobalCompiler> */
334 if (var1 == NULL) {
335 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @runtime_type_analysis");
336 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 85);
337 exit(1);
338 }
339 var = var1;
340 RET_LABEL:;
341 return var;
342 }
343 /* method global_compiler#GlobalCompiler#runtime_type_analysis for (self: Object): RapidTypeAnalysis */
344 val* VIRTUAL_global_compiler__GlobalCompiler__runtime_type_analysis(val* self) {
345 val* var /* : RapidTypeAnalysis */;
346 val* var1 /* : RapidTypeAnalysis */;
347 var1 = global_compiler__GlobalCompiler__runtime_type_analysis(self);
348 var = var1;
349 RET_LABEL:;
350 return var;
351 }
352 /* method global_compiler#GlobalCompiler#runtime_type_analysis= for (self: GlobalCompiler, RapidTypeAnalysis) */
353 void global_compiler__GlobalCompiler__runtime_type_analysis_61d(val* self, val* p0) {
354 self->attrs[COLOR_global_compiler__GlobalCompiler___64druntime_type_analysis].val = p0; /* @runtime_type_analysis on <self:GlobalCompiler> */
355 RET_LABEL:;
356 }
357 /* method global_compiler#GlobalCompiler#runtime_type_analysis= for (self: Object, RapidTypeAnalysis) */
358 void VIRTUAL_global_compiler__GlobalCompiler__runtime_type_analysis_61d(val* self, val* p0) {
359 global_compiler__GlobalCompiler__runtime_type_analysis_61d(self, p0);
360 RET_LABEL:;
361 }
362 /* method global_compiler#GlobalCompiler#init for (self: GlobalCompiler, MModule, ModelBuilder, RapidTypeAnalysis) */
363 void global_compiler__GlobalCompiler__init(val* self, val* p0, val* p1, val* p2) {
364 val* var_mainmodule /* var mainmodule: MModule */;
365 val* var_modelbuilder /* var modelbuilder: ModelBuilder */;
366 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
367 val* var /* : String */;
368 static val* varonce;
369 val* var1 /* : String */;
370 char* var2 /* : NativeString */;
371 long var3 /* : Int */;
372 val* var4 /* : String */;
373 val* var5 /* : Array[Object] */;
374 long var6 /* : Int */;
375 val* var7 /* : NativeArray[Object] */;
376 val* var8 /* : String */;
377 val* var9 /* : CodeFile */;
378 val* var_file /* var file: CodeFile */;
379 val* var10 /* : CodeWriter */;
380 val* var11 /* : Array[MClassType] */;
381 val* var12 /* : HashSet[MClassType] */;
382 val* var13 /* : Iterator[nullable Object] */;
383 short int var14 /* : Bool */;
384 val* var15 /* : nullable Object */;
385 val* var_t /* var t: MClassType */;
386 val* var16 /* : String */;
387 static val* varonce17;
388 val* var18 /* : String */;
389 char* var19 /* : NativeString */;
390 long var20 /* : Int */;
391 val* var21 /* : String */;
392 short int var22 /* : Bool */;
393 val* var23 /* : Array[MClassType] */;
394 var_mainmodule = p0;
395 var_modelbuilder = p1;
396 var_runtime_type_analysis = p2;
397 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__init]))(self, var_mainmodule, var_modelbuilder) /* init on <self:GlobalCompiler>*/;
398 var = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
399 if (varonce) {
400 var1 = varonce;
401 } else {
402 var2 = ".nitgg";
403 var3 = 6;
404 var4 = string__NativeString__to_s_with_length(var2, var3);
405 var1 = var4;
406 varonce = var1;
407 }
408 var5 = NEW_array__Array(&type_array__Arraykernel__Object);
409 { /* var5 = array_instance Array[Object] */
410 var6 = 2;
411 var7 = NEW_array__NativeArray(var6, &type_array__NativeArraykernel__Object);
412 ((struct instance_array__NativeArray*)var7)->values[0] = (val*) var;
413 ((struct instance_array__NativeArray*)var7)->values[1] = (val*) var1;
414 ((void (*)(val*, val*, long))(var5->class->vft[COLOR_array__Array__with_native]))(var5, var7, var6) /* with_native on <var5:Array[Object]>*/;
415 CHECK_NEW_array__Array(var5);
416 }
417 var8 = ((val* (*)(val*))(var5->class->vft[COLOR_string__Object__to_s]))(var5) /* to_s on <var5:Array[Object]>*/;
418 var9 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(self, var8) /* new_file on <self:GlobalCompiler>*/;
419 var_file = var9;
420 var10 = NEW_abstract_compiler__CodeWriter(&type_abstract_compiler__CodeWriter);
421 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_compiler__CodeWriter__init]))(var10, var_file) /* init on <var10:CodeWriter>*/;
422 CHECK_NEW_abstract_compiler__CodeWriter(var10);
423 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header_61d]))(self, var10) /* header= on <self:GlobalCompiler>*/;
424 ((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>*/;
425 var11 = NEW_array__Array(&type_array__Arraymodel__MClassType);
426 ((void (*)(val*))(var11->class->vft[COLOR_array__Array__init]))(var11) /* init on <var11:Array[MClassType]>*/;
427 CHECK_NEW_array__Array(var11);
428 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__live_primitive_types_61d]))(self, var11) /* live_primitive_types= on <self:GlobalCompiler>*/;
429 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>*/;
430 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:HashSet[MClassType]>*/;
431 for(;;) {
432 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
433 if(!var14) break;
434 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
435 var_t = var15;
436 var16 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MClassType>*/;
437 if (varonce17) {
438 var18 = varonce17;
439 } else {
440 var19 = "val*";
441 var20 = 4;
442 var21 = string__NativeString__to_s_with_length(var19, var20);
443 var18 = var21;
444 varonce17 = var18;
445 }
446 var22 = ((short int (*)(val*, val*))(var16->class->vft[COLOR_kernel__Object___33d_61d]))(var16, var18) /* != on <var16:String>*/;
447 if (var22){
448 var23 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__live_primitive_types]))(self) /* live_primitive_types on <self:GlobalCompiler>*/;
449 ((void (*)(val*, val*))(var23->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var23, var_t) /* add on <var23:Array[MClassType]>*/;
450 } else {
451 }
452 CONTINUE_label: (void)0;
453 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
454 }
455 BREAK_label: (void)0;
456 RET_LABEL:;
457 }
458 /* method global_compiler#GlobalCompiler#init for (self: Object, MModule, ModelBuilder, RapidTypeAnalysis) */
459 void VIRTUAL_global_compiler__GlobalCompiler__init(val* self, val* p0, val* p1, val* p2) {
460 global_compiler__GlobalCompiler__init(self, p0, p1, p2);
461 RET_LABEL:;
462 }
463 /* method global_compiler#GlobalCompiler#compile_class_names for (self: GlobalCompiler) */
464 void global_compiler__GlobalCompiler__compile_class_names(val* self) {
465 val* var /* : AbstractCompilerVisitor */;
466 val* var_v /* var v: GlobalCompilerVisitor */;
467 val* var1 /* : CodeWriter */;
468 static val* varonce;
469 val* var2 /* : String */;
470 char* var3 /* : NativeString */;
471 long var4 /* : Int */;
472 val* var5 /* : String */;
473 static val* varonce6;
474 val* var7 /* : String */;
475 char* var8 /* : NativeString */;
476 long var9 /* : Int */;
477 val* var10 /* : String */;
478 val* var11 /* : RapidTypeAnalysis */;
479 val* var12 /* : HashSet[MClassType] */;
480 val* var13 /* : Iterator[nullable Object] */;
481 short int var14 /* : Bool */;
482 val* var15 /* : nullable Object */;
483 val* var_t /* var t: MClassType */;
484 static val* varonce16;
485 val* var17 /* : String */;
486 char* var18 /* : NativeString */;
487 long var19 /* : Int */;
488 val* var20 /* : String */;
489 static val* varonce21;
490 val* var22 /* : String */;
491 char* var23 /* : NativeString */;
492 long var24 /* : Int */;
493 val* var25 /* : String */;
494 val* var26 /* : String */;
495 static val* varonce27;
496 val* var28 /* : String */;
497 char* var29 /* : NativeString */;
498 long var30 /* : Int */;
499 val* var31 /* : String */;
500 val* var32 /* : Array[Object] */;
501 long var33 /* : Int */;
502 val* var34 /* : NativeArray[Object] */;
503 val* var35 /* : String */;
504 static val* varonce36;
505 val* var37 /* : String */;
506 char* var38 /* : NativeString */;
507 long var39 /* : Int */;
508 val* var40 /* : String */;
509 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
510 var_v = var;
511 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
512 if (varonce) {
513 var2 = varonce;
514 } else {
515 var3 = "extern const char const * class_names[];";
516 var4 = 40;
517 var5 = string__NativeString__to_s_with_length(var3, var4);
518 var2 = var5;
519 varonce = var2;
520 }
521 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var1, var2) /* add_decl on <var1:CodeWriter>*/;
522 if (varonce6) {
523 var7 = varonce6;
524 } else {
525 var8 = "const char const * class_names[] = {";
526 var9 = 36;
527 var10 = string__NativeString__to_s_with_length(var8, var9);
528 var7 = var10;
529 varonce6 = var7;
530 }
531 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var7) /* add on <var_v:GlobalCompilerVisitor>*/;
532 var11 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
533 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var11) /* live_types on <var11:RapidTypeAnalysis>*/;
534 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:HashSet[MClassType]>*/;
535 for(;;) {
536 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
537 if(!var14) break;
538 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
539 var_t = var15;
540 if (varonce16) {
541 var17 = varonce16;
542 } else {
543 var18 = "\"";
544 var19 = 1;
545 var20 = string__NativeString__to_s_with_length(var18, var19);
546 var17 = var20;
547 varonce16 = var17;
548 }
549 if (varonce21) {
550 var22 = varonce21;
551 } else {
552 var23 = "\", /* ";
553 var24 = 6;
554 var25 = string__NativeString__to_s_with_length(var23, var24);
555 var22 = var25;
556 varonce21 = var22;
557 }
558 var26 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(self, var_t) /* classid on <self:GlobalCompiler>*/;
559 if (varonce27) {
560 var28 = varonce27;
561 } else {
562 var29 = " */";
563 var30 = 3;
564 var31 = string__NativeString__to_s_with_length(var29, var30);
565 var28 = var31;
566 varonce27 = var28;
567 }
568 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
569 { /* var32 = array_instance Array[Object] */
570 var33 = 5;
571 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
572 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var17;
573 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_t;
574 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var22;
575 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var26;
576 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
577 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
578 CHECK_NEW_array__Array(var32);
579 }
580 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
581 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var35) /* add on <var_v:GlobalCompilerVisitor>*/;
582 CONTINUE_label: (void)0;
583 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
584 }
585 BREAK_label: (void)0;
586 if (varonce36) {
587 var37 = varonce36;
588 } else {
589 var38 = "};";
590 var39 = 2;
591 var40 = string__NativeString__to_s_with_length(var38, var39);
592 var37 = var40;
593 varonce36 = var37;
594 }
595 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var37) /* add on <var_v:GlobalCompilerVisitor>*/;
596 RET_LABEL:;
597 }
598 /* method global_compiler#GlobalCompiler#compile_class_names for (self: Object) */
599 void VIRTUAL_global_compiler__GlobalCompiler__compile_class_names(val* self) {
600 global_compiler__GlobalCompiler__compile_class_names(self);
601 RET_LABEL:;
602 }
603 /* method global_compiler#GlobalCompiler#classid for (self: GlobalCompiler, MClassType): String */
604 val* global_compiler__GlobalCompiler__classid(val* self, val* p0) {
605 val* var /* : String */;
606 val* var_mtype /* var mtype: MClassType */;
607 val* var1 /* : HashMap[MClassType, String] */;
608 short int var2 /* : Bool */;
609 val* var3 /* : HashMap[MClassType, String] */;
610 val* var4 /* : nullable Object */;
611 static val* varonce;
612 val* var5 /* : String */;
613 char* var6 /* : NativeString */;
614 long var7 /* : Int */;
615 val* var8 /* : String */;
616 val* var9 /* : Array[Object] */;
617 long var10 /* : Int */;
618 val* var11 /* : NativeArray[Object] */;
619 val* var12 /* : String */;
620 var_mtype = p0;
621 var1 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
622 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var1, var_mtype) /* has_key on <var1:HashMap[MClassType, String]>*/;
623 if (var2){
624 var3 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
625 var4 = ((val* (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var3, var_mtype) /* [] on <var3:HashMap[MClassType, String]>*/;
626 var = var4;
627 goto RET_LABEL;
628 } else {
629 }
630 if (varonce) {
631 var5 = varonce;
632 } else {
633 var6 = "No classid for ";
634 var7 = 15;
635 var8 = string__NativeString__to_s_with_length(var6, var7);
636 var5 = var8;
637 varonce = var5;
638 }
639 var9 = NEW_array__Array(&type_array__Arraykernel__Object);
640 { /* var9 = array_instance Array[Object] */
641 var10 = 2;
642 var11 = NEW_array__NativeArray(var10, &type_array__NativeArraykernel__Object);
643 ((struct instance_array__NativeArray*)var11)->values[0] = (val*) var5;
644 ((struct instance_array__NativeArray*)var11)->values[1] = (val*) var_mtype;
645 ((void (*)(val*, val*, long))(var9->class->vft[COLOR_array__Array__with_native]))(var9, var11, var10) /* with_native on <var9:Array[Object]>*/;
646 CHECK_NEW_array__Array(var9);
647 }
648 var12 = ((val* (*)(val*))(var9->class->vft[COLOR_string__Object__to_s]))(var9) /* to_s on <var9:Array[Object]>*/;
649 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var12) /* print on <self:GlobalCompiler>*/;
650 fprintf(stderr, "Runtime error: %s", "Aborted");
651 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 121);
652 exit(1);
653 RET_LABEL:;
654 return var;
655 }
656 /* method global_compiler#GlobalCompiler#classid for (self: Object, MClassType): String */
657 val* VIRTUAL_global_compiler__GlobalCompiler__classid(val* self, val* p0) {
658 val* var /* : String */;
659 val* var1 /* : String */;
660 var1 = global_compiler__GlobalCompiler__classid(self, p0);
661 var = var1;
662 RET_LABEL:;
663 return var;
664 }
665 /* method global_compiler#GlobalCompiler#classids for (self: GlobalCompiler): HashMap[MClassType, String] */
666 val* global_compiler__GlobalCompiler__classids(val* self) {
667 val* var /* : HashMap[MClassType, String] */;
668 val* var1 /* : HashMap[MClassType, String] */;
669 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dclassids].val; /* @classids on <self:GlobalCompiler> */
670 if (var1 == NULL) {
671 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @classids");
672 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 124);
673 exit(1);
674 }
675 var = var1;
676 RET_LABEL:;
677 return var;
678 }
679 /* method global_compiler#GlobalCompiler#classids for (self: Object): HashMap[MClassType, String] */
680 val* VIRTUAL_global_compiler__GlobalCompiler__classids(val* self) {
681 val* var /* : HashMap[MClassType, String] */;
682 val* var1 /* : HashMap[MClassType, String] */;
683 var1 = global_compiler__GlobalCompiler__classids(self);
684 var = var1;
685 RET_LABEL:;
686 return var;
687 }
688 /* method global_compiler#GlobalCompiler#classids= for (self: GlobalCompiler, HashMap[MClassType, String]) */
689 void global_compiler__GlobalCompiler__classids_61d(val* self, val* p0) {
690 self->attrs[COLOR_global_compiler__GlobalCompiler___64dclassids].val = p0; /* @classids on <self:GlobalCompiler> */
691 RET_LABEL:;
692 }
693 /* method global_compiler#GlobalCompiler#classids= for (self: Object, HashMap[MClassType, String]) */
694 void VIRTUAL_global_compiler__GlobalCompiler__classids_61d(val* self, val* p0) {
695 global_compiler__GlobalCompiler__classids_61d(self, p0);
696 RET_LABEL:;
697 }
698 /* method global_compiler#GlobalCompiler#compile_header_structs for (self: GlobalCompiler) */
699 void global_compiler__GlobalCompiler__compile_header_structs(val* self) {
700 val* var /* : CodeWriter */;
701 static val* varonce;
702 val* var1 /* : String */;
703 char* var2 /* : NativeString */;
704 long var3 /* : Int */;
705 val* var4 /* : String */;
706 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
707 if (varonce) {
708 var1 = varonce;
709 } else {
710 var2 = "typedef struct {int classid;} val; /* general C type representing a Nit instance. */";
711 var3 = 84;
712 var4 = string__NativeString__to_s_with_length(var2, var3);
713 var1 = var4;
714 varonce = var1;
715 }
716 ((void (*)(val*, val*))(var->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var, var1) /* add_decl on <var:CodeWriter>*/;
717 RET_LABEL:;
718 }
719 /* method global_compiler#GlobalCompiler#compile_header_structs for (self: Object) */
720 void VIRTUAL_global_compiler__GlobalCompiler__compile_header_structs(val* self) {
721 global_compiler__GlobalCompiler__compile_header_structs(self);
722 RET_LABEL:;
723 }
724 /* method global_compiler#GlobalCompiler#live_primitive_types for (self: GlobalCompiler): Array[MClassType] */
725 val* global_compiler__GlobalCompiler__live_primitive_types(val* self) {
726 val* var /* : Array[MClassType] */;
727 val* var1 /* : Array[MClassType] */;
728 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dlive_primitive_types].val; /* @live_primitive_types on <self:GlobalCompiler> */
729 if (var1 == NULL) {
730 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @live_primitive_types");
731 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 135);
732 exit(1);
733 }
734 var = var1;
735 RET_LABEL:;
736 return var;
737 }
738 /* method global_compiler#GlobalCompiler#live_primitive_types for (self: Object): Array[MClassType] */
739 val* VIRTUAL_global_compiler__GlobalCompiler__live_primitive_types(val* self) {
740 val* var /* : Array[MClassType] */;
741 val* var1 /* : Array[MClassType] */;
742 var1 = global_compiler__GlobalCompiler__live_primitive_types(self);
743 var = var1;
744 RET_LABEL:;
745 return var;
746 }
747 /* method global_compiler#GlobalCompiler#live_primitive_types= for (self: GlobalCompiler, Array[MClassType]) */
748 void global_compiler__GlobalCompiler__live_primitive_types_61d(val* self, val* p0) {
749 self->attrs[COLOR_global_compiler__GlobalCompiler___64dlive_primitive_types].val = p0; /* @live_primitive_types on <self:GlobalCompiler> */
750 RET_LABEL:;
751 }
752 /* method global_compiler#GlobalCompiler#live_primitive_types= for (self: Object, Array[MClassType]) */
753 void VIRTUAL_global_compiler__GlobalCompiler__live_primitive_types_61d(val* self, val* p0) {
754 global_compiler__GlobalCompiler__live_primitive_types_61d(self, p0);
755 RET_LABEL:;
756 }
757 /* method global_compiler#GlobalCompiler#todo for (self: GlobalCompiler, AbstractRuntimeFunction) */
758 void global_compiler__GlobalCompiler__todo(val* self, val* p0) {
759 val* var_m /* var m: AbstractRuntimeFunction */;
760 val* var /* : HashSet[AbstractRuntimeFunction] */;
761 short int var1 /* : Bool */;
762 val* var2 /* : List[AbstractRuntimeFunction] */;
763 val* var3 /* : HashSet[AbstractRuntimeFunction] */;
764 var_m = p0;
765 var = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(self) /* seen on <self:GlobalCompiler>*/;
766 var1 = ((short int (*)(val*, val*))(var->class->vft[COLOR_abstract_collection__Collection__has]))(var, var_m) /* has on <var:HashSet[AbstractRuntimeFunction]>*/;
767 if (var1){
768 goto RET_LABEL;
769 } else {
770 }
771 var2 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__todos]))(self) /* todos on <self:GlobalCompiler>*/;
772 ((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_m) /* add on <var2:List[AbstractRuntimeFunction]>*/;
773 var3 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(self) /* seen on <self:GlobalCompiler>*/;
774 ((void (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var3, var_m) /* add on <var3:HashSet[AbstractRuntimeFunction]>*/;
775 RET_LABEL:;
776 }
777 /* method global_compiler#GlobalCompiler#todo for (self: Object, AbstractRuntimeFunction) */
778 void VIRTUAL_global_compiler__GlobalCompiler__todo(val* self, val* p0) {
779 global_compiler__GlobalCompiler__todo(self, p0);
780 RET_LABEL:;
781 }
782 /* method global_compiler#GlobalCompiler#todos for (self: GlobalCompiler): List[AbstractRuntimeFunction] */
783 val* global_compiler__GlobalCompiler__todos(val* self) {
784 val* var /* : List[AbstractRuntimeFunction] */;
785 val* var1 /* : List[AbstractRuntimeFunction] */;
786 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dtodos].val; /* @todos on <self:GlobalCompiler> */
787 if (var1 == NULL) {
788 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @todos");
789 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 147);
790 exit(1);
791 }
792 var = var1;
793 RET_LABEL:;
794 return var;
795 }
796 /* method global_compiler#GlobalCompiler#todos for (self: Object): List[AbstractRuntimeFunction] */
797 val* VIRTUAL_global_compiler__GlobalCompiler__todos(val* self) {
798 val* var /* : List[AbstractRuntimeFunction] */;
799 val* var1 /* : List[AbstractRuntimeFunction] */;
800 var1 = global_compiler__GlobalCompiler__todos(self);
801 var = var1;
802 RET_LABEL:;
803 return var;
804 }
805 /* method global_compiler#GlobalCompiler#todos= for (self: GlobalCompiler, List[AbstractRuntimeFunction]) */
806 void global_compiler__GlobalCompiler__todos_61d(val* self, val* p0) {
807 self->attrs[COLOR_global_compiler__GlobalCompiler___64dtodos].val = p0; /* @todos on <self:GlobalCompiler> */
808 RET_LABEL:;
809 }
810 /* method global_compiler#GlobalCompiler#todos= for (self: Object, List[AbstractRuntimeFunction]) */
811 void VIRTUAL_global_compiler__GlobalCompiler__todos_61d(val* self, val* p0) {
812 global_compiler__GlobalCompiler__todos_61d(self, p0);
813 RET_LABEL:;
814 }
815 /* method global_compiler#GlobalCompiler#seen for (self: GlobalCompiler): HashSet[AbstractRuntimeFunction] */
816 val* global_compiler__GlobalCompiler__seen(val* self) {
817 val* var /* : HashSet[AbstractRuntimeFunction] */;
818 val* var1 /* : HashSet[AbstractRuntimeFunction] */;
819 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dseen].val; /* @seen on <self:GlobalCompiler> */
820 if (var1 == NULL) {
821 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @seen");
822 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 150);
823 exit(1);
824 }
825 var = var1;
826 RET_LABEL:;
827 return var;
828 }
829 /* method global_compiler#GlobalCompiler#seen for (self: Object): HashSet[AbstractRuntimeFunction] */
830 val* VIRTUAL_global_compiler__GlobalCompiler__seen(val* self) {
831 val* var /* : HashSet[AbstractRuntimeFunction] */;
832 val* var1 /* : HashSet[AbstractRuntimeFunction] */;
833 var1 = global_compiler__GlobalCompiler__seen(self);
834 var = var1;
835 RET_LABEL:;
836 return var;
837 }
838 /* method global_compiler#GlobalCompiler#seen= for (self: GlobalCompiler, HashSet[AbstractRuntimeFunction]) */
839 void global_compiler__GlobalCompiler__seen_61d(val* self, val* p0) {
840 self->attrs[COLOR_global_compiler__GlobalCompiler___64dseen].val = p0; /* @seen on <self:GlobalCompiler> */
841 RET_LABEL:;
842 }
843 /* method global_compiler#GlobalCompiler#seen= for (self: Object, HashSet[AbstractRuntimeFunction]) */
844 void VIRTUAL_global_compiler__GlobalCompiler__seen_61d(val* self, val* p0) {
845 global_compiler__GlobalCompiler__seen_61d(self, p0);
846 RET_LABEL:;
847 }
848 /* method global_compiler#GlobalCompiler#declare_runtimeclass for (self: GlobalCompiler, MClassType) */
849 void global_compiler__GlobalCompiler__declare_runtimeclass(val* self, val* p0) {
850 val* var_mtype /* var mtype: MClassType */;
851 val* var /* : CodeWriter */;
852 val* var_v /* var v: CodeWriter */;
853 val* var1 /* : RapidTypeAnalysis */;
854 val* var2 /* : HashSet[MClassType] */;
855 short int var3 /* : Bool */;
856 static val* varonce;
857 val* var4 /* : String */;
858 char* var5 /* : NativeString */;
859 long var6 /* : Int */;
860 val* var7 /* : String */;
861 static val* varonce8;
862 val* var9 /* : String */;
863 char* var10 /* : NativeString */;
864 long var11 /* : Int */;
865 val* var12 /* : String */;
866 val* var13 /* : Array[Object] */;
867 long var14 /* : Int */;
868 val* var15 /* : NativeArray[Object] */;
869 val* var16 /* : String */;
870 val* var17 /* : HashMap[MClassType, String] */;
871 long var18 /* : Int */;
872 long var_idnum /* var idnum: Int */;
873 static val* varonce19;
874 val* var20 /* : String */;
875 char* var21 /* : NativeString */;
876 long var22 /* : Int */;
877 val* var23 /* : String */;
878 val* var24 /* : String */;
879 val* var25 /* : String */;
880 val* var_idname /* var idname: String */;
881 val* var26 /* : HashMap[MClassType, String] */;
882 static val* varonce27;
883 val* var28 /* : String */;
884 char* var29 /* : NativeString */;
885 long var30 /* : Int */;
886 val* var31 /* : String */;
887 static val* varonce32;
888 val* var33 /* : String */;
889 char* var34 /* : NativeString */;
890 long var35 /* : Int */;
891 val* var36 /* : String */;
892 static val* varonce37;
893 val* var38 /* : String */;
894 char* var39 /* : NativeString */;
895 long var40 /* : Int */;
896 val* var41 /* : String */;
897 static val* varonce42;
898 val* var43 /* : String */;
899 char* var44 /* : NativeString */;
900 long var45 /* : Int */;
901 val* var46 /* : String */;
902 val* var47 /* : Array[Object] */;
903 long var48 /* : Int */;
904 val* var49 /* : NativeArray[Object] */;
905 val* var50 /* : Object */;
906 val* var51 /* : String */;
907 static val* varonce52;
908 val* var53 /* : String */;
909 char* var54 /* : NativeString */;
910 long var55 /* : Int */;
911 val* var56 /* : String */;
912 val* var57 /* : String */;
913 static val* varonce58;
914 val* var59 /* : String */;
915 char* var60 /* : NativeString */;
916 long var61 /* : Int */;
917 val* var62 /* : String */;
918 val* var63 /* : Array[Object] */;
919 long var64 /* : Int */;
920 val* var65 /* : NativeArray[Object] */;
921 val* var66 /* : String */;
922 static val* varonce67;
923 val* var68 /* : String */;
924 char* var69 /* : NativeString */;
925 long var70 /* : Int */;
926 val* var71 /* : String */;
927 static val* varonce72;
928 val* var73 /* : String */;
929 char* var74 /* : NativeString */;
930 long var75 /* : Int */;
931 val* var76 /* : String */;
932 val* var77 /* : Array[Object] */;
933 long var78 /* : Int */;
934 val* var79 /* : NativeArray[Object] */;
935 val* var80 /* : String */;
936 val* var81 /* : MClass */;
937 val* var82 /* : String */;
938 static val* varonce83;
939 val* var84 /* : String */;
940 char* var85 /* : NativeString */;
941 long var86 /* : Int */;
942 val* var87 /* : String */;
943 short int var88 /* : Bool */;
944 val* var89 /* : Array[MType] */;
945 val* var90 /* : nullable Object */;
946 val* var91 /* : String */;
947 static val* varonce92;
948 val* var93 /* : String */;
949 char* var94 /* : NativeString */;
950 long var95 /* : Int */;
951 val* var96 /* : String */;
952 val* var97 /* : Array[Object] */;
953 long var98 /* : Int */;
954 val* var99 /* : NativeArray[Object] */;
955 val* var100 /* : String */;
956 val* var101 /* : String */;
957 static val* varonce102;
958 val* var103 /* : String */;
959 char* var104 /* : NativeString */;
960 long var105 /* : Int */;
961 val* var106 /* : String */;
962 short int var107 /* : Bool */;
963 val* var108 /* : String */;
964 static val* varonce109;
965 val* var110 /* : String */;
966 char* var111 /* : NativeString */;
967 long var112 /* : Int */;
968 val* var113 /* : String */;
969 val* var114 /* : Array[Object] */;
970 long var115 /* : Int */;
971 val* var116 /* : NativeArray[Object] */;
972 val* var117 /* : String */;
973 val* var118 /* : MModule */;
974 val* var119 /* : Set[MClassDef] */;
975 val* var120 /* : Iterator[nullable Object] */;
976 short int var121 /* : Bool */;
977 val* var122 /* : nullable Object */;
978 val* var_cd /* var cd: MClassDef */;
979 val* var123 /* : Array[MProperty] */;
980 val* var124 /* : Iterator[nullable Object] */;
981 short int var125 /* : Bool */;
982 val* var126 /* : nullable Object */;
983 val* var_p /* var p: MProperty */;
984 short int var127 /* : Bool */;
985 int cltype;
986 int idtype;
987 short int var128 /* : Bool */;
988 val* var129 /* : MPropDef */;
989 val* var130 /* : nullable MType */;
990 val* var_t /* var t: MType */;
991 val* var131 /* : MModule */;
992 val* var132 /* : MType */;
993 val* var133 /* : String */;
994 static val* varonce134;
995 val* var135 /* : String */;
996 char* var136 /* : NativeString */;
997 long var137 /* : Int */;
998 val* var138 /* : String */;
999 val* var139 /* : MPropDef */;
1000 val* var140 /* : String */;
1001 static val* varonce141;
1002 val* var142 /* : String */;
1003 char* var143 /* : NativeString */;
1004 long var144 /* : Int */;
1005 val* var145 /* : String */;
1006 static val* varonce146;
1007 val* var147 /* : String */;
1008 char* var148 /* : NativeString */;
1009 long var149 /* : Int */;
1010 val* var150 /* : String */;
1011 static val* varonce151;
1012 val* var152 /* : String */;
1013 char* var153 /* : NativeString */;
1014 long var154 /* : Int */;
1015 val* var155 /* : String */;
1016 val* var156 /* : Array[Object] */;
1017 long var157 /* : Int */;
1018 val* var158 /* : NativeArray[Object] */;
1019 val* var159 /* : String */;
1020 static val* varonce161;
1021 val* var162 /* : String */;
1022 char* var163 /* : NativeString */;
1023 long var164 /* : Int */;
1024 val* var165 /* : String */;
1025 var_mtype = p0;
1026 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
1027 var_v = var;
1028 var1 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
1029 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var1) /* live_types on <var1:RapidTypeAnalysis>*/;
1030 var3 = ((short int (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__Collection__has]))(var2, var_mtype) /* has on <var2:HashSet[MClassType]>*/;
1031 if (!var3) {
1032 fprintf(stderr, "Runtime error: %s", "Assert failed");
1033 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 157);
1034 exit(1);
1035 }
1036 if (varonce) {
1037 var4 = varonce;
1038 } else {
1039 var5 = "/* runtime class ";
1040 var6 = 17;
1041 var7 = string__NativeString__to_s_with_length(var5, var6);
1042 var4 = var7;
1043 varonce = var4;
1044 }
1045 if (varonce8) {
1046 var9 = varonce8;
1047 } else {
1048 var10 = " */";
1049 var11 = 3;
1050 var12 = string__NativeString__to_s_with_length(var10, var11);
1051 var9 = var12;
1052 varonce8 = var9;
1053 }
1054 var13 = NEW_array__Array(&type_array__Arraykernel__Object);
1055 { /* var13 = array_instance Array[Object] */
1056 var14 = 3;
1057 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraykernel__Object);
1058 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var4;
1059 ((struct instance_array__NativeArray*)var15)->values[1] = (val*) var_mtype;
1060 ((struct instance_array__NativeArray*)var15)->values[2] = (val*) var9;
1061 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[Object]>*/;
1062 CHECK_NEW_array__Array(var13);
1063 }
1064 var16 = ((val* (*)(val*))(var13->class->vft[COLOR_string__Object__to_s]))(var13) /* to_s on <var13:Array[Object]>*/;
1065 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var16) /* add_decl on <var_v:CodeWriter>*/;
1066 var17 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
1067 var18 = ((long (*)(val*))(var17->class->vft[COLOR_abstract_collection__MapRead__length]))(var17) /* length on <var17:HashMap[MClassType, String]>*/;
1068 var_idnum = var18;
1069 if (varonce19) {
1070 var20 = varonce19;
1071 } else {
1072 var21 = "ID_";
1073 var22 = 3;
1074 var23 = string__NativeString__to_s_with_length(var21, var22);
1075 var20 = var23;
1076 varonce19 = var20;
1077 }
1078 var24 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1079 var25 = ((val* (*)(val*, val*))(var20->class->vft[COLOR_string__String___43d]))(var20, var24) /* + on <var20:String>*/;
1080 var_idname = var25;
1081 var26 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
1082 ((void (*)(val*, val*, val*))(var26->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var26, var_mtype, var_idname) /* []= on <var26:HashMap[MClassType, String]>*/;
1083 if (varonce27) {
1084 var28 = varonce27;
1085 } else {
1086 var29 = "#define ";
1087 var30 = 8;
1088 var31 = string__NativeString__to_s_with_length(var29, var30);
1089 var28 = var31;
1090 varonce27 = var28;
1091 }
1092 if (varonce32) {
1093 var33 = varonce32;
1094 } else {
1095 var34 = " ";
1096 var35 = 1;
1097 var36 = string__NativeString__to_s_with_length(var34, var35);
1098 var33 = var36;
1099 varonce32 = var33;
1100 }
1101 if (varonce37) {
1102 var38 = varonce37;
1103 } else {
1104 var39 = " /* ";
1105 var40 = 4;
1106 var41 = string__NativeString__to_s_with_length(var39, var40);
1107 var38 = var41;
1108 varonce37 = var38;
1109 }
1110 if (varonce42) {
1111 var43 = varonce42;
1112 } else {
1113 var44 = " */";
1114 var45 = 3;
1115 var46 = string__NativeString__to_s_with_length(var44, var45);
1116 var43 = var46;
1117 varonce42 = var43;
1118 }
1119 var47 = NEW_array__Array(&type_array__Arraykernel__Object);
1120 { /* var47 = array_instance Array[Object] */
1121 var48 = 7;
1122 var49 = NEW_array__NativeArray(var48, &type_array__NativeArraykernel__Object);
1123 ((struct instance_array__NativeArray*)var49)->values[0] = (val*) var28;
1124 ((struct instance_array__NativeArray*)var49)->values[1] = (val*) var_idname;
1125 ((struct instance_array__NativeArray*)var49)->values[2] = (val*) var33;
1126 var50 = BOX_kernel__Int(var_idnum); /* autobox from Int to Object */
1127 ((struct instance_array__NativeArray*)var49)->values[3] = (val*) var50;
1128 ((struct instance_array__NativeArray*)var49)->values[4] = (val*) var38;
1129 ((struct instance_array__NativeArray*)var49)->values[5] = (val*) var_mtype;
1130 ((struct instance_array__NativeArray*)var49)->values[6] = (val*) var43;
1131 ((void (*)(val*, val*, long))(var47->class->vft[COLOR_array__Array__with_native]))(var47, var49, var48) /* with_native on <var47:Array[Object]>*/;
1132 CHECK_NEW_array__Array(var47);
1133 }
1134 var51 = ((val* (*)(val*))(var47->class->vft[COLOR_string__Object__to_s]))(var47) /* to_s on <var47:Array[Object]>*/;
1135 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var51) /* add_decl on <var_v:CodeWriter>*/;
1136 if (varonce52) {
1137 var53 = varonce52;
1138 } else {
1139 var54 = "struct ";
1140 var55 = 7;
1141 var56 = string__NativeString__to_s_with_length(var54, var55);
1142 var53 = var56;
1143 varonce52 = var53;
1144 }
1145 var57 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1146 if (varonce58) {
1147 var59 = varonce58;
1148 } else {
1149 var60 = " {";
1150 var61 = 2;
1151 var62 = string__NativeString__to_s_with_length(var60, var61);
1152 var59 = var62;
1153 varonce58 = var59;
1154 }
1155 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
1156 { /* var63 = array_instance Array[Object] */
1157 var64 = 3;
1158 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
1159 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var53;
1160 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var57;
1161 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var59;
1162 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
1163 CHECK_NEW_array__Array(var63);
1164 }
1165 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
1166 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var66) /* add_decl on <var_v:CodeWriter>*/;
1167 if (varonce67) {
1168 var68 = varonce67;
1169 } else {
1170 var69 = "int classid; /* must be ";
1171 var70 = 24;
1172 var71 = string__NativeString__to_s_with_length(var69, var70);
1173 var68 = var71;
1174 varonce67 = var68;
1175 }
1176 if (varonce72) {
1177 var73 = varonce72;
1178 } else {
1179 var74 = " */";
1180 var75 = 3;
1181 var76 = string__NativeString__to_s_with_length(var74, var75);
1182 var73 = var76;
1183 varonce72 = var73;
1184 }
1185 var77 = NEW_array__Array(&type_array__Arraykernel__Object);
1186 { /* var77 = array_instance Array[Object] */
1187 var78 = 3;
1188 var79 = NEW_array__NativeArray(var78, &type_array__NativeArraykernel__Object);
1189 ((struct instance_array__NativeArray*)var79)->values[0] = (val*) var68;
1190 ((struct instance_array__NativeArray*)var79)->values[1] = (val*) var_idname;
1191 ((struct instance_array__NativeArray*)var79)->values[2] = (val*) var73;
1192 ((void (*)(val*, val*, long))(var77->class->vft[COLOR_array__Array__with_native]))(var77, var79, var78) /* with_native on <var77:Array[Object]>*/;
1193 CHECK_NEW_array__Array(var77);
1194 }
1195 var80 = ((val* (*)(val*))(var77->class->vft[COLOR_string__Object__to_s]))(var77) /* to_s on <var77:Array[Object]>*/;
1196 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var80) /* add_decl on <var_v:CodeWriter>*/;
1197 var81 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
1198 var82 = ((val* (*)(val*))(var81->class->vft[COLOR_model__MClass__name]))(var81) /* name on <var81:MClass>*/;
1199 if (varonce83) {
1200 var84 = varonce83;
1201 } else {
1202 var85 = "NativeArray";
1203 var86 = 11;
1204 var87 = string__NativeString__to_s_with_length(var85, var86);
1205 var84 = var87;
1206 varonce83 = var84;
1207 }
1208 var88 = ((short int (*)(val*, val*))(var82->class->vft[COLOR_kernel__Object___61d_61d]))(var82, var84) /* == on <var82:String>*/;
1209 if (var88){
1210 var89 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
1211 var90 = ((val* (*)(val*))(var89->class->vft[COLOR_abstract_collection__Collection__first]))(var89) /* first on <var89:Array[MType]>*/;
1212 var91 = ((val* (*)(val*))(var90->class->vft[COLOR_abstract_compiler__MType__ctype]))(var90) /* ctype on <var90:nullable Object(MType)>*/;
1213 if (varonce92) {
1214 var93 = varonce92;
1215 } else {
1216 var94 = " values[1];";
1217 var95 = 11;
1218 var96 = string__NativeString__to_s_with_length(var94, var95);
1219 var93 = var96;
1220 varonce92 = var93;
1221 }
1222 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
1223 { /* var97 = array_instance Array[Object] */
1224 var98 = 2;
1225 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
1226 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var91;
1227 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var93;
1228 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
1229 CHECK_NEW_array__Array(var97);
1230 }
1231 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
1232 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var100) /* add_decl on <var_v:CodeWriter>*/;
1233 } else {
1234 }
1235 var101 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1236 if (varonce102) {
1237 var103 = varonce102;
1238 } else {
1239 var104 = "val*";
1240 var105 = 4;
1241 var106 = string__NativeString__to_s_with_length(var104, var105);
1242 var103 = var106;
1243 varonce102 = var103;
1244 }
1245 var107 = ((short int (*)(val*, val*))(var101->class->vft[COLOR_kernel__Object___33d_61d]))(var101, var103) /* != on <var101:String>*/;
1246 if (var107){
1247 var108 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1248 if (varonce109) {
1249 var110 = varonce109;
1250 } else {
1251 var111 = " value;";
1252 var112 = 7;
1253 var113 = string__NativeString__to_s_with_length(var111, var112);
1254 var110 = var113;
1255 varonce109 = var110;
1256 }
1257 var114 = NEW_array__Array(&type_array__Arraykernel__Object);
1258 { /* var114 = array_instance Array[Object] */
1259 var115 = 2;
1260 var116 = NEW_array__NativeArray(var115, &type_array__NativeArraykernel__Object);
1261 ((struct instance_array__NativeArray*)var116)->values[0] = (val*) var108;
1262 ((struct instance_array__NativeArray*)var116)->values[1] = (val*) var110;
1263 ((void (*)(val*, val*, long))(var114->class->vft[COLOR_array__Array__with_native]))(var114, var116, var115) /* with_native on <var114:Array[Object]>*/;
1264 CHECK_NEW_array__Array(var114);
1265 }
1266 var117 = ((val* (*)(val*))(var114->class->vft[COLOR_string__Object__to_s]))(var114) /* to_s on <var114:Array[Object]>*/;
1267 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var117) /* add_decl on <var_v:CodeWriter>*/;
1268 } else {
1269 }
1270 var118 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:GlobalCompiler>*/;
1271 var119 = ((val* (*)(val*, val*))(var_mtype->class->vft[COLOR_model__MType__collect_mclassdefs]))(var_mtype, var118) /* collect_mclassdefs on <var_mtype:MClassType>*/;
1272 var120 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_collection__Collection__iterator]))(var119) /* iterator on <var119:Set[MClassDef]>*/;
1273 for(;;) {
1274 var121 = ((short int (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var120) /* is_ok on <var120:Iterator[nullable Object]>*/;
1275 if(!var121) break;
1276 var122 = ((val* (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__item]))(var120) /* item on <var120:Iterator[nullable Object]>*/;
1277 var_cd = var122;
1278 var123 = ((val* (*)(val*))(var_cd->class->vft[COLOR_model__MClassDef__intro_mproperties]))(var_cd) /* intro_mproperties on <var_cd:MClassDef>*/;
1279 var124 = ((val* (*)(val*))(var123->class->vft[COLOR_abstract_collection__Collection__iterator]))(var123) /* iterator on <var123:Array[MProperty]>*/;
1280 for(;;) {
1281 var125 = ((short int (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var124) /* is_ok on <var124:Iterator[nullable Object]>*/;
1282 if(!var125) break;
1283 var126 = ((val* (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__item]))(var124) /* item on <var124:Iterator[nullable Object]>*/;
1284 var_p = var126;
1285 /* <var_p:MProperty> isa MAttribute */
1286 cltype = type_model__MAttribute.color;
1287 idtype = type_model__MAttribute.id;
1288 if(cltype >= var_p->type->table_size) {
1289 var127 = 0;
1290 } else {
1291 var127 = var_p->type->type_table[cltype] == idtype;
1292 }
1293 var128 = !var127;
1294 if (var128){
1295 goto CONTINUE_label;
1296 } else {
1297 }
1298 var129 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MProperty__intro]))(var_p) /* intro on <var_p:MProperty(MAttribute)>*/;
1299 var130 = ((val* (*)(val*))(var129->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var129) /* static_mtype on <var129:MPropDef(MAttributeDef)>*/;
1300 if (var130 == NULL) {
1301 fprintf(stderr, "Runtime error: %s", "Cast failed");
1302 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 184);
1303 exit(1);
1304 }
1305 var_t = var130;
1306 var131 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:GlobalCompiler>*/;
1307 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>*/;
1308 var_t = var132;
1309 var133 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MType>*/;
1310 if (varonce134) {
1311 var135 = varonce134;
1312 } else {
1313 var136 = " ";
1314 var137 = 1;
1315 var138 = string__NativeString__to_s_with_length(var136, var137);
1316 var135 = var138;
1317 varonce134 = var135;
1318 }
1319 var139 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MProperty__intro]))(var_p) /* intro on <var_p:MProperty(MAttribute)>*/;
1320 var140 = ((val* (*)(val*))(var139->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var139) /* c_name on <var139:MPropDef(MAttributeDef)>*/;
1321 if (varonce141) {
1322 var142 = varonce141;
1323 } else {
1324 var143 = "; /* ";
1325 var144 = 5;
1326 var145 = string__NativeString__to_s_with_length(var143, var144);
1327 var142 = var145;
1328 varonce141 = var142;
1329 }
1330 if (varonce146) {
1331 var147 = varonce146;
1332 } else {
1333 var148 = ": ";
1334 var149 = 2;
1335 var150 = string__NativeString__to_s_with_length(var148, var149);
1336 var147 = var150;
1337 varonce146 = var147;
1338 }
1339 if (varonce151) {
1340 var152 = varonce151;
1341 } else {
1342 var153 = " */";
1343 var154 = 3;
1344 var155 = string__NativeString__to_s_with_length(var153, var154);
1345 var152 = var155;
1346 varonce151 = var152;
1347 }
1348 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
1349 { /* var156 = array_instance Array[Object] */
1350 var157 = 8;
1351 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
1352 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var133;
1353 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var135;
1354 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var140;
1355 ((struct instance_array__NativeArray*)var158)->values[3] = (val*) var142;
1356 ((struct instance_array__NativeArray*)var158)->values[4] = (val*) var_p;
1357 ((struct instance_array__NativeArray*)var158)->values[5] = (val*) var147;
1358 ((struct instance_array__NativeArray*)var158)->values[6] = (val*) var_t;
1359 ((struct instance_array__NativeArray*)var158)->values[7] = (val*) var152;
1360 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
1361 CHECK_NEW_array__Array(var156);
1362 }
1363 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
1364 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var159) /* add_decl on <var_v:CodeWriter>*/;
1365 CONTINUE_label: (void)0;
1366 ((void (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__next]))(var124) /* next on <var124:Iterator[nullable Object]>*/;
1367 }
1368 BREAK_label: (void)0;
1369 CONTINUE_label160: (void)0;
1370 ((void (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__next]))(var120) /* next on <var120:Iterator[nullable Object]>*/;
1371 }
1372 BREAK_label160: (void)0;
1373 if (varonce161) {
1374 var162 = varonce161;
1375 } else {
1376 var163 = "};";
1377 var164 = 2;
1378 var165 = string__NativeString__to_s_with_length(var163, var164);
1379 var162 = var165;
1380 varonce161 = var162;
1381 }
1382 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var162) /* add_decl on <var_v:CodeWriter>*/;
1383 RET_LABEL:;
1384 }
1385 /* method global_compiler#GlobalCompiler#declare_runtimeclass for (self: Object, MClassType) */
1386 void VIRTUAL_global_compiler__GlobalCompiler__declare_runtimeclass(val* self, val* p0) {
1387 global_compiler__GlobalCompiler__declare_runtimeclass(self, p0);
1388 RET_LABEL:;
1389 }
1390 /* method global_compiler#GlobalCompiler#generate_init_instance for (self: GlobalCompiler, MClassType) */
1391 void global_compiler__GlobalCompiler__generate_init_instance(val* self, val* p0) {
1392 val* var_mtype /* var mtype: MClassType */;
1393 val* var /* : RapidTypeAnalysis */;
1394 val* var1 /* : HashSet[MClassType] */;
1395 short int var2 /* : Bool */;
1396 val* var3 /* : String */;
1397 static val* varonce;
1398 val* var4 /* : String */;
1399 char* var5 /* : NativeString */;
1400 long var6 /* : Int */;
1401 val* var7 /* : String */;
1402 short int var8 /* : Bool */;
1403 val* var9 /* : AbstractCompilerVisitor */;
1404 val* var_v /* var v: GlobalCompilerVisitor */;
1405 val* var10 /* : MClass */;
1406 val* var11 /* : String */;
1407 static val* varonce12;
1408 val* var13 /* : String */;
1409 char* var14 /* : NativeString */;
1410 long var15 /* : Int */;
1411 val* var16 /* : String */;
1412 short int var17 /* : Bool */;
1413 short int var_is_native_array /* var is_native_array: Bool */;
1414 static val* varonce18;
1415 val* var19 /* : String */;
1416 char* var20 /* : NativeString */;
1417 long var21 /* : Int */;
1418 val* var22 /* : String */;
1419 val* var_sig /* var sig: nullable Object */;
1420 static val* varonce23;
1421 val* var24 /* : String */;
1422 char* var25 /* : NativeString */;
1423 long var26 /* : Int */;
1424 val* var27 /* : String */;
1425 val* var28 /* : CodeWriter */;
1426 val* var29 /* : String */;
1427 static val* varonce30;
1428 val* var31 /* : String */;
1429 char* var32 /* : NativeString */;
1430 long var33 /* : Int */;
1431 val* var34 /* : String */;
1432 val* var35 /* : String */;
1433 static val* varonce36;
1434 val* var37 /* : String */;
1435 char* var38 /* : NativeString */;
1436 long var39 /* : Int */;
1437 val* var40 /* : String */;
1438 static val* varonce41;
1439 val* var42 /* : String */;
1440 char* var43 /* : NativeString */;
1441 long var44 /* : Int */;
1442 val* var45 /* : String */;
1443 val* var46 /* : Array[Object] */;
1444 long var47 /* : Int */;
1445 val* var48 /* : NativeArray[Object] */;
1446 val* var49 /* : String */;
1447 static val* varonce50;
1448 val* var51 /* : String */;
1449 char* var52 /* : NativeString */;
1450 long var53 /* : Int */;
1451 val* var54 /* : String */;
1452 static val* varonce55;
1453 val* var56 /* : String */;
1454 char* var57 /* : NativeString */;
1455 long var58 /* : Int */;
1456 val* var59 /* : String */;
1457 val* var60 /* : Array[Object] */;
1458 long var61 /* : Int */;
1459 val* var62 /* : NativeArray[Object] */;
1460 val* var63 /* : String */;
1461 val* var64 /* : String */;
1462 static val* varonce65;
1463 val* var66 /* : String */;
1464 char* var67 /* : NativeString */;
1465 long var68 /* : Int */;
1466 val* var69 /* : String */;
1467 val* var70 /* : String */;
1468 static val* varonce71;
1469 val* var72 /* : String */;
1470 char* var73 /* : NativeString */;
1471 long var74 /* : Int */;
1472 val* var75 /* : String */;
1473 static val* varonce76;
1474 val* var77 /* : String */;
1475 char* var78 /* : NativeString */;
1476 long var79 /* : Int */;
1477 val* var80 /* : String */;
1478 val* var81 /* : Array[Object] */;
1479 long var82 /* : Int */;
1480 val* var83 /* : NativeArray[Object] */;
1481 val* var84 /* : String */;
1482 val* var85 /* : RuntimeVariable */;
1483 val* var_res /* var res: RuntimeVariable */;
1484 short int var86 /* : Bool */;
1485 val* var87 /* : Array[MType] */;
1486 val* var88 /* : nullable Object */;
1487 val* var_mtype_elt /* var mtype_elt: MType */;
1488 static val* varonce89;
1489 val* var90 /* : String */;
1490 char* var91 /* : NativeString */;
1491 long var92 /* : Int */;
1492 val* var93 /* : String */;
1493 val* var94 /* : String */;
1494 static val* varonce95;
1495 val* var96 /* : String */;
1496 char* var97 /* : NativeString */;
1497 long var98 /* : Int */;
1498 val* var99 /* : String */;
1499 val* var100 /* : String */;
1500 static val* varonce101;
1501 val* var102 /* : String */;
1502 char* var103 /* : NativeString */;
1503 long var104 /* : Int */;
1504 val* var105 /* : String */;
1505 val* var106 /* : Array[Object] */;
1506 long var107 /* : Int */;
1507 val* var108 /* : NativeArray[Object] */;
1508 val* var109 /* : String */;
1509 static val* varonce110;
1510 val* var111 /* : String */;
1511 char* var112 /* : NativeString */;
1512 long var113 /* : Int */;
1513 val* var114 /* : String */;
1514 val* var115 /* : String */;
1515 static val* varonce116;
1516 val* var117 /* : String */;
1517 char* var118 /* : NativeString */;
1518 long var119 /* : Int */;
1519 val* var120 /* : String */;
1520 val* var121 /* : Array[Object] */;
1521 long var122 /* : Int */;
1522 val* var123 /* : NativeArray[Object] */;
1523 val* var124 /* : String */;
1524 static val* varonce125;
1525 val* var126 /* : String */;
1526 char* var127 /* : NativeString */;
1527 long var128 /* : Int */;
1528 val* var129 /* : String */;
1529 val* var130 /* : String */;
1530 static val* varonce131;
1531 val* var132 /* : String */;
1532 char* var133 /* : NativeString */;
1533 long var134 /* : Int */;
1534 val* var135 /* : String */;
1535 val* var136 /* : Array[Object] */;
1536 long var137 /* : Int */;
1537 val* var138 /* : NativeArray[Object] */;
1538 val* var139 /* : String */;
1539 static val* varonce140;
1540 val* var141 /* : String */;
1541 char* var142 /* : NativeString */;
1542 long var143 /* : Int */;
1543 val* var144 /* : String */;
1544 static val* varonce145;
1545 val* var146 /* : String */;
1546 char* var147 /* : NativeString */;
1547 long var148 /* : Int */;
1548 val* var149 /* : String */;
1549 val* var150 /* : Array[Object] */;
1550 long var151 /* : Int */;
1551 val* var152 /* : NativeArray[Object] */;
1552 val* var153 /* : String */;
1553 static val* varonce154;
1554 val* var155 /* : String */;
1555 char* var156 /* : NativeString */;
1556 long var157 /* : Int */;
1557 val* var158 /* : String */;
1558 var_mtype = p0;
1559 var = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
1560 var1 = ((val* (*)(val*))(var->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var) /* live_types on <var:RapidTypeAnalysis>*/;
1561 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__Collection__has]))(var1, var_mtype) /* has on <var1:HashSet[MClassType]>*/;
1562 if (!var2) {
1563 fprintf(stderr, "Runtime error: %s", "Assert failed");
1564 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 195);
1565 exit(1);
1566 }
1567 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1568 if (varonce) {
1569 var4 = varonce;
1570 } else {
1571 var5 = "val*";
1572 var6 = 4;
1573 var7 = string__NativeString__to_s_with_length(var5, var6);
1574 var4 = var7;
1575 varonce = var4;
1576 }
1577 var8 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_kernel__Object___61d_61d]))(var3, var4) /* == on <var3:String>*/;
1578 if (!var8) {
1579 fprintf(stderr, "Runtime error: %s", "Assert failed");
1580 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 196);
1581 exit(1);
1582 }
1583 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
1584 var_v = var9;
1585 var10 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
1586 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_model__MClass__name]))(var10) /* name on <var10:MClass>*/;
1587 if (varonce12) {
1588 var13 = varonce12;
1589 } else {
1590 var14 = "NativeArray";
1591 var15 = 11;
1592 var16 = string__NativeString__to_s_with_length(var14, var15);
1593 var13 = var16;
1594 varonce12 = var13;
1595 }
1596 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
1597 var_is_native_array = var17;
1598 if (var_is_native_array){
1599 if (varonce18) {
1600 var19 = varonce18;
1601 } else {
1602 var20 = "int length";
1603 var21 = 10;
1604 var22 = string__NativeString__to_s_with_length(var20, var21);
1605 var19 = var22;
1606 varonce18 = var19;
1607 }
1608 var_sig = var19;
1609 } else {
1610 if (varonce23) {
1611 var24 = varonce23;
1612 } else {
1613 var25 = "void";
1614 var26 = 4;
1615 var27 = string__NativeString__to_s_with_length(var25, var26);
1616 var24 = var27;
1617 varonce23 = var24;
1618 }
1619 var_sig = var24;
1620 }
1621 var28 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
1622 var29 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1623 if (varonce30) {
1624 var31 = varonce30;
1625 } else {
1626 var32 = " NEW_";
1627 var33 = 5;
1628 var34 = string__NativeString__to_s_with_length(var32, var33);
1629 var31 = var34;
1630 varonce30 = var31;
1631 }
1632 var35 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1633 if (varonce36) {
1634 var37 = varonce36;
1635 } else {
1636 var38 = "(";
1637 var39 = 1;
1638 var40 = string__NativeString__to_s_with_length(var38, var39);
1639 var37 = var40;
1640 varonce36 = var37;
1641 }
1642 if (varonce41) {
1643 var42 = varonce41;
1644 } else {
1645 var43 = ");";
1646 var44 = 2;
1647 var45 = string__NativeString__to_s_with_length(var43, var44);
1648 var42 = var45;
1649 varonce41 = var42;
1650 }
1651 var46 = NEW_array__Array(&type_array__Arraykernel__Object);
1652 { /* var46 = array_instance Array[Object] */
1653 var47 = 6;
1654 var48 = NEW_array__NativeArray(var47, &type_array__NativeArraykernel__Object);
1655 ((struct instance_array__NativeArray*)var48)->values[0] = (val*) var29;
1656 ((struct instance_array__NativeArray*)var48)->values[1] = (val*) var31;
1657 ((struct instance_array__NativeArray*)var48)->values[2] = (val*) var35;
1658 ((struct instance_array__NativeArray*)var48)->values[3] = (val*) var37;
1659 ((struct instance_array__NativeArray*)var48)->values[4] = (val*) var_sig;
1660 ((struct instance_array__NativeArray*)var48)->values[5] = (val*) var42;
1661 ((void (*)(val*, val*, long))(var46->class->vft[COLOR_array__Array__with_native]))(var46, var48, var47) /* with_native on <var46:Array[Object]>*/;
1662 CHECK_NEW_array__Array(var46);
1663 }
1664 var49 = ((val* (*)(val*))(var46->class->vft[COLOR_string__Object__to_s]))(var46) /* to_s on <var46:Array[Object]>*/;
1665 ((void (*)(val*, val*))(var28->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var28, var49) /* add_decl on <var28:CodeWriter>*/;
1666 if (varonce50) {
1667 var51 = varonce50;
1668 } else {
1669 var52 = "/* allocate ";
1670 var53 = 12;
1671 var54 = string__NativeString__to_s_with_length(var52, var53);
1672 var51 = var54;
1673 varonce50 = var51;
1674 }
1675 if (varonce55) {
1676 var56 = varonce55;
1677 } else {
1678 var57 = " */";
1679 var58 = 3;
1680 var59 = string__NativeString__to_s_with_length(var57, var58);
1681 var56 = var59;
1682 varonce55 = var56;
1683 }
1684 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
1685 { /* var60 = array_instance Array[Object] */
1686 var61 = 3;
1687 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
1688 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var51;
1689 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_mtype;
1690 ((struct instance_array__NativeArray*)var62)->values[2] = (val*) var56;
1691 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
1692 CHECK_NEW_array__Array(var60);
1693 }
1694 var63 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
1695 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var63) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
1696 var64 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1697 if (varonce65) {
1698 var66 = varonce65;
1699 } else {
1700 var67 = " NEW_";
1701 var68 = 5;
1702 var69 = string__NativeString__to_s_with_length(var67, var68);
1703 var66 = var69;
1704 varonce65 = var66;
1705 }
1706 var70 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1707 if (varonce71) {
1708 var72 = varonce71;
1709 } else {
1710 var73 = "(";
1711 var74 = 1;
1712 var75 = string__NativeString__to_s_with_length(var73, var74);
1713 var72 = var75;
1714 varonce71 = var72;
1715 }
1716 if (varonce76) {
1717 var77 = varonce76;
1718 } else {
1719 var78 = ") {";
1720 var79 = 3;
1721 var80 = string__NativeString__to_s_with_length(var78, var79);
1722 var77 = var80;
1723 varonce76 = var77;
1724 }
1725 var81 = NEW_array__Array(&type_array__Arraykernel__Object);
1726 { /* var81 = array_instance Array[Object] */
1727 var82 = 6;
1728 var83 = NEW_array__NativeArray(var82, &type_array__NativeArraykernel__Object);
1729 ((struct instance_array__NativeArray*)var83)->values[0] = (val*) var64;
1730 ((struct instance_array__NativeArray*)var83)->values[1] = (val*) var66;
1731 ((struct instance_array__NativeArray*)var83)->values[2] = (val*) var70;
1732 ((struct instance_array__NativeArray*)var83)->values[3] = (val*) var72;
1733 ((struct instance_array__NativeArray*)var83)->values[4] = (val*) var_sig;
1734 ((struct instance_array__NativeArray*)var83)->values[5] = (val*) var77;
1735 ((void (*)(val*, val*, long))(var81->class->vft[COLOR_array__Array__with_native]))(var81, var83, var82) /* with_native on <var81:Array[Object]>*/;
1736 CHECK_NEW_array__Array(var81);
1737 }
1738 var84 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__to_s]))(var81) /* to_s on <var81:Array[Object]>*/;
1739 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var84) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
1740 var85 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(var_v, var_mtype) /* new_var on <var_v:GlobalCompilerVisitor>*/;
1741 var_res = var85;
1742 var86 = 1;
1743 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var86) /* is_exact= on <var_res:RuntimeVariable>*/;
1744 if (var_is_native_array){
1745 var87 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
1746 var88 = ((val* (*)(val*))(var87->class->vft[COLOR_abstract_collection__Collection__first]))(var87) /* first on <var87:Array[MType]>*/;
1747 var_mtype_elt = var88;
1748 if (varonce89) {
1749 var90 = varonce89;
1750 } else {
1751 var91 = " = nit_alloc(sizeof(struct ";
1752 var92 = 27;
1753 var93 = string__NativeString__to_s_with_length(var91, var92);
1754 var90 = var93;
1755 varonce89 = var90;
1756 }
1757 var94 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1758 if (varonce95) {
1759 var96 = varonce95;
1760 } else {
1761 var97 = ") + length*sizeof(";
1762 var98 = 18;
1763 var99 = string__NativeString__to_s_with_length(var97, var98);
1764 var96 = var99;
1765 varonce95 = var96;
1766 }
1767 var100 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
1768 if (varonce101) {
1769 var102 = varonce101;
1770 } else {
1771 var103 = "));";
1772 var104 = 3;
1773 var105 = string__NativeString__to_s_with_length(var103, var104);
1774 var102 = var105;
1775 varonce101 = var102;
1776 }
1777 var106 = NEW_array__Array(&type_array__Arraykernel__Object);
1778 { /* var106 = array_instance Array[Object] */
1779 var107 = 6;
1780 var108 = NEW_array__NativeArray(var107, &type_array__NativeArraykernel__Object);
1781 ((struct instance_array__NativeArray*)var108)->values[0] = (val*) var_res;
1782 ((struct instance_array__NativeArray*)var108)->values[1] = (val*) var90;
1783 ((struct instance_array__NativeArray*)var108)->values[2] = (val*) var94;
1784 ((struct instance_array__NativeArray*)var108)->values[3] = (val*) var96;
1785 ((struct instance_array__NativeArray*)var108)->values[4] = (val*) var100;
1786 ((struct instance_array__NativeArray*)var108)->values[5] = (val*) var102;
1787 ((void (*)(val*, val*, long))(var106->class->vft[COLOR_array__Array__with_native]))(var106, var108, var107) /* with_native on <var106:Array[Object]>*/;
1788 CHECK_NEW_array__Array(var106);
1789 }
1790 var109 = ((val* (*)(val*))(var106->class->vft[COLOR_string__Object__to_s]))(var106) /* to_s on <var106:Array[Object]>*/;
1791 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var109) /* add on <var_v:GlobalCompilerVisitor>*/;
1792 } else {
1793 if (varonce110) {
1794 var111 = varonce110;
1795 } else {
1796 var112 = " = nit_alloc(sizeof(struct ";
1797 var113 = 27;
1798 var114 = string__NativeString__to_s_with_length(var112, var113);
1799 var111 = var114;
1800 varonce110 = var111;
1801 }
1802 var115 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1803 if (varonce116) {
1804 var117 = varonce116;
1805 } else {
1806 var118 = "));";
1807 var119 = 3;
1808 var120 = string__NativeString__to_s_with_length(var118, var119);
1809 var117 = var120;
1810 varonce116 = var117;
1811 }
1812 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
1813 { /* var121 = array_instance Array[Object] */
1814 var122 = 4;
1815 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
1816 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var_res;
1817 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var111;
1818 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var115;
1819 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var117;
1820 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
1821 CHECK_NEW_array__Array(var121);
1822 }
1823 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
1824 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var124) /* add on <var_v:GlobalCompilerVisitor>*/;
1825 }
1826 if (varonce125) {
1827 var126 = varonce125;
1828 } else {
1829 var127 = "->classid = ";
1830 var128 = 12;
1831 var129 = string__NativeString__to_s_with_length(var127, var128);
1832 var126 = var129;
1833 varonce125 = var126;
1834 }
1835 var130 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(self, var_mtype) /* classid on <self:GlobalCompiler>*/;
1836 if (varonce131) {
1837 var132 = varonce131;
1838 } else {
1839 var133 = ";";
1840 var134 = 1;
1841 var135 = string__NativeString__to_s_with_length(var133, var134);
1842 var132 = var135;
1843 varonce131 = var132;
1844 }
1845 var136 = NEW_array__Array(&type_array__Arraykernel__Object);
1846 { /* var136 = array_instance Array[Object] */
1847 var137 = 4;
1848 var138 = NEW_array__NativeArray(var137, &type_array__NativeArraykernel__Object);
1849 ((struct instance_array__NativeArray*)var138)->values[0] = (val*) var_res;
1850 ((struct instance_array__NativeArray*)var138)->values[1] = (val*) var126;
1851 ((struct instance_array__NativeArray*)var138)->values[2] = (val*) var130;
1852 ((struct instance_array__NativeArray*)var138)->values[3] = (val*) var132;
1853 ((void (*)(val*, val*, long))(var136->class->vft[COLOR_array__Array__with_native]))(var136, var138, var137) /* with_native on <var136:Array[Object]>*/;
1854 CHECK_NEW_array__Array(var136);
1855 }
1856 var139 = ((val* (*)(val*))(var136->class->vft[COLOR_string__Object__to_s]))(var136) /* to_s on <var136:Array[Object]>*/;
1857 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var139) /* add on <var_v:GlobalCompilerVisitor>*/;
1858 ((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>*/;
1859 if (varonce140) {
1860 var141 = varonce140;
1861 } else {
1862 var142 = "return ";
1863 var143 = 7;
1864 var144 = string__NativeString__to_s_with_length(var142, var143);
1865 var141 = var144;
1866 varonce140 = var141;
1867 }
1868 if (varonce145) {
1869 var146 = varonce145;
1870 } else {
1871 var147 = ";";
1872 var148 = 1;
1873 var149 = string__NativeString__to_s_with_length(var147, var148);
1874 var146 = var149;
1875 varonce145 = var146;
1876 }
1877 var150 = NEW_array__Array(&type_array__Arraykernel__Object);
1878 { /* var150 = array_instance Array[Object] */
1879 var151 = 3;
1880 var152 = NEW_array__NativeArray(var151, &type_array__NativeArraykernel__Object);
1881 ((struct instance_array__NativeArray*)var152)->values[0] = (val*) var141;
1882 ((struct instance_array__NativeArray*)var152)->values[1] = (val*) var_res;
1883 ((struct instance_array__NativeArray*)var152)->values[2] = (val*) var146;
1884 ((void (*)(val*, val*, long))(var150->class->vft[COLOR_array__Array__with_native]))(var150, var152, var151) /* with_native on <var150:Array[Object]>*/;
1885 CHECK_NEW_array__Array(var150);
1886 }
1887 var153 = ((val* (*)(val*))(var150->class->vft[COLOR_string__Object__to_s]))(var150) /* to_s on <var150:Array[Object]>*/;
1888 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var153) /* add on <var_v:GlobalCompilerVisitor>*/;
1889 if (varonce154) {
1890 var155 = varonce154;
1891 } else {
1892 var156 = "}";
1893 var157 = 1;
1894 var158 = string__NativeString__to_s_with_length(var156, var157);
1895 var155 = var158;
1896 varonce154 = var155;
1897 }
1898 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var155) /* add on <var_v:GlobalCompilerVisitor>*/;
1899 RET_LABEL:;
1900 }
1901 /* method global_compiler#GlobalCompiler#generate_init_instance for (self: Object, MClassType) */
1902 void VIRTUAL_global_compiler__GlobalCompiler__generate_init_instance(val* self, val* p0) {
1903 global_compiler__GlobalCompiler__generate_init_instance(self, p0);
1904 RET_LABEL:;
1905 }
1906 /* method global_compiler#GlobalCompiler#generate_check_init_instance for (self: GlobalCompiler, MClassType) */
1907 void global_compiler__GlobalCompiler__generate_check_init_instance(val* self, val* p0) {
1908 val* var_mtype /* var mtype: MClassType */;
1909 val* var /* : ModelBuilder */;
1910 val* var1 /* : ToolContext */;
1911 val* var2 /* : OptionBool */;
1912 val* var3 /* : nullable Object */;
1913 short int var4 /* : Bool */;
1914 val* var5 /* : AbstractCompilerVisitor */;
1915 val* var_v /* var v: GlobalCompilerVisitor */;
1916 val* var6 /* : RuntimeVariable */;
1917 static val* varonce;
1918 val* var7 /* : String */;
1919 char* var8 /* : NativeString */;
1920 long var9 /* : Int */;
1921 val* var10 /* : String */;
1922 val* var_res /* var res: RuntimeVariable */;
1923 val* var11 /* : CodeWriter */;
1924 static val* varonce12;
1925 val* var13 /* : String */;
1926 char* var14 /* : NativeString */;
1927 long var15 /* : Int */;
1928 val* var16 /* : String */;
1929 val* var17 /* : String */;
1930 static val* varonce18;
1931 val* var19 /* : String */;
1932 char* var20 /* : NativeString */;
1933 long var21 /* : Int */;
1934 val* var22 /* : String */;
1935 val* var23 /* : String */;
1936 static val* varonce24;
1937 val* var25 /* : String */;
1938 char* var26 /* : NativeString */;
1939 long var27 /* : Int */;
1940 val* var28 /* : String */;
1941 val* var29 /* : Array[Object] */;
1942 long var30 /* : Int */;
1943 val* var31 /* : NativeArray[Object] */;
1944 val* var32 /* : String */;
1945 static val* varonce33;
1946 val* var34 /* : String */;
1947 char* var35 /* : NativeString */;
1948 long var36 /* : Int */;
1949 val* var37 /* : String */;
1950 static val* varonce38;
1951 val* var39 /* : String */;
1952 char* var40 /* : NativeString */;
1953 long var41 /* : Int */;
1954 val* var42 /* : String */;
1955 val* var43 /* : Array[Object] */;
1956 long var44 /* : Int */;
1957 val* var45 /* : NativeArray[Object] */;
1958 val* var46 /* : String */;
1959 static val* varonce47;
1960 val* var48 /* : String */;
1961 char* var49 /* : NativeString */;
1962 long var50 /* : Int */;
1963 val* var51 /* : String */;
1964 val* var52 /* : String */;
1965 static val* varonce53;
1966 val* var54 /* : String */;
1967 char* var55 /* : NativeString */;
1968 long var56 /* : Int */;
1969 val* var57 /* : String */;
1970 val* var58 /* : String */;
1971 static val* varonce59;
1972 val* var60 /* : String */;
1973 char* var61 /* : NativeString */;
1974 long var62 /* : Int */;
1975 val* var63 /* : String */;
1976 static val* varonce64;
1977 val* var65 /* : String */;
1978 char* var66 /* : NativeString */;
1979 long var67 /* : Int */;
1980 val* var68 /* : String */;
1981 val* var69 /* : Array[Object] */;
1982 long var70 /* : Int */;
1983 val* var71 /* : NativeArray[Object] */;
1984 val* var72 /* : String */;
1985 static val* varonce73;
1986 val* var74 /* : String */;
1987 char* var75 /* : NativeString */;
1988 long var76 /* : Int */;
1989 val* var77 /* : String */;
1990 var_mtype = p0;
1991 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:GlobalCompiler>*/;
1992 var1 = ((val* (*)(val*))(var->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var) /* toolcontext on <var:ModelBuilder>*/;
1993 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_initialization]))(var1) /* opt_no_check_initialization on <var1:ToolContext>*/;
1994 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_opts__Option__value]))(var2) /* value on <var2:OptionBool>*/;
1995 var4 = ((struct instance_kernel__Bool*)var3)->value; /* autounbox from nullable Object to Bool */;
1996 if (var4){
1997 goto RET_LABEL;
1998 } else {
1999 }
2000 var5 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
2001 var_v = var5;
2002 var6 = NEW_abstract_compiler__RuntimeVariable(&type_abstract_compiler__RuntimeVariable);
2003 if (varonce) {
2004 var7 = varonce;
2005 } else {
2006 var8 = "self";
2007 var9 = 4;
2008 var10 = string__NativeString__to_s_with_length(var8, var9);
2009 var7 = var10;
2010 varonce = var7;
2011 }
2012 ((void (*)(val*, val*, val*, val*))(var6->class->vft[COLOR_abstract_compiler__RuntimeVariable__init]))(var6, var7, var_mtype, var_mtype) /* init on <var6:RuntimeVariable>*/;
2013 CHECK_NEW_abstract_compiler__RuntimeVariable(var6);
2014 var_res = var6;
2015 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
2016 if (varonce12) {
2017 var13 = varonce12;
2018 } else {
2019 var14 = "void CHECK_NEW_";
2020 var15 = 15;
2021 var16 = string__NativeString__to_s_with_length(var14, var15);
2022 var13 = var16;
2023 varonce12 = var13;
2024 }
2025 var17 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2026 if (varonce18) {
2027 var19 = varonce18;
2028 } else {
2029 var20 = "(";
2030 var21 = 1;
2031 var22 = string__NativeString__to_s_with_length(var20, var21);
2032 var19 = var22;
2033 varonce18 = var19;
2034 }
2035 var23 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2036 if (varonce24) {
2037 var25 = varonce24;
2038 } else {
2039 var26 = ");";
2040 var27 = 2;
2041 var28 = string__NativeString__to_s_with_length(var26, var27);
2042 var25 = var28;
2043 varonce24 = var25;
2044 }
2045 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
2046 { /* var29 = array_instance Array[Object] */
2047 var30 = 5;
2048 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
2049 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var13;
2050 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var17;
2051 ((struct instance_array__NativeArray*)var31)->values[2] = (val*) var19;
2052 ((struct instance_array__NativeArray*)var31)->values[3] = (val*) var23;
2053 ((struct instance_array__NativeArray*)var31)->values[4] = (val*) var25;
2054 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
2055 CHECK_NEW_array__Array(var29);
2056 }
2057 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
2058 ((void (*)(val*, val*))(var11->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var11, var32) /* add_decl on <var11:CodeWriter>*/;
2059 if (varonce33) {
2060 var34 = varonce33;
2061 } else {
2062 var35 = "/* allocate ";
2063 var36 = 12;
2064 var37 = string__NativeString__to_s_with_length(var35, var36);
2065 var34 = var37;
2066 varonce33 = var34;
2067 }
2068 if (varonce38) {
2069 var39 = varonce38;
2070 } else {
2071 var40 = " */";
2072 var41 = 3;
2073 var42 = string__NativeString__to_s_with_length(var40, var41);
2074 var39 = var42;
2075 varonce38 = var39;
2076 }
2077 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
2078 { /* var43 = array_instance Array[Object] */
2079 var44 = 3;
2080 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
2081 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var34;
2082 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var_mtype;
2083 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var39;
2084 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
2085 CHECK_NEW_array__Array(var43);
2086 }
2087 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
2088 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var46) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2089 if (varonce47) {
2090 var48 = varonce47;
2091 } else {
2092 var49 = "void CHECK_NEW_";
2093 var50 = 15;
2094 var51 = string__NativeString__to_s_with_length(var49, var50);
2095 var48 = var51;
2096 varonce47 = var48;
2097 }
2098 var52 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2099 if (varonce53) {
2100 var54 = varonce53;
2101 } else {
2102 var55 = "(";
2103 var56 = 1;
2104 var57 = string__NativeString__to_s_with_length(var55, var56);
2105 var54 = var57;
2106 varonce53 = var54;
2107 }
2108 var58 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2109 if (varonce59) {
2110 var60 = varonce59;
2111 } else {
2112 var61 = " ";
2113 var62 = 1;
2114 var63 = string__NativeString__to_s_with_length(var61, var62);
2115 var60 = var63;
2116 varonce59 = var60;
2117 }
2118 if (varonce64) {
2119 var65 = varonce64;
2120 } else {
2121 var66 = ") {";
2122 var67 = 3;
2123 var68 = string__NativeString__to_s_with_length(var66, var67);
2124 var65 = var68;
2125 varonce64 = var65;
2126 }
2127 var69 = NEW_array__Array(&type_array__Arraykernel__Object);
2128 { /* var69 = array_instance Array[Object] */
2129 var70 = 7;
2130 var71 = NEW_array__NativeArray(var70, &type_array__NativeArraykernel__Object);
2131 ((struct instance_array__NativeArray*)var71)->values[0] = (val*) var48;
2132 ((struct instance_array__NativeArray*)var71)->values[1] = (val*) var52;
2133 ((struct instance_array__NativeArray*)var71)->values[2] = (val*) var54;
2134 ((struct instance_array__NativeArray*)var71)->values[3] = (val*) var58;
2135 ((struct instance_array__NativeArray*)var71)->values[4] = (val*) var60;
2136 ((struct instance_array__NativeArray*)var71)->values[5] = (val*) var_res;
2137 ((struct instance_array__NativeArray*)var71)->values[6] = (val*) var65;
2138 ((void (*)(val*, val*, long))(var69->class->vft[COLOR_array__Array__with_native]))(var69, var71, var70) /* with_native on <var69:Array[Object]>*/;
2139 CHECK_NEW_array__Array(var69);
2140 }
2141 var72 = ((val* (*)(val*))(var69->class->vft[COLOR_string__Object__to_s]))(var69) /* to_s on <var69:Array[Object]>*/;
2142 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var72) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2143 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_check_attr]))(self, var_v, var_res, var_mtype) /* generate_check_attr on <self:GlobalCompiler>*/;
2144 if (varonce73) {
2145 var74 = varonce73;
2146 } else {
2147 var75 = "}";
2148 var76 = 1;
2149 var77 = string__NativeString__to_s_with_length(var75, var76);
2150 var74 = var77;
2151 varonce73 = var74;
2152 }
2153 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var74) /* add on <var_v:GlobalCompilerVisitor>*/;
2154 RET_LABEL:;
2155 }
2156 /* method global_compiler#GlobalCompiler#generate_check_init_instance for (self: Object, MClassType) */
2157 void VIRTUAL_global_compiler__GlobalCompiler__generate_check_init_instance(val* self, val* p0) {
2158 global_compiler__GlobalCompiler__generate_check_init_instance(self, p0);
2159 RET_LABEL:;
2160 }
2161 /* method global_compiler#GlobalCompiler#generate_box_instance for (self: GlobalCompiler, MClassType) */
2162 void global_compiler__GlobalCompiler__generate_box_instance(val* self, val* p0) {
2163 val* var_mtype /* var mtype: MClassType */;
2164 val* var /* : RapidTypeAnalysis */;
2165 val* var1 /* : HashSet[MClassType] */;
2166 short int var2 /* : Bool */;
2167 val* var3 /* : String */;
2168 static val* varonce;
2169 val* var4 /* : String */;
2170 char* var5 /* : NativeString */;
2171 long var6 /* : Int */;
2172 val* var7 /* : String */;
2173 short int var8 /* : Bool */;
2174 val* var9 /* : AbstractCompilerVisitor */;
2175 val* var_v /* var v: GlobalCompilerVisitor */;
2176 val* var10 /* : CodeWriter */;
2177 static val* varonce11;
2178 val* var12 /* : String */;
2179 char* var13 /* : NativeString */;
2180 long var14 /* : Int */;
2181 val* var15 /* : String */;
2182 val* var16 /* : String */;
2183 static val* varonce17;
2184 val* var18 /* : String */;
2185 char* var19 /* : NativeString */;
2186 long var20 /* : Int */;
2187 val* var21 /* : String */;
2188 val* var22 /* : String */;
2189 static val* varonce23;
2190 val* var24 /* : String */;
2191 char* var25 /* : NativeString */;
2192 long var26 /* : Int */;
2193 val* var27 /* : String */;
2194 val* var28 /* : Array[Object] */;
2195 long var29 /* : Int */;
2196 val* var30 /* : NativeArray[Object] */;
2197 val* var31 /* : String */;
2198 static val* varonce32;
2199 val* var33 /* : String */;
2200 char* var34 /* : NativeString */;
2201 long var35 /* : Int */;
2202 val* var36 /* : String */;
2203 static val* varonce37;
2204 val* var38 /* : String */;
2205 char* var39 /* : NativeString */;
2206 long var40 /* : Int */;
2207 val* var41 /* : String */;
2208 val* var42 /* : Array[Object] */;
2209 long var43 /* : Int */;
2210 val* var44 /* : NativeArray[Object] */;
2211 val* var45 /* : String */;
2212 static val* varonce46;
2213 val* var47 /* : String */;
2214 char* var48 /* : NativeString */;
2215 long var49 /* : Int */;
2216 val* var50 /* : String */;
2217 val* var51 /* : String */;
2218 static val* varonce52;
2219 val* var53 /* : String */;
2220 char* var54 /* : NativeString */;
2221 long var55 /* : Int */;
2222 val* var56 /* : String */;
2223 val* var57 /* : String */;
2224 static val* varonce58;
2225 val* var59 /* : String */;
2226 char* var60 /* : NativeString */;
2227 long var61 /* : Int */;
2228 val* var62 /* : String */;
2229 val* var63 /* : Array[Object] */;
2230 long var64 /* : Int */;
2231 val* var65 /* : NativeArray[Object] */;
2232 val* var66 /* : String */;
2233 static val* varonce67;
2234 val* var68 /* : String */;
2235 char* var69 /* : NativeString */;
2236 long var70 /* : Int */;
2237 val* var71 /* : String */;
2238 val* var72 /* : String */;
2239 static val* varonce73;
2240 val* var74 /* : String */;
2241 char* var75 /* : NativeString */;
2242 long var76 /* : Int */;
2243 val* var77 /* : String */;
2244 val* var78 /* : String */;
2245 static val* varonce79;
2246 val* var80 /* : String */;
2247 char* var81 /* : NativeString */;
2248 long var82 /* : Int */;
2249 val* var83 /* : String */;
2250 val* var84 /* : Array[Object] */;
2251 long var85 /* : Int */;
2252 val* var86 /* : NativeArray[Object] */;
2253 val* var87 /* : String */;
2254 static val* varonce88;
2255 val* var89 /* : String */;
2256 char* var90 /* : NativeString */;
2257 long var91 /* : Int */;
2258 val* var92 /* : String */;
2259 val* var93 /* : String */;
2260 static val* varonce94;
2261 val* var95 /* : String */;
2262 char* var96 /* : NativeString */;
2263 long var97 /* : Int */;
2264 val* var98 /* : String */;
2265 val* var99 /* : Array[Object] */;
2266 long var100 /* : Int */;
2267 val* var101 /* : NativeArray[Object] */;
2268 val* var102 /* : String */;
2269 static val* varonce103;
2270 val* var104 /* : String */;
2271 char* var105 /* : NativeString */;
2272 long var106 /* : Int */;
2273 val* var107 /* : String */;
2274 static val* varonce108;
2275 val* var109 /* : String */;
2276 char* var110 /* : NativeString */;
2277 long var111 /* : Int */;
2278 val* var112 /* : String */;
2279 static val* varonce113;
2280 val* var114 /* : String */;
2281 char* var115 /* : NativeString */;
2282 long var116 /* : Int */;
2283 val* var117 /* : String */;
2284 var_mtype = p0;
2285 var = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
2286 var1 = ((val* (*)(val*))(var->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var) /* live_types on <var:RapidTypeAnalysis>*/;
2287 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__Collection__has]))(var1, var_mtype) /* has on <var1:HashSet[MClassType]>*/;
2288 if (!var2) {
2289 fprintf(stderr, "Runtime error: %s", "Assert failed");
2290 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 241);
2291 exit(1);
2292 }
2293 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2294 if (varonce) {
2295 var4 = varonce;
2296 } else {
2297 var5 = "val*";
2298 var6 = 4;
2299 var7 = string__NativeString__to_s_with_length(var5, var6);
2300 var4 = var7;
2301 varonce = var4;
2302 }
2303 var8 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_kernel__Object___33d_61d]))(var3, var4) /* != on <var3:String>*/;
2304 if (!var8) {
2305 fprintf(stderr, "Runtime error: %s", "Assert failed");
2306 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 242);
2307 exit(1);
2308 }
2309 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
2310 var_v = var9;
2311 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
2312 if (varonce11) {
2313 var12 = varonce11;
2314 } else {
2315 var13 = "val* BOX_";
2316 var14 = 9;
2317 var15 = string__NativeString__to_s_with_length(var13, var14);
2318 var12 = var15;
2319 varonce11 = var12;
2320 }
2321 var16 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2322 if (varonce17) {
2323 var18 = varonce17;
2324 } else {
2325 var19 = "(";
2326 var20 = 1;
2327 var21 = string__NativeString__to_s_with_length(var19, var20);
2328 var18 = var21;
2329 varonce17 = var18;
2330 }
2331 var22 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2332 if (varonce23) {
2333 var24 = varonce23;
2334 } else {
2335 var25 = ");";
2336 var26 = 2;
2337 var27 = string__NativeString__to_s_with_length(var25, var26);
2338 var24 = var27;
2339 varonce23 = var24;
2340 }
2341 var28 = NEW_array__Array(&type_array__Arraykernel__Object);
2342 { /* var28 = array_instance Array[Object] */
2343 var29 = 5;
2344 var30 = NEW_array__NativeArray(var29, &type_array__NativeArraykernel__Object);
2345 ((struct instance_array__NativeArray*)var30)->values[0] = (val*) var12;
2346 ((struct instance_array__NativeArray*)var30)->values[1] = (val*) var16;
2347 ((struct instance_array__NativeArray*)var30)->values[2] = (val*) var18;
2348 ((struct instance_array__NativeArray*)var30)->values[3] = (val*) var22;
2349 ((struct instance_array__NativeArray*)var30)->values[4] = (val*) var24;
2350 ((void (*)(val*, val*, long))(var28->class->vft[COLOR_array__Array__with_native]))(var28, var30, var29) /* with_native on <var28:Array[Object]>*/;
2351 CHECK_NEW_array__Array(var28);
2352 }
2353 var31 = ((val* (*)(val*))(var28->class->vft[COLOR_string__Object__to_s]))(var28) /* to_s on <var28:Array[Object]>*/;
2354 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var10, var31) /* add_decl on <var10:CodeWriter>*/;
2355 if (varonce32) {
2356 var33 = varonce32;
2357 } else {
2358 var34 = "/* allocate ";
2359 var35 = 12;
2360 var36 = string__NativeString__to_s_with_length(var34, var35);
2361 var33 = var36;
2362 varonce32 = var33;
2363 }
2364 if (varonce37) {
2365 var38 = varonce37;
2366 } else {
2367 var39 = " */";
2368 var40 = 3;
2369 var41 = string__NativeString__to_s_with_length(var39, var40);
2370 var38 = var41;
2371 varonce37 = var38;
2372 }
2373 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
2374 { /* var42 = array_instance Array[Object] */
2375 var43 = 3;
2376 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
2377 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var33;
2378 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_mtype;
2379 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var38;
2380 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
2381 CHECK_NEW_array__Array(var42);
2382 }
2383 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
2384 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var45) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2385 if (varonce46) {
2386 var47 = varonce46;
2387 } else {
2388 var48 = "val* BOX_";
2389 var49 = 9;
2390 var50 = string__NativeString__to_s_with_length(var48, var49);
2391 var47 = var50;
2392 varonce46 = var47;
2393 }
2394 var51 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2395 if (varonce52) {
2396 var53 = varonce52;
2397 } else {
2398 var54 = "(";
2399 var55 = 1;
2400 var56 = string__NativeString__to_s_with_length(var54, var55);
2401 var53 = var56;
2402 varonce52 = var53;
2403 }
2404 var57 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2405 if (varonce58) {
2406 var59 = varonce58;
2407 } else {
2408 var60 = " value) {";
2409 var61 = 9;
2410 var62 = string__NativeString__to_s_with_length(var60, var61);
2411 var59 = var62;
2412 varonce58 = var59;
2413 }
2414 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
2415 { /* var63 = array_instance Array[Object] */
2416 var64 = 5;
2417 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
2418 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var47;
2419 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var51;
2420 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var53;
2421 ((struct instance_array__NativeArray*)var65)->values[3] = (val*) var57;
2422 ((struct instance_array__NativeArray*)var65)->values[4] = (val*) var59;
2423 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
2424 CHECK_NEW_array__Array(var63);
2425 }
2426 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
2427 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var66) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2428 if (varonce67) {
2429 var68 = varonce67;
2430 } else {
2431 var69 = "struct ";
2432 var70 = 7;
2433 var71 = string__NativeString__to_s_with_length(var69, var70);
2434 var68 = var71;
2435 varonce67 = var68;
2436 }
2437 var72 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2438 if (varonce73) {
2439 var74 = varonce73;
2440 } else {
2441 var75 = "*res = nit_alloc(sizeof(struct ";
2442 var76 = 31;
2443 var77 = string__NativeString__to_s_with_length(var75, var76);
2444 var74 = var77;
2445 varonce73 = var74;
2446 }
2447 var78 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2448 if (varonce79) {
2449 var80 = varonce79;
2450 } else {
2451 var81 = "));";
2452 var82 = 3;
2453 var83 = string__NativeString__to_s_with_length(var81, var82);
2454 var80 = var83;
2455 varonce79 = var80;
2456 }
2457 var84 = NEW_array__Array(&type_array__Arraykernel__Object);
2458 { /* var84 = array_instance Array[Object] */
2459 var85 = 5;
2460 var86 = NEW_array__NativeArray(var85, &type_array__NativeArraykernel__Object);
2461 ((struct instance_array__NativeArray*)var86)->values[0] = (val*) var68;
2462 ((struct instance_array__NativeArray*)var86)->values[1] = (val*) var72;
2463 ((struct instance_array__NativeArray*)var86)->values[2] = (val*) var74;
2464 ((struct instance_array__NativeArray*)var86)->values[3] = (val*) var78;
2465 ((struct instance_array__NativeArray*)var86)->values[4] = (val*) var80;
2466 ((void (*)(val*, val*, long))(var84->class->vft[COLOR_array__Array__with_native]))(var84, var86, var85) /* with_native on <var84:Array[Object]>*/;
2467 CHECK_NEW_array__Array(var84);
2468 }
2469 var87 = ((val* (*)(val*))(var84->class->vft[COLOR_string__Object__to_s]))(var84) /* to_s on <var84:Array[Object]>*/;
2470 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var87) /* add on <var_v:GlobalCompilerVisitor>*/;
2471 if (varonce88) {
2472 var89 = varonce88;
2473 } else {
2474 var90 = "res->classid = ";
2475 var91 = 15;
2476 var92 = string__NativeString__to_s_with_length(var90, var91);
2477 var89 = var92;
2478 varonce88 = var89;
2479 }
2480 var93 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(self, var_mtype) /* classid on <self:GlobalCompiler>*/;
2481 if (varonce94) {
2482 var95 = varonce94;
2483 } else {
2484 var96 = ";";
2485 var97 = 1;
2486 var98 = string__NativeString__to_s_with_length(var96, var97);
2487 var95 = var98;
2488 varonce94 = var95;
2489 }
2490 var99 = NEW_array__Array(&type_array__Arraykernel__Object);
2491 { /* var99 = array_instance Array[Object] */
2492 var100 = 3;
2493 var101 = NEW_array__NativeArray(var100, &type_array__NativeArraykernel__Object);
2494 ((struct instance_array__NativeArray*)var101)->values[0] = (val*) var89;
2495 ((struct instance_array__NativeArray*)var101)->values[1] = (val*) var93;
2496 ((struct instance_array__NativeArray*)var101)->values[2] = (val*) var95;
2497 ((void (*)(val*, val*, long))(var99->class->vft[COLOR_array__Array__with_native]))(var99, var101, var100) /* with_native on <var99:Array[Object]>*/;
2498 CHECK_NEW_array__Array(var99);
2499 }
2500 var102 = ((val* (*)(val*))(var99->class->vft[COLOR_string__Object__to_s]))(var99) /* to_s on <var99:Array[Object]>*/;
2501 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var102) /* add on <var_v:GlobalCompilerVisitor>*/;
2502 if (varonce103) {
2503 var104 = varonce103;
2504 } else {
2505 var105 = "res->value = value;";
2506 var106 = 19;
2507 var107 = string__NativeString__to_s_with_length(var105, var106);
2508 var104 = var107;
2509 varonce103 = var104;
2510 }
2511 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var104) /* add on <var_v:GlobalCompilerVisitor>*/;
2512 if (varonce108) {
2513 var109 = varonce108;
2514 } else {
2515 var110 = "return (val*)res;";
2516 var111 = 17;
2517 var112 = string__NativeString__to_s_with_length(var110, var111);
2518 var109 = var112;
2519 varonce108 = var109;
2520 }
2521 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var109) /* add on <var_v:GlobalCompilerVisitor>*/;
2522 if (varonce113) {
2523 var114 = varonce113;
2524 } else {
2525 var115 = "}";
2526 var116 = 1;
2527 var117 = string__NativeString__to_s_with_length(var115, var116);
2528 var114 = var117;
2529 varonce113 = var114;
2530 }
2531 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var114) /* add on <var_v:GlobalCompilerVisitor>*/;
2532 RET_LABEL:;
2533 }
2534 /* method global_compiler#GlobalCompiler#generate_box_instance for (self: Object, MClassType) */
2535 void VIRTUAL_global_compiler__GlobalCompiler__generate_box_instance(val* self, val* p0) {
2536 global_compiler__GlobalCompiler__generate_box_instance(self, p0);
2537 RET_LABEL:;
2538 }
2539 /* method global_compiler#GlobalCompiler#new_visitor for (self: GlobalCompiler): GlobalCompilerVisitor */
2540 val* global_compiler__GlobalCompiler__new_visitor(val* self) {
2541 val* var /* : GlobalCompilerVisitor */;
2542 val* var1 /* : GlobalCompilerVisitor */;
2543 short int var2 /* : Bool */;
2544 int cltype;
2545 int idtype;
2546 const struct type* type_struct;
2547 const char* var_class_name;
2548 var1 = NEW_global_compiler__GlobalCompilerVisitor(&type_global_compiler__GlobalCompilerVisitor);
2549 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init]))(var1, self) /* init on <var1:GlobalCompilerVisitor>*/;
2550 CHECK_NEW_global_compiler__GlobalCompilerVisitor(var1);
2551 /* <var1:GlobalCompilerVisitor> isa VISITOR */
2552 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
2553 cltype = type_struct->color;
2554 idtype = type_struct->id;
2555 if(cltype >= var1->type->table_size) {
2556 var2 = 0;
2557 } else {
2558 var2 = var1->type->type_table[cltype] == idtype;
2559 }
2560 if (!var2) {
2561 var_class_name = var1 == NULL ? "null" : var1->type->name;
2562 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
2563 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 256);
2564 exit(1);
2565 }
2566 var = var1;
2567 goto RET_LABEL;
2568 RET_LABEL:;
2569 return var;
2570 }
2571 /* method global_compiler#GlobalCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
2572 val* VIRTUAL_global_compiler__GlobalCompiler__new_visitor(val* self) {
2573 val* var /* : AbstractCompilerVisitor */;
2574 val* var1 /* : GlobalCompilerVisitor */;
2575 var1 = global_compiler__GlobalCompiler__new_visitor(self);
2576 var = var1;
2577 RET_LABEL:;
2578 return var;
2579 }
2580 /* method global_compiler#GlobalCompiler#collect_types_cache for (self: GlobalCompiler): HashMap[MType, Array[MClassType]] */
2581 val* global_compiler__GlobalCompiler__collect_types_cache(val* self) {
2582 val* var /* : HashMap[MType, Array[MClassType]] */;
2583 val* var1 /* : HashMap[MType, Array[MClassType]] */;
2584 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dcollect_types_cache].val; /* @collect_types_cache on <self:GlobalCompiler> */
2585 if (var1 == NULL) {
2586 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @collect_types_cache");
2587 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 258);
2588 exit(1);
2589 }
2590 var = var1;
2591 RET_LABEL:;
2592 return var;
2593 }
2594 /* method global_compiler#GlobalCompiler#collect_types_cache for (self: Object): HashMap[MType, Array[MClassType]] */
2595 val* VIRTUAL_global_compiler__GlobalCompiler__collect_types_cache(val* self) {
2596 val* var /* : HashMap[MType, Array[MClassType]] */;
2597 val* var1 /* : HashMap[MType, Array[MClassType]] */;
2598 var1 = global_compiler__GlobalCompiler__collect_types_cache(self);
2599 var = var1;
2600 RET_LABEL:;
2601 return var;
2602 }
2603 /* method global_compiler#GlobalCompiler#collect_types_cache= for (self: GlobalCompiler, HashMap[MType, Array[MClassType]]) */
2604 void global_compiler__GlobalCompiler__collect_types_cache_61d(val* self, val* p0) {
2605 self->attrs[COLOR_global_compiler__GlobalCompiler___64dcollect_types_cache].val = p0; /* @collect_types_cache on <self:GlobalCompiler> */
2606 RET_LABEL:;
2607 }
2608 /* method global_compiler#GlobalCompiler#collect_types_cache= for (self: Object, HashMap[MType, Array[MClassType]]) */
2609 void VIRTUAL_global_compiler__GlobalCompiler__collect_types_cache_61d(val* self, val* p0) {
2610 global_compiler__GlobalCompiler__collect_types_cache_61d(self, p0);
2611 RET_LABEL:;
2612 }
2613 /* method global_compiler#GlobalCompilerVisitor#autobox for (self: GlobalCompilerVisitor, RuntimeVariable, MType): RuntimeVariable */
2614 val* global_compiler__GlobalCompilerVisitor__autobox(val* self, val* p0, val* p1) {
2615 val* var /* : RuntimeVariable */;
2616 val* var_value /* var value: RuntimeVariable */;
2617 val* var_mtype /* var mtype: MType */;
2618 val* var1 /* : MType */;
2619 short int var2 /* : Bool */;
2620 short int var3 /* : Bool */;
2621 val* var4 /* : MType */;
2622 val* var5 /* : String */;
2623 static val* varonce;
2624 val* var6 /* : String */;
2625 char* var7 /* : NativeString */;
2626 long var8 /* : Int */;
2627 val* var9 /* : String */;
2628 short int var10 /* : Bool */;
2629 short int var_ /* var : Bool */;
2630 val* var11 /* : String */;
2631 static val* varonce12;
2632 val* var13 /* : String */;
2633 char* var14 /* : NativeString */;
2634 long var15 /* : Int */;
2635 val* var16 /* : String */;
2636 short int var17 /* : Bool */;
2637 val* var18 /* : MType */;
2638 val* var19 /* : String */;
2639 static val* varonce20;
2640 val* var21 /* : String */;
2641 char* var22 /* : NativeString */;
2642 long var23 /* : Int */;
2643 val* var24 /* : String */;
2644 short int var25 /* : Bool */;
2645 static val* varonce26;
2646 val* var27 /* : String */;
2647 char* var28 /* : NativeString */;
2648 long var29 /* : Int */;
2649 val* var30 /* : String */;
2650 val* var31 /* : String */;
2651 static val* varonce32;
2652 val* var33 /* : String */;
2653 char* var34 /* : NativeString */;
2654 long var35 /* : Int */;
2655 val* var36 /* : String */;
2656 static val* varonce37;
2657 val* var38 /* : String */;
2658 char* var39 /* : NativeString */;
2659 long var40 /* : Int */;
2660 val* var41 /* : String */;
2661 val* var42 /* : MType */;
2662 static val* varonce43;
2663 val* var44 /* : String */;
2664 char* var45 /* : NativeString */;
2665 long var46 /* : Int */;
2666 val* var47 /* : String */;
2667 static val* varonce48;
2668 val* var49 /* : String */;
2669 char* var50 /* : NativeString */;
2670 long var51 /* : Int */;
2671 val* var52 /* : String */;
2672 val* var53 /* : Array[Object] */;
2673 long var54 /* : Int */;
2674 val* var55 /* : NativeArray[Object] */;
2675 val* var56 /* : String */;
2676 val* var57 /* : RuntimeVariable */;
2677 val* var58 /* : String */;
2678 static val* varonce59;
2679 val* var60 /* : String */;
2680 char* var61 /* : NativeString */;
2681 long var62 /* : Int */;
2682 val* var63 /* : String */;
2683 short int var64 /* : Bool */;
2684 val* var65 /* : MType */;
2685 short int var66 /* : Bool */;
2686 int cltype;
2687 int idtype;
2688 const char* var_class_name;
2689 val* var_valtype /* var valtype: MClassType */;
2690 val* var67 /* : RuntimeVariable */;
2691 val* var_res /* var res: RuntimeVariable */;
2692 val* var68 /* : AbstractCompiler */;
2693 val* var69 /* : RapidTypeAnalysis */;
2694 val* var70 /* : HashSet[MClassType] */;
2695 short int var71 /* : Bool */;
2696 short int var72 /* : Bool */;
2697 static val* varonce73;
2698 val* var74 /* : String */;
2699 char* var75 /* : NativeString */;
2700 long var76 /* : Int */;
2701 val* var77 /* : String */;
2702 val* var78 /* : MType */;
2703 static val* varonce79;
2704 val* var80 /* : String */;
2705 char* var81 /* : NativeString */;
2706 long var82 /* : Int */;
2707 val* var83 /* : String */;
2708 static val* varonce84;
2709 val* var85 /* : String */;
2710 char* var86 /* : NativeString */;
2711 long var87 /* : Int */;
2712 val* var88 /* : String */;
2713 val* var89 /* : MType */;
2714 static val* varonce90;
2715 val* var91 /* : String */;
2716 char* var92 /* : NativeString */;
2717 long var93 /* : Int */;
2718 val* var94 /* : String */;
2719 val* var95 /* : Array[Object] */;
2720 long var96 /* : Int */;
2721 val* var97 /* : NativeArray[Object] */;
2722 val* var98 /* : String */;
2723 static val* varonce99;
2724 val* var100 /* : String */;
2725 char* var101 /* : NativeString */;
2726 long var102 /* : Int */;
2727 val* var103 /* : String */;
2728 static val* varonce104;
2729 val* var105 /* : String */;
2730 char* var106 /* : NativeString */;
2731 long var107 /* : Int */;
2732 val* var108 /* : String */;
2733 val* var109 /* : String */;
2734 static val* varonce110;
2735 val* var111 /* : String */;
2736 char* var112 /* : NativeString */;
2737 long var113 /* : Int */;
2738 val* var114 /* : String */;
2739 static val* varonce115;
2740 val* var116 /* : String */;
2741 char* var117 /* : NativeString */;
2742 long var118 /* : Int */;
2743 val* var119 /* : String */;
2744 val* var120 /* : MType */;
2745 static val* varonce121;
2746 val* var122 /* : String */;
2747 char* var123 /* : NativeString */;
2748 long var124 /* : Int */;
2749 val* var125 /* : String */;
2750 static val* varonce126;
2751 val* var127 /* : String */;
2752 char* var128 /* : NativeString */;
2753 long var129 /* : Int */;
2754 val* var130 /* : String */;
2755 val* var131 /* : Array[Object] */;
2756 long var132 /* : Int */;
2757 val* var133 /* : NativeArray[Object] */;
2758 val* var134 /* : String */;
2759 val* var135 /* : RuntimeVariable */;
2760 val* var_res136 /* var res: RuntimeVariable */;
2761 static val* varonce137;
2762 val* var138 /* : String */;
2763 char* var139 /* : NativeString */;
2764 long var140 /* : Int */;
2765 val* var141 /* : String */;
2766 static val* varonce142;
2767 val* var143 /* : String */;
2768 char* var144 /* : NativeString */;
2769 long var145 /* : Int */;
2770 val* var146 /* : String */;
2771 val* var147 /* : MType */;
2772 static val* varonce148;
2773 val* var149 /* : String */;
2774 char* var150 /* : NativeString */;
2775 long var151 /* : Int */;
2776 val* var152 /* : String */;
2777 static val* varonce153;
2778 val* var154 /* : String */;
2779 char* var155 /* : NativeString */;
2780 long var156 /* : Int */;
2781 val* var157 /* : String */;
2782 val* var158 /* : Array[Object] */;
2783 long var159 /* : Int */;
2784 val* var160 /* : NativeArray[Object] */;
2785 val* var161 /* : String */;
2786 static val* varonce162;
2787 val* var163 /* : String */;
2788 char* var164 /* : NativeString */;
2789 long var165 /* : Int */;
2790 val* var166 /* : String */;
2791 val* var167 /* : MType */;
2792 static val* varonce168;
2793 val* var169 /* : String */;
2794 char* var170 /* : NativeString */;
2795 long var171 /* : Int */;
2796 val* var172 /* : String */;
2797 static val* varonce173;
2798 val* var174 /* : String */;
2799 char* var175 /* : NativeString */;
2800 long var176 /* : Int */;
2801 val* var177 /* : String */;
2802 val* var178 /* : Array[Object] */;
2803 long var179 /* : Int */;
2804 val* var180 /* : NativeArray[Object] */;
2805 val* var181 /* : String */;
2806 var_value = p0;
2807 var_mtype = p1;
2808 var1 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2809 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___61d_61d]))(var1, var_mtype) /* == on <var1:MType>*/;
2810 if (var2){
2811 var = var_value;
2812 goto RET_LABEL;
2813 } else {
2814 var4 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2815 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_compiler__MType__ctype]))(var4) /* ctype on <var4:MType>*/;
2816 if (varonce) {
2817 var6 = varonce;
2818 } else {
2819 var7 = "val*";
2820 var8 = 4;
2821 var9 = string__NativeString__to_s_with_length(var7, var8);
2822 var6 = var9;
2823 varonce = var6;
2824 }
2825 var10 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_kernel__Object___61d_61d]))(var5, var6) /* == on <var5:String>*/;
2826 var_ = var10;
2827 if (var10){
2828 var11 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MType>*/;
2829 if (varonce12) {
2830 var13 = varonce12;
2831 } else {
2832 var14 = "val*";
2833 var15 = 4;
2834 var16 = string__NativeString__to_s_with_length(var14, var15);
2835 var13 = var16;
2836 varonce12 = var13;
2837 }
2838 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
2839 var3 = var17;
2840 } else {
2841 var3 = var_;
2842 }
2843 if (var3){
2844 var = var_value;
2845 goto RET_LABEL;
2846 } else {
2847 var18 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2848 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_abstract_compiler__MType__ctype]))(var18) /* ctype on <var18:MType>*/;
2849 if (varonce20) {
2850 var21 = varonce20;
2851 } else {
2852 var22 = "val*";
2853 var23 = 4;
2854 var24 = string__NativeString__to_s_with_length(var22, var23);
2855 var21 = var24;
2856 varonce20 = var21;
2857 }
2858 var25 = ((short int (*)(val*, val*))(var19->class->vft[COLOR_kernel__Object___61d_61d]))(var19, var21) /* == on <var19:String>*/;
2859 if (var25){
2860 if (varonce26) {
2861 var27 = varonce26;
2862 } else {
2863 var28 = "((struct ";
2864 var29 = 9;
2865 var30 = string__NativeString__to_s_with_length(var28, var29);
2866 var27 = var30;
2867 varonce26 = var27;
2868 }
2869 var31 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
2870 if (varonce32) {
2871 var33 = varonce32;
2872 } else {
2873 var34 = "*)";
2874 var35 = 2;
2875 var36 = string__NativeString__to_s_with_length(var34, var35);
2876 var33 = var36;
2877 varonce32 = var33;
2878 }
2879 if (varonce37) {
2880 var38 = varonce37;
2881 } else {
2882 var39 = ")->value; /* autounbox from ";
2883 var40 = 28;
2884 var41 = string__NativeString__to_s_with_length(var39, var40);
2885 var38 = var41;
2886 varonce37 = var38;
2887 }
2888 var42 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2889 if (varonce43) {
2890 var44 = varonce43;
2891 } else {
2892 var45 = " to ";
2893 var46 = 4;
2894 var47 = string__NativeString__to_s_with_length(var45, var46);
2895 var44 = var47;
2896 varonce43 = var44;
2897 }
2898 if (varonce48) {
2899 var49 = varonce48;
2900 } else {
2901 var50 = " */";
2902 var51 = 3;
2903 var52 = string__NativeString__to_s_with_length(var50, var51);
2904 var49 = var52;
2905 varonce48 = var49;
2906 }
2907 var53 = NEW_array__Array(&type_array__Arraykernel__Object);
2908 { /* var53 = array_instance Array[Object] */
2909 var54 = 9;
2910 var55 = NEW_array__NativeArray(var54, &type_array__NativeArraykernel__Object);
2911 ((struct instance_array__NativeArray*)var55)->values[0] = (val*) var27;
2912 ((struct instance_array__NativeArray*)var55)->values[1] = (val*) var31;
2913 ((struct instance_array__NativeArray*)var55)->values[2] = (val*) var33;
2914 ((struct instance_array__NativeArray*)var55)->values[3] = (val*) var_value;
2915 ((struct instance_array__NativeArray*)var55)->values[4] = (val*) var38;
2916 ((struct instance_array__NativeArray*)var55)->values[5] = (val*) var42;
2917 ((struct instance_array__NativeArray*)var55)->values[6] = (val*) var44;
2918 ((struct instance_array__NativeArray*)var55)->values[7] = (val*) var_mtype;
2919 ((struct instance_array__NativeArray*)var55)->values[8] = (val*) var49;
2920 ((void (*)(val*, val*, long))(var53->class->vft[COLOR_array__Array__with_native]))(var53, var55, var54) /* with_native on <var53:Array[Object]>*/;
2921 CHECK_NEW_array__Array(var53);
2922 }
2923 var56 = ((val* (*)(val*))(var53->class->vft[COLOR_string__Object__to_s]))(var53) /* to_s on <var53:Array[Object]>*/;
2924 var57 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var56, var_mtype) /* new_expr on <self:GlobalCompilerVisitor>*/;
2925 var = var57;
2926 goto RET_LABEL;
2927 } else {
2928 var58 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MType>*/;
2929 if (varonce59) {
2930 var60 = varonce59;
2931 } else {
2932 var61 = "val*";
2933 var62 = 4;
2934 var63 = string__NativeString__to_s_with_length(var61, var62);
2935 var60 = var63;
2936 varonce59 = var60;
2937 }
2938 var64 = ((short int (*)(val*, val*))(var58->class->vft[COLOR_kernel__Object___61d_61d]))(var58, var60) /* == on <var58:String>*/;
2939 if (var64){
2940 var65 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2941 /* <var65:MType> isa MClassType */
2942 cltype = type_model__MClassType.color;
2943 idtype = type_model__MClassType.id;
2944 if(cltype >= var65->type->table_size) {
2945 var66 = 0;
2946 } else {
2947 var66 = var65->type->type_table[cltype] == idtype;
2948 }
2949 if (!var66) {
2950 var_class_name = var65 == NULL ? "null" : var65->type->name;
2951 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
2952 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 277);
2953 exit(1);
2954 }
2955 var_valtype = var65;
2956 var67 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_mtype) /* new_var on <self:GlobalCompilerVisitor>*/;
2957 var_res = var67;
2958 var68 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
2959 var69 = ((val* (*)(val*))(var68->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var68) /* runtime_type_analysis on <var68:AbstractCompiler(GlobalCompiler)>*/;
2960 var70 = ((val* (*)(val*))(var69->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var69) /* live_types on <var69:RapidTypeAnalysis>*/;
2961 var71 = ((short int (*)(val*, val*))(var70->class->vft[COLOR_abstract_collection__Collection__has]))(var70, var_valtype) /* has on <var70:HashSet[MClassType]>*/;
2962 var72 = !var71;
2963 if (var72){
2964 if (varonce73) {
2965 var74 = varonce73;
2966 } else {
2967 var75 = "/*no autobox from ";
2968 var76 = 18;
2969 var77 = string__NativeString__to_s_with_length(var75, var76);
2970 var74 = var77;
2971 varonce73 = var74;
2972 }
2973 var78 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2974 if (varonce79) {
2975 var80 = varonce79;
2976 } else {
2977 var81 = " to ";
2978 var82 = 4;
2979 var83 = string__NativeString__to_s_with_length(var81, var82);
2980 var80 = var83;
2981 varonce79 = var80;
2982 }
2983 if (varonce84) {
2984 var85 = varonce84;
2985 } else {
2986 var86 = ": ";
2987 var87 = 2;
2988 var88 = string__NativeString__to_s_with_length(var86, var87);
2989 var85 = var88;
2990 varonce84 = var85;
2991 }
2992 var89 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2993 if (varonce90) {
2994 var91 = varonce90;
2995 } else {
2996 var92 = " is not live! */";
2997 var93 = 16;
2998 var94 = string__NativeString__to_s_with_length(var92, var93);
2999 var91 = var94;
3000 varonce90 = var91;
3001 }
3002 var95 = NEW_array__Array(&type_array__Arraykernel__Object);
3003 { /* var95 = array_instance Array[Object] */
3004 var96 = 7;
3005 var97 = NEW_array__NativeArray(var96, &type_array__NativeArraykernel__Object);
3006 ((struct instance_array__NativeArray*)var97)->values[0] = (val*) var74;
3007 ((struct instance_array__NativeArray*)var97)->values[1] = (val*) var78;
3008 ((struct instance_array__NativeArray*)var97)->values[2] = (val*) var80;
3009 ((struct instance_array__NativeArray*)var97)->values[3] = (val*) var_mtype;
3010 ((struct instance_array__NativeArray*)var97)->values[4] = (val*) var85;
3011 ((struct instance_array__NativeArray*)var97)->values[5] = (val*) var89;
3012 ((struct instance_array__NativeArray*)var97)->values[6] = (val*) var91;
3013 ((void (*)(val*, val*, long))(var95->class->vft[COLOR_array__Array__with_native]))(var95, var97, var96) /* with_native on <var95:Array[Object]>*/;
3014 CHECK_NEW_array__Array(var95);
3015 }
3016 var98 = ((val* (*)(val*))(var95->class->vft[COLOR_string__Object__to_s]))(var95) /* to_s on <var95:Array[Object]>*/;
3017 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var98) /* add on <self:GlobalCompilerVisitor>*/;
3018 if (varonce99) {
3019 var100 = varonce99;
3020 } else {
3021 var101 = "printf(\"Dead code executed!\\n\"); exit(1);";
3022 var102 = 41;
3023 var103 = string__NativeString__to_s_with_length(var101, var102);
3024 var100 = var103;
3025 varonce99 = var100;
3026 }
3027 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var100) /* add on <self:GlobalCompilerVisitor>*/;
3028 var = var_res;
3029 goto RET_LABEL;
3030 } else {
3031 }
3032 if (varonce104) {
3033 var105 = varonce104;
3034 } else {
3035 var106 = " = BOX_";
3036 var107 = 7;
3037 var108 = string__NativeString__to_s_with_length(var106, var107);
3038 var105 = var108;
3039 varonce104 = var105;
3040 }
3041 var109 = ((val* (*)(val*))(var_valtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_valtype) /* c_name on <var_valtype:MClassType>*/;
3042 if (varonce110) {
3043 var111 = varonce110;
3044 } else {
3045 var112 = "(";
3046 var113 = 1;
3047 var114 = string__NativeString__to_s_with_length(var112, var113);
3048 var111 = var114;
3049 varonce110 = var111;
3050 }
3051 if (varonce115) {
3052 var116 = varonce115;
3053 } else {
3054 var117 = "); /* autobox from ";
3055 var118 = 19;
3056 var119 = string__NativeString__to_s_with_length(var117, var118);
3057 var116 = var119;
3058 varonce115 = var116;
3059 }
3060 var120 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
3061 if (varonce121) {
3062 var122 = varonce121;
3063 } else {
3064 var123 = " to ";
3065 var124 = 4;
3066 var125 = string__NativeString__to_s_with_length(var123, var124);
3067 var122 = var125;
3068 varonce121 = var122;
3069 }
3070 if (varonce126) {
3071 var127 = varonce126;
3072 } else {
3073 var128 = " */";
3074 var129 = 3;
3075 var130 = string__NativeString__to_s_with_length(var128, var129);
3076 var127 = var130;
3077 varonce126 = var127;
3078 }
3079 var131 = NEW_array__Array(&type_array__Arraykernel__Object);
3080 { /* var131 = array_instance Array[Object] */
3081 var132 = 10;
3082 var133 = NEW_array__NativeArray(var132, &type_array__NativeArraykernel__Object);
3083 ((struct instance_array__NativeArray*)var133)->values[0] = (val*) var_res;
3084 ((struct instance_array__NativeArray*)var133)->values[1] = (val*) var105;
3085 ((struct instance_array__NativeArray*)var133)->values[2] = (val*) var109;
3086 ((struct instance_array__NativeArray*)var133)->values[3] = (val*) var111;
3087 ((struct instance_array__NativeArray*)var133)->values[4] = (val*) var_value;
3088 ((struct instance_array__NativeArray*)var133)->values[5] = (val*) var116;
3089 ((struct instance_array__NativeArray*)var133)->values[6] = (val*) var120;
3090 ((struct instance_array__NativeArray*)var133)->values[7] = (val*) var122;
3091 ((struct instance_array__NativeArray*)var133)->values[8] = (val*) var_mtype;
3092 ((struct instance_array__NativeArray*)var133)->values[9] = (val*) var127;
3093 ((void (*)(val*, val*, long))(var131->class->vft[COLOR_array__Array__with_native]))(var131, var133, var132) /* with_native on <var131:Array[Object]>*/;
3094 CHECK_NEW_array__Array(var131);
3095 }
3096 var134 = ((val* (*)(val*))(var131->class->vft[COLOR_string__Object__to_s]))(var131) /* to_s on <var131:Array[Object]>*/;
3097 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
3098 var = var_res;
3099 goto RET_LABEL;
3100 } else {
3101 var135 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_mtype) /* new_var on <self:GlobalCompilerVisitor>*/;
3102 var_res136 = var135;
3103 if (varonce137) {
3104 var138 = varonce137;
3105 } else {
3106 var139 = "/* ";
3107 var140 = 3;
3108 var141 = string__NativeString__to_s_with_length(var139, var140);
3109 var138 = var141;
3110 varonce137 = var138;
3111 }
3112 if (varonce142) {
3113 var143 = varonce142;
3114 } else {
3115 var144 = " left unintialized (cannot convert ";
3116 var145 = 35;
3117 var146 = string__NativeString__to_s_with_length(var144, var145);
3118 var143 = var146;
3119 varonce142 = var143;
3120 }
3121 var147 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
3122 if (varonce148) {
3123 var149 = varonce148;
3124 } else {
3125 var150 = " to ";
3126 var151 = 4;
3127 var152 = string__NativeString__to_s_with_length(var150, var151);
3128 var149 = var152;
3129 varonce148 = var149;
3130 }
3131 if (varonce153) {
3132 var154 = varonce153;
3133 } else {
3134 var155 = ") */";
3135 var156 = 4;
3136 var157 = string__NativeString__to_s_with_length(var155, var156);
3137 var154 = var157;
3138 varonce153 = var154;
3139 }
3140 var158 = NEW_array__Array(&type_array__Arraykernel__Object);
3141 { /* var158 = array_instance Array[Object] */
3142 var159 = 7;
3143 var160 = NEW_array__NativeArray(var159, &type_array__NativeArraykernel__Object);
3144 ((struct instance_array__NativeArray*)var160)->values[0] = (val*) var138;
3145 ((struct instance_array__NativeArray*)var160)->values[1] = (val*) var_res136;
3146 ((struct instance_array__NativeArray*)var160)->values[2] = (val*) var143;
3147 ((struct instance_array__NativeArray*)var160)->values[3] = (val*) var147;
3148 ((struct instance_array__NativeArray*)var160)->values[4] = (val*) var149;
3149 ((struct instance_array__NativeArray*)var160)->values[5] = (val*) var_mtype;
3150 ((struct instance_array__NativeArray*)var160)->values[6] = (val*) var154;
3151 ((void (*)(val*, val*, long))(var158->class->vft[COLOR_array__Array__with_native]))(var158, var160, var159) /* with_native on <var158:Array[Object]>*/;
3152 CHECK_NEW_array__Array(var158);
3153 }
3154 var161 = ((val* (*)(val*))(var158->class->vft[COLOR_string__Object__to_s]))(var158) /* to_s on <var158:Array[Object]>*/;
3155 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var161) /* add on <self:GlobalCompilerVisitor>*/;
3156 if (varonce162) {
3157 var163 = varonce162;
3158 } else {
3159 var164 = "printf(\"Cast error: Cannot cast %s to %s.\\n\", \"";
3160 var165 = 47;
3161 var166 = string__NativeString__to_s_with_length(var164, var165);
3162 var163 = var166;
3163 varonce162 = var163;
3164 }
3165 var167 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
3166 if (varonce168) {
3167 var169 = varonce168;
3168 } else {
3169 var170 = "\", \"";
3170 var171 = 4;
3171 var172 = string__NativeString__to_s_with_length(var170, var171);
3172 var169 = var172;
3173 varonce168 = var169;
3174 }
3175 if (varonce173) {
3176 var174 = varonce173;
3177 } else {
3178 var175 = "\"); exit(1);";
3179 var176 = 12;
3180 var177 = string__NativeString__to_s_with_length(var175, var176);
3181 var174 = var177;
3182 varonce173 = var174;
3183 }
3184 var178 = NEW_array__Array(&type_array__Arraykernel__Object);
3185 { /* var178 = array_instance Array[Object] */
3186 var179 = 5;
3187 var180 = NEW_array__NativeArray(var179, &type_array__NativeArraykernel__Object);
3188 ((struct instance_array__NativeArray*)var180)->values[0] = (val*) var163;
3189 ((struct instance_array__NativeArray*)var180)->values[1] = (val*) var167;
3190 ((struct instance_array__NativeArray*)var180)->values[2] = (val*) var169;
3191 ((struct instance_array__NativeArray*)var180)->values[3] = (val*) var_mtype;
3192 ((struct instance_array__NativeArray*)var180)->values[4] = (val*) var174;
3193 ((void (*)(val*, val*, long))(var178->class->vft[COLOR_array__Array__with_native]))(var178, var180, var179) /* with_native on <var178:Array[Object]>*/;
3194 CHECK_NEW_array__Array(var178);
3195 }
3196 var181 = ((val* (*)(val*))(var178->class->vft[COLOR_string__Object__to_s]))(var178) /* to_s on <var178:Array[Object]>*/;
3197 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var181) /* add on <self:GlobalCompilerVisitor>*/;
3198 var = var_res136;
3199 goto RET_LABEL;
3200 }
3201 }
3202 }
3203 }
3204 RET_LABEL:;
3205 return var;
3206 }
3207 /* method global_compiler#GlobalCompilerVisitor#autobox for (self: Object, RuntimeVariable, MType): RuntimeVariable */
3208 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__autobox(val* self, val* p0, val* p1) {
3209 val* var /* : RuntimeVariable */;
3210 val* var1 /* : RuntimeVariable */;
3211 var1 = global_compiler__GlobalCompilerVisitor__autobox(self, p0, p1);
3212 var = var1;
3213 RET_LABEL:;
3214 return var;
3215 }
3216 /* method global_compiler#GlobalCompilerVisitor#collect_types for (self: GlobalCompilerVisitor, RuntimeVariable): Array[MClassType] */
3217 val* global_compiler__GlobalCompilerVisitor__collect_types(val* self, val* p0) {
3218 val* var /* : Array[MClassType] */;
3219 val* var_recv /* var recv: RuntimeVariable */;
3220 val* var1 /* : MType */;
3221 val* var_mtype /* var mtype: MType */;
3222 short int var2 /* : Bool */;
3223 short int var3 /* : Bool */;
3224 int cltype;
3225 int idtype;
3226 val* var4 /* : AbstractCompiler */;
3227 val* var5 /* : RapidTypeAnalysis */;
3228 val* var6 /* : HashSet[MClassType] */;
3229 short int var7 /* : Bool */;
3230 val* var8 /* : Array[MClassType] */;
3231 long var9 /* : Int */;
3232 val* var_ /* var : Array[MClassType] */;
3233 val* var_types /* var types: Array[MClassType] */;
3234 val* var10 /* : AbstractCompiler */;
3235 val* var11 /* : HashMap[MType, Array[MClassType]] */;
3236 val* var_cache /* var cache: HashMap[MType, Array[MClassType]] */;
3237 short int var12 /* : Bool */;
3238 val* var13 /* : nullable Object */;
3239 val* var14 /* : Array[MClassType] */;
3240 val* var_types15 /* var types: Array[MClassType] */;
3241 val* var16 /* : AbstractCompiler */;
3242 val* var17 /* : MModule */;
3243 val* var_mainmodule /* var mainmodule: MModule */;
3244 val* var18 /* : AbstractCompiler */;
3245 val* var19 /* : RapidTypeAnalysis */;
3246 val* var20 /* : HashSet[MClassType] */;
3247 val* var21 /* : Iterator[nullable Object] */;
3248 short int var22 /* : Bool */;
3249 val* var23 /* : nullable Object */;
3250 val* var_t /* var t: MClassType */;
3251 val* var24 /* : null */;
3252 short int var25 /* : Bool */;
3253 short int var26 /* : Bool */;
3254 var_recv = p0;
3255 var1 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_recv) /* mcasttype on <var_recv:RuntimeVariable>*/;
3256 var_mtype = var1;
3257 var2 = ((short int (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact]))(var_recv) /* is_exact on <var_recv:RuntimeVariable>*/;
3258 if (var2){
3259 /* <var_mtype:MType> isa MClassType */
3260 cltype = type_model__MClassType.color;
3261 idtype = type_model__MClassType.id;
3262 if(cltype >= var_mtype->type->table_size) {
3263 var3 = 0;
3264 } else {
3265 var3 = var_mtype->type->type_table[cltype] == idtype;
3266 }
3267 if (!var3) {
3268 fprintf(stderr, "Runtime error: %s", "Assert failed");
3269 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 300);
3270 exit(1);
3271 }
3272 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3273 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var4) /* runtime_type_analysis on <var4:AbstractCompiler(GlobalCompiler)>*/;
3274 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var5) /* live_types on <var5:RapidTypeAnalysis>*/;
3275 var7 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__Collection__has]))(var6, var_mtype) /* has on <var6:HashSet[MClassType]>*/;
3276 if (!var7) {
3277 fprintf(stderr, "Runtime error: %s", "Assert failed");
3278 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 301);
3279 exit(1);
3280 }
3281 var8 = NEW_array__Array(&type_array__Arraymodel__MClassType);
3282 var9 = 1;
3283 ((void (*)(val*, long))(var8->class->vft[COLOR_array__Array__with_capacity]))(var8, var9) /* with_capacity on <var8:Array[MClassType]>*/;
3284 CHECK_NEW_array__Array(var8);
3285 var_ = var8;
3286 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var_mtype) /* push on <var_:Array[MClassType]>*/;
3287 var_types = var_;
3288 var = var_types;
3289 goto RET_LABEL;
3290 } else {
3291 }
3292 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3293 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_global_compiler__GlobalCompiler__collect_types_cache]))(var10) /* collect_types_cache on <var10:AbstractCompiler(GlobalCompiler)>*/;
3294 var_cache = var11;
3295 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]]>*/;
3296 if (var12){
3297 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]]>*/;
3298 var = var13;
3299 goto RET_LABEL;
3300 } else {
3301 }
3302 var14 = NEW_array__Array(&type_array__Arraymodel__MClassType);
3303 ((void (*)(val*))(var14->class->vft[COLOR_array__Array__init]))(var14) /* init on <var14:Array[MClassType]>*/;
3304 CHECK_NEW_array__Array(var14);
3305 var_types15 = var14;
3306 var16 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3307 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var16) /* mainmodule on <var16:AbstractCompiler(GlobalCompiler)>*/;
3308 var_mainmodule = var17;
3309 var18 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3310 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var18) /* runtime_type_analysis on <var18:AbstractCompiler(GlobalCompiler)>*/;
3311 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var19) /* live_types on <var19:RapidTypeAnalysis>*/;
3312 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Collection__iterator]))(var20) /* iterator on <var20:HashSet[MClassType]>*/;
3313 for(;;) {
3314 var22 = ((short int (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var21) /* is_ok on <var21:Iterator[nullable Object]>*/;
3315 if(!var22) break;
3316 var23 = ((val* (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__item]))(var21) /* item on <var21:Iterator[nullable Object]>*/;
3317 var_t = var23;
3318 var24 = NULL;
3319 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>*/;
3320 var26 = !var25;
3321 if (var26){
3322 goto CONTINUE_label;
3323 } else {
3324 }
3325 ((void (*)(val*, val*))(var_types15->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_types15, var_t) /* add on <var_types15:Array[MClassType]>*/;
3326 CONTINUE_label: (void)0;
3327 ((void (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__next]))(var21) /* next on <var21:Iterator[nullable Object]>*/;
3328 }
3329 BREAK_label: (void)0;
3330 ((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]]>*/;
3331 var = var_types15;
3332 goto RET_LABEL;
3333 RET_LABEL:;
3334 return var;
3335 }
3336 /* method global_compiler#GlobalCompilerVisitor#collect_types for (self: Object, RuntimeVariable): Array[MClassType] */
3337 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__collect_types(val* self, val* p0) {
3338 val* var /* : Array[MClassType] */;
3339 val* var1 /* : Array[MClassType] */;
3340 var1 = global_compiler__GlobalCompilerVisitor__collect_types(self, p0);
3341 var = var1;
3342 RET_LABEL:;
3343 return var;
3344 }
3345 /* method global_compiler#GlobalCompilerVisitor#native_array_def for (self: GlobalCompilerVisitor, String, nullable MType, Array[RuntimeVariable]) */
3346 void global_compiler__GlobalCompilerVisitor__native_array_def(val* self, val* p0, val* p1, val* p2) {
3347 val* var_pname /* var pname: String */;
3348 val* var_ret_type /* var ret_type: nullable MType */;
3349 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
3350 val* var /* : nullable Object */;
3351 val* var1 /* : MType */;
3352 val* var_elttype /* var elttype: MType */;
3353 val* var2 /* : Array[Object] */;
3354 long var3 /* : Int */;
3355 val* var_ /* var : Array[Object] */;
3356 static val* varonce;
3357 val* var4 /* : String */;
3358 char* var5 /* : NativeString */;
3359 long var6 /* : Int */;
3360 val* var7 /* : String */;
3361 long var8 /* : Int */;
3362 val* var9 /* : nullable Object */;
3363 val* var10 /* : MType */;
3364 val* var11 /* : String */;
3365 static val* varonce12;
3366 val* var13 /* : String */;
3367 char* var14 /* : NativeString */;
3368 long var15 /* : Int */;
3369 val* var16 /* : String */;
3370 long var17 /* : Int */;
3371 val* var18 /* : nullable Object */;
3372 static val* varonce19;
3373 val* var20 /* : String */;
3374 char* var21 /* : NativeString */;
3375 long var22 /* : Int */;
3376 val* var23 /* : String */;
3377 val* var24 /* : String */;
3378 val* var_recv /* var recv: String */;
3379 static val* varonce25;
3380 val* var26 /* : String */;
3381 char* var27 /* : NativeString */;
3382 long var28 /* : Int */;
3383 val* var29 /* : String */;
3384 short int var30 /* : Bool */;
3385 static val* varonce31;
3386 val* var32 /* : String */;
3387 char* var33 /* : NativeString */;
3388 long var34 /* : Int */;
3389 val* var35 /* : String */;
3390 long var36 /* : Int */;
3391 val* var37 /* : nullable Object */;
3392 static val* varonce38;
3393 val* var39 /* : String */;
3394 char* var40 /* : NativeString */;
3395 long var41 /* : Int */;
3396 val* var42 /* : String */;
3397 val* var43 /* : Array[Object] */;
3398 long var44 /* : Int */;
3399 val* var45 /* : NativeArray[Object] */;
3400 val* var46 /* : String */;
3401 val* var47 /* : RuntimeVariable */;
3402 static val* varonce48;
3403 val* var49 /* : String */;
3404 char* var50 /* : NativeString */;
3405 long var51 /* : Int */;
3406 val* var52 /* : String */;
3407 short int var53 /* : Bool */;
3408 static val* varonce54;
3409 val* var55 /* : String */;
3410 char* var56 /* : NativeString */;
3411 long var57 /* : Int */;
3412 val* var58 /* : String */;
3413 long var59 /* : Int */;
3414 val* var60 /* : nullable Object */;
3415 static val* varonce61;
3416 val* var62 /* : String */;
3417 char* var63 /* : NativeString */;
3418 long var64 /* : Int */;
3419 val* var65 /* : String */;
3420 long var66 /* : Int */;
3421 val* var67 /* : nullable Object */;
3422 static val* varonce68;
3423 val* var69 /* : String */;
3424 char* var70 /* : NativeString */;
3425 long var71 /* : Int */;
3426 val* var72 /* : String */;
3427 val* var73 /* : Array[Object] */;
3428 long var74 /* : Int */;
3429 val* var75 /* : NativeArray[Object] */;
3430 val* var76 /* : String */;
3431 static val* varonce77;
3432 val* var78 /* : String */;
3433 char* var79 /* : NativeString */;
3434 long var80 /* : Int */;
3435 val* var81 /* : String */;
3436 short int var82 /* : Bool */;
3437 val* var83 /* : Array[Object] */;
3438 long var84 /* : Int */;
3439 val* var_85 /* var : Array[Object] */;
3440 static val* varonce86;
3441 val* var87 /* : String */;
3442 char* var88 /* : NativeString */;
3443 long var89 /* : Int */;
3444 val* var90 /* : String */;
3445 long var91 /* : Int */;
3446 val* var92 /* : nullable Object */;
3447 val* var93 /* : MType */;
3448 val* var94 /* : String */;
3449 static val* varonce95;
3450 val* var96 /* : String */;
3451 char* var97 /* : NativeString */;
3452 long var98 /* : Int */;
3453 val* var99 /* : String */;
3454 long var100 /* : Int */;
3455 val* var101 /* : nullable Object */;
3456 static val* varonce102;
3457 val* var103 /* : String */;
3458 char* var104 /* : NativeString */;
3459 long var105 /* : Int */;
3460 val* var106 /* : String */;
3461 val* var107 /* : String */;
3462 val* var_recv1 /* var recv1: String */;
3463 static val* varonce108;
3464 val* var109 /* : String */;
3465 char* var110 /* : NativeString */;
3466 long var111 /* : Int */;
3467 val* var112 /* : String */;
3468 static val* varonce113;
3469 val* var114 /* : String */;
3470 char* var115 /* : NativeString */;
3471 long var116 /* : Int */;
3472 val* var117 /* : String */;
3473 static val* varonce118;
3474 val* var119 /* : String */;
3475 char* var120 /* : NativeString */;
3476 long var121 /* : Int */;
3477 val* var122 /* : String */;
3478 long var123 /* : Int */;
3479 val* var124 /* : nullable Object */;
3480 static val* varonce125;
3481 val* var126 /* : String */;
3482 char* var127 /* : NativeString */;
3483 long var128 /* : Int */;
3484 val* var129 /* : String */;
3485 val* var130 /* : String */;
3486 static val* varonce131;
3487 val* var132 /* : String */;
3488 char* var133 /* : NativeString */;
3489 long var134 /* : Int */;
3490 val* var135 /* : String */;
3491 val* var136 /* : Array[Object] */;
3492 long var137 /* : Int */;
3493 val* var138 /* : NativeArray[Object] */;
3494 val* var139 /* : String */;
3495 var_pname = p0;
3496 var_ret_type = p1;
3497 var_arguments = p2;
3498 var = ((val* (*)(val*))(var_arguments->class->vft[COLOR_abstract_collection__Collection__first]))(var_arguments) /* first on <var_arguments:Array[RuntimeVariable]>*/;
3499 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var) /* mtype on <var:nullable Object(RuntimeVariable)>*/;
3500 var_elttype = var1;
3501 var2 = NEW_array__Array(&type_array__Arraykernel__Object);
3502 var3 = 5;
3503 ((void (*)(val*, long))(var2->class->vft[COLOR_array__Array__with_capacity]))(var2, var3) /* with_capacity on <var2:Array[Object]>*/;
3504 CHECK_NEW_array__Array(var2);
3505 var_ = var2;
3506 if (varonce) {
3507 var4 = varonce;
3508 } else {
3509 var5 = "((struct ";
3510 var6 = 9;
3511 var7 = string__NativeString__to_s_with_length(var5, var6);
3512 var4 = var7;
3513 varonce = var4;
3514 }
3515 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var4) /* add on <var_:Array[Object]>*/;
3516 var8 = 0;
3517 var9 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var8) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3518 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var9) /* mcasttype on <var9:nullable Object(RuntimeVariable)>*/;
3519 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__MType__c_name]))(var10) /* c_name on <var10:MType>*/;
3520 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var11) /* add on <var_:Array[Object]>*/;
3521 if (varonce12) {
3522 var13 = varonce12;
3523 } else {
3524 var14 = "*)";
3525 var15 = 2;
3526 var16 = string__NativeString__to_s_with_length(var14, var15);
3527 var13 = var16;
3528 varonce12 = var13;
3529 }
3530 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var13) /* add on <var_:Array[Object]>*/;
3531 var17 = 0;
3532 var18 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var17) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3533 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var18) /* add on <var_:Array[Object]>*/;
3534 if (varonce19) {
3535 var20 = varonce19;
3536 } else {
3537 var21 = ")->values";
3538 var22 = 9;
3539 var23 = string__NativeString__to_s_with_length(var21, var22);
3540 var20 = var23;
3541 varonce19 = var20;
3542 }
3543 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var20) /* add on <var_:Array[Object]>*/;
3544 var24 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
3545 var_recv = var24;
3546 if (varonce25) {
3547 var26 = varonce25;
3548 } else {
3549 var27 = "[]";
3550 var28 = 2;
3551 var29 = string__NativeString__to_s_with_length(var27, var28);
3552 var26 = var29;
3553 varonce25 = var26;
3554 }
3555 var30 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var26) /* == on <var_pname:String>*/;
3556 if (var30){
3557 if (varonce31) {
3558 var32 = varonce31;
3559 } else {
3560 var33 = "[";
3561 var34 = 1;
3562 var35 = string__NativeString__to_s_with_length(var33, var34);
3563 var32 = var35;
3564 varonce31 = var32;
3565 }
3566 var36 = 1;
3567 var37 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var36) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3568 if (varonce38) {
3569 var39 = varonce38;
3570 } else {
3571 var40 = "]";
3572 var41 = 1;
3573 var42 = string__NativeString__to_s_with_length(var40, var41);
3574 var39 = var42;
3575 varonce38 = var39;
3576 }
3577 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
3578 { /* var43 = array_instance Array[Object] */
3579 var44 = 4;
3580 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
3581 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_recv;
3582 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var32;
3583 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var37;
3584 ((struct instance_array__NativeArray*)var45)->values[3] = (val*) var39;
3585 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
3586 CHECK_NEW_array__Array(var43);
3587 }
3588 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
3589 if (var_ret_type == NULL) {
3590 fprintf(stderr, "Runtime error: %s", "Cast failed");
3591 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 324);
3592 exit(1);
3593 }
3594 var47 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var46, var_ret_type) /* new_expr on <self:GlobalCompilerVisitor>*/;
3595 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var47) /* ret on <self:GlobalCompilerVisitor>*/;
3596 goto RET_LABEL;
3597 } else {
3598 if (varonce48) {
3599 var49 = varonce48;
3600 } else {
3601 var50 = "[]=";
3602 var51 = 3;
3603 var52 = string__NativeString__to_s_with_length(var50, var51);
3604 var49 = var52;
3605 varonce48 = var49;
3606 }
3607 var53 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var49) /* == on <var_pname:String>*/;
3608 if (var53){
3609 if (varonce54) {
3610 var55 = varonce54;
3611 } else {
3612 var56 = "[";
3613 var57 = 1;
3614 var58 = string__NativeString__to_s_with_length(var56, var57);
3615 var55 = var58;
3616 varonce54 = var55;
3617 }
3618 var59 = 1;
3619 var60 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var59) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3620 if (varonce61) {
3621 var62 = varonce61;
3622 } else {
3623 var63 = "]=";
3624 var64 = 2;
3625 var65 = string__NativeString__to_s_with_length(var63, var64);
3626 var62 = var65;
3627 varonce61 = var62;
3628 }
3629 var66 = 2;
3630 var67 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var66) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3631 if (varonce68) {
3632 var69 = varonce68;
3633 } else {
3634 var70 = ";";
3635 var71 = 1;
3636 var72 = string__NativeString__to_s_with_length(var70, var71);
3637 var69 = var72;
3638 varonce68 = var69;
3639 }
3640 var73 = NEW_array__Array(&type_array__Arraykernel__Object);
3641 { /* var73 = array_instance Array[Object] */
3642 var74 = 6;
3643 var75 = NEW_array__NativeArray(var74, &type_array__NativeArraykernel__Object);
3644 ((struct instance_array__NativeArray*)var75)->values[0] = (val*) var_recv;
3645 ((struct instance_array__NativeArray*)var75)->values[1] = (val*) var55;
3646 ((struct instance_array__NativeArray*)var75)->values[2] = (val*) var60;
3647 ((struct instance_array__NativeArray*)var75)->values[3] = (val*) var62;
3648 ((struct instance_array__NativeArray*)var75)->values[4] = (val*) var67;
3649 ((struct instance_array__NativeArray*)var75)->values[5] = (val*) var69;
3650 ((void (*)(val*, val*, long))(var73->class->vft[COLOR_array__Array__with_native]))(var73, var75, var74) /* with_native on <var73:Array[Object]>*/;
3651 CHECK_NEW_array__Array(var73);
3652 }
3653 var76 = ((val* (*)(val*))(var73->class->vft[COLOR_string__Object__to_s]))(var73) /* to_s on <var73:Array[Object]>*/;
3654 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var76) /* add on <self:GlobalCompilerVisitor>*/;
3655 goto RET_LABEL;
3656 } else {
3657 if (varonce77) {
3658 var78 = varonce77;
3659 } else {
3660 var79 = "copy_to";
3661 var80 = 7;
3662 var81 = string__NativeString__to_s_with_length(var79, var80);
3663 var78 = var81;
3664 varonce77 = var78;
3665 }
3666 var82 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var78) /* == on <var_pname:String>*/;
3667 if (var82){
3668 var83 = NEW_array__Array(&type_array__Arraykernel__Object);
3669 var84 = 5;
3670 ((void (*)(val*, long))(var83->class->vft[COLOR_array__Array__with_capacity]))(var83, var84) /* with_capacity on <var83:Array[Object]>*/;
3671 CHECK_NEW_array__Array(var83);
3672 var_85 = var83;
3673 if (varonce86) {
3674 var87 = varonce86;
3675 } else {
3676 var88 = "((struct ";
3677 var89 = 9;
3678 var90 = string__NativeString__to_s_with_length(var88, var89);
3679 var87 = var90;
3680 varonce86 = var87;
3681 }
3682 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var87) /* add on <var_85:Array[Object]>*/;
3683 var91 = 1;
3684 var92 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var91) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3685 var93 = ((val* (*)(val*))(var92->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var92) /* mcasttype on <var92:nullable Object(RuntimeVariable)>*/;
3686 var94 = ((val* (*)(val*))(var93->class->vft[COLOR_abstract_compiler__MType__c_name]))(var93) /* c_name on <var93:MType>*/;
3687 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var94) /* add on <var_85:Array[Object]>*/;
3688 if (varonce95) {
3689 var96 = varonce95;
3690 } else {
3691 var97 = "*)";
3692 var98 = 2;
3693 var99 = string__NativeString__to_s_with_length(var97, var98);
3694 var96 = var99;
3695 varonce95 = var96;
3696 }
3697 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var96) /* add on <var_85:Array[Object]>*/;
3698 var100 = 1;
3699 var101 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var100) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3700 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var101) /* add on <var_85:Array[Object]>*/;
3701 if (varonce102) {
3702 var103 = varonce102;
3703 } else {
3704 var104 = ")->values";
3705 var105 = 9;
3706 var106 = string__NativeString__to_s_with_length(var104, var105);
3707 var103 = var106;
3708 varonce102 = var103;
3709 }
3710 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var103) /* add on <var_85:Array[Object]>*/;
3711 var107 = ((val* (*)(val*))(var_85->class->vft[COLOR_string__Object__to_s]))(var_85) /* to_s on <var_85:Array[Object]>*/;
3712 var_recv1 = var107;
3713 if (varonce108) {
3714 var109 = varonce108;
3715 } else {
3716 var110 = "memcpy(";
3717 var111 = 7;
3718 var112 = string__NativeString__to_s_with_length(var110, var111);
3719 var109 = var112;
3720 varonce108 = var109;
3721 }
3722 if (varonce113) {
3723 var114 = varonce113;
3724 } else {
3725 var115 = ",";
3726 var116 = 1;
3727 var117 = string__NativeString__to_s_with_length(var115, var116);
3728 var114 = var117;
3729 varonce113 = var114;
3730 }
3731 if (varonce118) {
3732 var119 = varonce118;
3733 } else {
3734 var120 = ",";
3735 var121 = 1;
3736 var122 = string__NativeString__to_s_with_length(var120, var121);
3737 var119 = var122;
3738 varonce118 = var119;
3739 }
3740 var123 = 2;
3741 var124 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var123) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3742 if (varonce125) {
3743 var126 = varonce125;
3744 } else {
3745 var127 = "*sizeof(";
3746 var128 = 8;
3747 var129 = string__NativeString__to_s_with_length(var127, var128);
3748 var126 = var129;
3749 varonce125 = var126;
3750 }
3751 var130 = ((val* (*)(val*))(var_elttype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_elttype) /* ctype on <var_elttype:MType>*/;
3752 if (varonce131) {
3753 var132 = varonce131;
3754 } else {
3755 var133 = "));";
3756 var134 = 3;
3757 var135 = string__NativeString__to_s_with_length(var133, var134);
3758 var132 = var135;
3759 varonce131 = var132;
3760 }
3761 var136 = NEW_array__Array(&type_array__Arraykernel__Object);
3762 { /* var136 = array_instance Array[Object] */
3763 var137 = 9;
3764 var138 = NEW_array__NativeArray(var137, &type_array__NativeArraykernel__Object);
3765 ((struct instance_array__NativeArray*)var138)->values[0] = (val*) var109;
3766 ((struct instance_array__NativeArray*)var138)->values[1] = (val*) var_recv1;
3767 ((struct instance_array__NativeArray*)var138)->values[2] = (val*) var114;
3768 ((struct instance_array__NativeArray*)var138)->values[3] = (val*) var_recv;
3769 ((struct instance_array__NativeArray*)var138)->values[4] = (val*) var119;
3770 ((struct instance_array__NativeArray*)var138)->values[5] = (val*) var124;
3771 ((struct instance_array__NativeArray*)var138)->values[6] = (val*) var126;
3772 ((struct instance_array__NativeArray*)var138)->values[7] = (val*) var130;
3773 ((struct instance_array__NativeArray*)var138)->values[8] = (val*) var132;
3774 ((void (*)(val*, val*, long))(var136->class->vft[COLOR_array__Array__with_native]))(var136, var138, var137) /* with_native on <var136:Array[Object]>*/;
3775 CHECK_NEW_array__Array(var136);
3776 }
3777 var139 = ((val* (*)(val*))(var136->class->vft[COLOR_string__Object__to_s]))(var136) /* to_s on <var136:Array[Object]>*/;
3778 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var139) /* add on <self:GlobalCompilerVisitor>*/;
3779 goto RET_LABEL;
3780 } else {
3781 }
3782 }
3783 }
3784 RET_LABEL:;
3785 }
3786 /* method global_compiler#GlobalCompilerVisitor#native_array_def for (self: Object, String, nullable MType, Array[RuntimeVariable]) */
3787 void VIRTUAL_global_compiler__GlobalCompilerVisitor__native_array_def(val* self, val* p0, val* p1, val* p2) {
3788 global_compiler__GlobalCompilerVisitor__native_array_def(self, p0, p1, p2);
3789 RET_LABEL:;
3790 }
3791 /* method global_compiler#GlobalCompilerVisitor#calloc_array for (self: GlobalCompilerVisitor, MType, Array[RuntimeVariable]) */
3792 void global_compiler__GlobalCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
3793 val* var_ret_type /* var ret_type: MType */;
3794 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
3795 static val* varonce;
3796 val* var /* : String */;
3797 char* var1 /* : NativeString */;
3798 long var2 /* : Int */;
3799 val* var3 /* : String */;
3800 val* var4 /* : String */;
3801 static val* varonce5;
3802 val* var6 /* : String */;
3803 char* var7 /* : NativeString */;
3804 long var8 /* : Int */;
3805 val* var9 /* : String */;
3806 long var10 /* : Int */;
3807 val* var11 /* : nullable Object */;
3808 static val* varonce12;
3809 val* var13 /* : String */;
3810 char* var14 /* : NativeString */;
3811 long var15 /* : Int */;
3812 val* var16 /* : String */;
3813 val* var17 /* : Array[Object] */;
3814 long var18 /* : Int */;
3815 val* var19 /* : NativeArray[Object] */;
3816 val* var20 /* : String */;
3817 val* var21 /* : RuntimeVariable */;
3818 var_ret_type = p0;
3819 var_arguments = p1;
3820 if (varonce) {
3821 var = varonce;
3822 } else {
3823 var1 = "NEW_";
3824 var2 = 4;
3825 var3 = string__NativeString__to_s_with_length(var1, var2);
3826 var = var3;
3827 varonce = var;
3828 }
3829 var4 = ((val* (*)(val*))(var_ret_type->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_ret_type) /* c_name on <var_ret_type:MType>*/;
3830 if (varonce5) {
3831 var6 = varonce5;
3832 } else {
3833 var7 = "(";
3834 var8 = 1;
3835 var9 = string__NativeString__to_s_with_length(var7, var8);
3836 var6 = var9;
3837 varonce5 = var6;
3838 }
3839 var10 = 1;
3840 var11 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var10) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3841 if (varonce12) {
3842 var13 = varonce12;
3843 } else {
3844 var14 = ")";
3845 var15 = 1;
3846 var16 = string__NativeString__to_s_with_length(var14, var15);
3847 var13 = var16;
3848 varonce12 = var13;
3849 }
3850 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
3851 { /* var17 = array_instance Array[Object] */
3852 var18 = 5;
3853 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
3854 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var;
3855 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var4;
3856 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var6;
3857 ((struct instance_array__NativeArray*)var19)->values[3] = (val*) var11;
3858 ((struct instance_array__NativeArray*)var19)->values[4] = (val*) var13;
3859 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
3860 CHECK_NEW_array__Array(var17);
3861 }
3862 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
3863 var21 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var20, var_ret_type) /* new_expr on <self:GlobalCompilerVisitor>*/;
3864 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var21) /* ret on <self:GlobalCompilerVisitor>*/;
3865 RET_LABEL:;
3866 }
3867 /* method global_compiler#GlobalCompilerVisitor#calloc_array for (self: Object, MType, Array[RuntimeVariable]) */
3868 void VIRTUAL_global_compiler__GlobalCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
3869 global_compiler__GlobalCompilerVisitor__calloc_array(self, p0, p1);
3870 RET_LABEL:;
3871 }
3872 /* method global_compiler#GlobalCompilerVisitor#send for (self: GlobalCompilerVisitor, MMethod, Array[RuntimeVariable]): nullable RuntimeVariable */
3873 val* global_compiler__GlobalCompilerVisitor__send(val* self, val* p0, val* p1) {
3874 val* var /* : nullable RuntimeVariable */;
3875 val* var_m /* var m: MMethod */;
3876 val* var_args /* var args: Array[RuntimeVariable] */;
3877 val* var1 /* : nullable Object */;
3878 val* var2 /* : Array[MClassType] */;
3879 val* var_types /* var types: Array[MClassType] */;
3880 val* var3 /* : MPropDef */;
3881 val* var4 /* : nullable MSignature */;
3882 val* var5 /* : nullable MType */;
3883 val* var_ret /* var ret: nullable MType */;
3884 short int var6 /* : Bool */;
3885 val* var7 /* : nullable Object */;
3886 val* var8 /* : MType */;
3887 val* var9 /* : RuntimeVariable */;
3888 val* var_res /* var res: nullable RuntimeVariable */;
3889 val* var10 /* : null */;
3890 short int var11 /* : Bool */;
3891 val* var12 /* : null */;
3892 val* var13 /* : nullable Object */;
3893 val* var14 /* : MType */;
3894 val* var15 /* : RuntimeVariable */;
3895 static val* varonce;
3896 val* var16 /* : String */;
3897 char* var17 /* : NativeString */;
3898 long var18 /* : Int */;
3899 val* var19 /* : String */;
3900 static val* varonce20;
3901 val* var21 /* : String */;
3902 char* var22 /* : NativeString */;
3903 long var23 /* : Int */;
3904 val* var24 /* : String */;
3905 val* var25 /* : nullable Object */;
3906 val* var26 /* : String */;
3907 static val* varonce27;
3908 val* var28 /* : String */;
3909 char* var29 /* : NativeString */;
3910 long var30 /* : Int */;
3911 val* var31 /* : String */;
3912 val* var32 /* : Array[Object] */;
3913 long var33 /* : Int */;
3914 val* var34 /* : NativeArray[Object] */;
3915 val* var35 /* : String */;
3916 val* var36 /* : nullable Object */;
3917 val* var37 /* : MType */;
3918 val* var38 /* : String */;
3919 static val* varonce39;
3920 val* var40 /* : String */;
3921 char* var41 /* : NativeString */;
3922 long var42 /* : Int */;
3923 val* var43 /* : String */;
3924 short int var44 /* : Bool */;
3925 val* var45 /* : nullable Object */;
3926 val* var46 /* : MType */;
3927 short int var47 /* : Bool */;
3928 int cltype;
3929 int idtype;
3930 const char* var_class_name;
3931 val* var_mclasstype /* var mclasstype: MClassType */;
3932 val* var48 /* : AbstractCompiler */;
3933 val* var49 /* : RapidTypeAnalysis */;
3934 val* var50 /* : HashSet[MClassType] */;
3935 short int var51 /* : Bool */;
3936 short int var52 /* : Bool */;
3937 static val* varonce53;
3938 val* var54 /* : String */;
3939 char* var55 /* : NativeString */;
3940 long var56 /* : Int */;
3941 val* var57 /* : String */;
3942 static val* varonce58;
3943 val* var59 /* : String */;
3944 char* var60 /* : NativeString */;
3945 long var61 /* : Int */;
3946 val* var62 /* : String */;
3947 val* var63 /* : Array[Object] */;
3948 long var64 /* : Int */;
3949 val* var65 /* : NativeArray[Object] */;
3950 val* var66 /* : String */;
3951 val* var67 /* : AbstractCompiler */;
3952 val* var68 /* : MModule */;
3953 val* var69 /* : MPropDef */;
3954 val* var_propdef /* var propdef: MMethodDef */;
3955 val* var70 /* : nullable RuntimeVariable */;
3956 val* var_res2 /* var res2: nullable RuntimeVariable */;
3957 val* var71 /* : null */;
3958 short int var72 /* : Bool */;
3959 short int var73 /* : Bool */;
3960 short int var74 /* : Bool */;
3961 val* var75 /* : AbstractCompiler */;
3962 val* var76 /* : ModelBuilder */;
3963 val* var77 /* : ToolContext */;
3964 val* var78 /* : OptionBool */;
3965 val* var79 /* : nullable Object */;
3966 short int var80 /* : Bool */;
3967 short int var81 /* : Bool */;
3968 short int var_ /* var : Bool */;
3969 val* var82 /* : String */;
3970 static val* varonce83;
3971 val* var84 /* : String */;
3972 char* var85 /* : NativeString */;
3973 long var86 /* : Int */;
3974 val* var87 /* : String */;
3975 short int var88 /* : Bool */;
3976 short int var_89 /* var : Bool */;
3977 val* var90 /* : String */;
3978 static val* varonce91;
3979 val* var92 /* : String */;
3980 char* var93 /* : NativeString */;
3981 long var94 /* : Int */;
3982 val* var95 /* : String */;
3983 short int var96 /* : Bool */;
3984 short int var_consider_null /* var consider_null: Bool */;
3985 short int var97 /* : Bool */;
3986 short int var98 /* : Bool */;
3987 val* var99 /* : nullable Object */;
3988 val* var100 /* : MType */;
3989 short int var101 /* : Bool */;
3990 int cltype102;
3991 int idtype103;
3992 short int var_104 /* var : Bool */;
3993 val* var105 /* : nullable Object */;
3994 val* var106 /* : MType */;
3995 short int var107 /* : Bool */;
3996 int cltype108;
3997 int idtype109;
3998 short int var_110 /* var : Bool */;
3999 static val* varonce111;
4000 val* var112 /* : String */;
4001 char* var113 /* : NativeString */;
4002 long var114 /* : Int */;
4003 val* var115 /* : String */;
4004 val* var116 /* : nullable Object */;
4005 static val* varonce117;
4006 val* var118 /* : String */;
4007 char* var119 /* : NativeString */;
4008 long var120 /* : Int */;
4009 val* var121 /* : String */;
4010 val* var122 /* : Array[Object] */;
4011 long var123 /* : Int */;
4012 val* var124 /* : NativeArray[Object] */;
4013 val* var125 /* : String */;
4014 val* var126 /* : String */;
4015 static val* varonce127;
4016 val* var128 /* : String */;
4017 char* var129 /* : NativeString */;
4018 long var130 /* : Int */;
4019 val* var131 /* : String */;
4020 short int var132 /* : Bool */;
4021 val* var133 /* : null */;
4022 short int var134 /* : Bool */;
4023 long var135 /* : Int */;
4024 val* var136 /* : nullable Object */;
4025 val* var137 /* : MType */;
4026 short int var138 /* : Bool */;
4027 int cltype139;
4028 int idtype140;
4029 static val* varonce141;
4030 val* var142 /* : String */;
4031 char* var143 /* : NativeString */;
4032 long var144 /* : Int */;
4033 val* var145 /* : String */;
4034 long var146 /* : Int */;
4035 val* var147 /* : nullable Object */;
4036 static val* varonce148;
4037 val* var149 /* : String */;
4038 char* var150 /* : NativeString */;
4039 long var151 /* : Int */;
4040 val* var152 /* : String */;
4041 val* var153 /* : Array[Object] */;
4042 long var154 /* : Int */;
4043 val* var155 /* : NativeArray[Object] */;
4044 val* var156 /* : String */;
4045 long var157 /* : Int */;
4046 val* var158 /* : nullable Object */;
4047 val* var159 /* : MType */;
4048 short int var160 /* : Bool */;
4049 int cltype161;
4050 int idtype162;
4051 static val* varonce163;
4052 val* var164 /* : String */;
4053 char* var165 /* : NativeString */;
4054 long var166 /* : Int */;
4055 val* var167 /* : String */;
4056 val* var168 /* : Array[Object] */;
4057 long var169 /* : Int */;
4058 val* var170 /* : NativeArray[Object] */;
4059 val* var171 /* : String */;
4060 static val* varonce172;
4061 val* var173 /* : String */;
4062 char* var174 /* : NativeString */;
4063 long var175 /* : Int */;
4064 val* var176 /* : String */;
4065 long var177 /* : Int */;
4066 val* var178 /* : nullable Object */;
4067 val* var179 /* : String */;
4068 static val* varonce180;
4069 val* var181 /* : String */;
4070 char* var182 /* : NativeString */;
4071 long var183 /* : Int */;
4072 val* var184 /* : String */;
4073 val* var185 /* : Array[Object] */;
4074 long var186 /* : Int */;
4075 val* var187 /* : NativeArray[Object] */;
4076 val* var188 /* : String */;
4077 val* var189 /* : String */;
4078 static val* varonce190;
4079 val* var191 /* : String */;
4080 char* var192 /* : NativeString */;
4081 long var193 /* : Int */;
4082 val* var194 /* : String */;
4083 short int var195 /* : Bool */;
4084 val* var196 /* : null */;
4085 short int var197 /* : Bool */;
4086 long var198 /* : Int */;
4087 val* var199 /* : nullable Object */;
4088 val* var200 /* : MType */;
4089 short int var201 /* : Bool */;
4090 int cltype202;
4091 int idtype203;
4092 static val* varonce204;
4093 val* var205 /* : String */;
4094 char* var206 /* : NativeString */;
4095 long var207 /* : Int */;
4096 val* var208 /* : String */;
4097 long var209 /* : Int */;
4098 val* var210 /* : nullable Object */;
4099 static val* varonce211;
4100 val* var212 /* : String */;
4101 char* var213 /* : NativeString */;
4102 long var214 /* : Int */;
4103 val* var215 /* : String */;
4104 val* var216 /* : Array[Object] */;
4105 long var217 /* : Int */;
4106 val* var218 /* : NativeArray[Object] */;
4107 val* var219 /* : String */;
4108 long var220 /* : Int */;
4109 val* var221 /* : nullable Object */;
4110 val* var222 /* : MType */;
4111 short int var223 /* : Bool */;
4112 int cltype224;
4113 int idtype225;
4114 static val* varonce226;
4115 val* var227 /* : String */;
4116 char* var228 /* : NativeString */;
4117 long var229 /* : Int */;
4118 val* var230 /* : String */;
4119 val* var231 /* : Array[Object] */;
4120 long var232 /* : Int */;
4121 val* var233 /* : NativeArray[Object] */;
4122 val* var234 /* : String */;
4123 static val* varonce235;
4124 val* var236 /* : String */;
4125 char* var237 /* : NativeString */;
4126 long var238 /* : Int */;
4127 val* var239 /* : String */;
4128 long var240 /* : Int */;
4129 val* var241 /* : nullable Object */;
4130 val* var242 /* : String */;
4131 static val* varonce243;
4132 val* var244 /* : String */;
4133 char* var245 /* : NativeString */;
4134 long var246 /* : Int */;
4135 val* var247 /* : String */;
4136 val* var248 /* : Array[Object] */;
4137 long var249 /* : Int */;
4138 val* var250 /* : NativeArray[Object] */;
4139 val* var251 /* : String */;
4140 static val* varonce252;
4141 val* var253 /* : String */;
4142 char* var254 /* : NativeString */;
4143 long var255 /* : Int */;
4144 val* var256 /* : String */;
4145 static val* varonce257;
4146 val* var258 /* : String */;
4147 char* var259 /* : NativeString */;
4148 long var260 /* : Int */;
4149 val* var261 /* : String */;
4150 short int var262 /* : Bool */;
4151 static val* varonce263;
4152 val* var264 /* : String */;
4153 char* var265 /* : NativeString */;
4154 long var266 /* : Int */;
4155 val* var267 /* : String */;
4156 static val* varonce268;
4157 val* var269 /* : String */;
4158 char* var270 /* : NativeString */;
4159 long var271 /* : Int */;
4160 val* var272 /* : String */;
4161 val* var273 /* : nullable Object */;
4162 val* var274 /* : String */;
4163 static val* varonce275;
4164 val* var276 /* : String */;
4165 char* var277 /* : NativeString */;
4166 long var278 /* : Int */;
4167 val* var279 /* : String */;
4168 static val* varonce280;
4169 val* var281 /* : String */;
4170 char* var282 /* : NativeString */;
4171 long var283 /* : Int */;
4172 val* var284 /* : String */;
4173 val* var285 /* : Array[Object] */;
4174 long var286 /* : Int */;
4175 val* var287 /* : NativeArray[Object] */;
4176 val* var288 /* : String */;
4177 val* var289 /* : nullable Object */;
4178 static val* varonce290;
4179 val* var291 /* : String */;
4180 char* var292 /* : NativeString */;
4181 long var293 /* : Int */;
4182 val* var294 /* : String */;
4183 static val* varonce295;
4184 val* var296 /* : String */;
4185 char* var297 /* : NativeString */;
4186 long var298 /* : Int */;
4187 val* var299 /* : String */;
4188 val* var300 /* : nullable Object */;
4189 static val* varonce301;
4190 val* var302 /* : String */;
4191 char* var303 /* : NativeString */;
4192 long var304 /* : Int */;
4193 val* var305 /* : String */;
4194 val* var306 /* : Array[Object] */;
4195 long var307 /* : Int */;
4196 val* var308 /* : NativeArray[Object] */;
4197 val* var309 /* : String */;
4198 val* var310 /* : nullable Object */;
4199 val* var_last /* var last: MClassType */;
4200 val* var311 /* : null */;
4201 val* var_defaultpropdef /* var defaultpropdef: nullable MMethodDef */;
4202 val* var312 /* : Iterator[nullable Object] */;
4203 short int var313 /* : Bool */;
4204 val* var314 /* : nullable Object */;
4205 val* var_t /* var t: MClassType */;
4206 val* var315 /* : AbstractCompiler */;
4207 val* var316 /* : MModule */;
4208 val* var317 /* : MPropDef */;
4209 val* var_propdef318 /* var propdef: MMethodDef */;
4210 short int var319 /* : Bool */;
4211 val* var320 /* : MClassDef */;
4212 val* var321 /* : MClass */;
4213 val* var322 /* : String */;
4214 static val* varonce323;
4215 val* var324 /* : String */;
4216 char* var325 /* : NativeString */;
4217 long var326 /* : Int */;
4218 val* var327 /* : String */;
4219 short int var328 /* : Bool */;
4220 short int var_329 /* var : Bool */;
4221 val* var330 /* : String */;
4222 static val* varonce331;
4223 val* var332 /* : String */;
4224 char* var333 /* : NativeString */;
4225 long var334 /* : Int */;
4226 val* var335 /* : String */;
4227 short int var336 /* : Bool */;
4228 short int var337 /* : Bool */;
4229 short int var338 /* : Bool */;
4230 val* var339 /* : AbstractCompiler */;
4231 short int var340 /* : Bool */;
4232 short int var341 /* : Bool */;
4233 short int var_342 /* var : Bool */;
4234 short int var343 /* : Bool */;
4235 short int var_344 /* var : Bool */;
4236 val* var345 /* : null */;
4237 short int var346 /* : Bool */;
4238 static val* varonce347;
4239 val* var348 /* : String */;
4240 char* var349 /* : NativeString */;
4241 long var350 /* : Int */;
4242 val* var351 /* : String */;
4243 static val* varonce352;
4244 val* var353 /* : String */;
4245 char* var354 /* : NativeString */;
4246 long var355 /* : Int */;
4247 val* var356 /* : String */;
4248 val* var357 /* : Array[Object] */;
4249 long var358 /* : Int */;
4250 val* var359 /* : NativeArray[Object] */;
4251 val* var360 /* : String */;
4252 static val* varonce361;
4253 val* var362 /* : String */;
4254 char* var363 /* : NativeString */;
4255 long var364 /* : Int */;
4256 val* var365 /* : String */;
4257 val* var366 /* : AbstractCompiler */;
4258 val* var367 /* : String */;
4259 static val* varonce368;
4260 val* var369 /* : String */;
4261 char* var370 /* : NativeString */;
4262 long var371 /* : Int */;
4263 val* var372 /* : String */;
4264 static val* varonce373;
4265 val* var374 /* : String */;
4266 char* var375 /* : NativeString */;
4267 long var376 /* : Int */;
4268 val* var377 /* : String */;
4269 val* var378 /* : Array[Object] */;
4270 long var379 /* : Int */;
4271 val* var380 /* : NativeArray[Object] */;
4272 val* var381 /* : String */;
4273 val* var382 /* : nullable RuntimeVariable */;
4274 val* var_res2383 /* var res2: nullable RuntimeVariable */;
4275 val* var384 /* : null */;
4276 short int var385 /* : Bool */;
4277 static val* varonce386;
4278 val* var387 /* : String */;
4279 char* var388 /* : NativeString */;
4280 long var389 /* : Int */;
4281 val* var390 /* : String */;
4282 val* var391 /* : null */;
4283 short int var392 /* : Bool */;
4284 static val* varonce393;
4285 val* var394 /* : String */;
4286 char* var395 /* : NativeString */;
4287 long var396 /* : Int */;
4288 val* var397 /* : String */;
4289 val* var398 /* : MClassDef */;
4290 val* var399 /* : MClassType */;
4291 val* var400 /* : nullable RuntimeVariable */;
4292 val* var_res2401 /* var res2: nullable RuntimeVariable */;
4293 val* var402 /* : null */;
4294 short int var403 /* : Bool */;
4295 val* var404 /* : AbstractCompiler */;
4296 short int var405 /* : Bool */;
4297 static val* varonce406;
4298 val* var407 /* : String */;
4299 char* var408 /* : NativeString */;
4300 long var409 /* : Int */;
4301 val* var410 /* : String */;
4302 val* var411 /* : nullable Object */;
4303 static val* varonce412;
4304 val* var413 /* : String */;
4305 char* var414 /* : NativeString */;
4306 long var415 /* : Int */;
4307 val* var416 /* : String */;
4308 var_m = p0;
4309 var_args = p1;
4310 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4311 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var1) /* collect_types on <self:GlobalCompilerVisitor>*/;
4312 var_types = var2;
4313 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__intro]))(var_m) /* intro on <var_m:MMethod>*/;
4314 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MMethodDef__msignature]))(var3) /* msignature on <var3:MPropDef(MMethodDef)>*/;
4315 if (var4 == NULL) {
4316 fprintf(stderr, "Runtime error: %s", "Reciever is null");
4317 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 346);
4318 exit(1);
4319 } else {
4320 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_model__MSignature__return_mtype]))(var4) /* return_mtype on <var4:nullable MSignature>*/;
4321 }
4322 var_ret = var5;
4323 var6 = ((short int (*)(val*))(var_m->class->vft[COLOR_model__MMethod__is_new]))(var_m) /* is_new on <var_m:MMethod>*/;
4324 if (var6){
4325 var7 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4326 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var7) /* mtype on <var7:nullable Object(RuntimeVariable)>*/;
4327 var_ret = var8;
4328 var9 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
4329 var_res = var9;
4330 } else {
4331 var10 = NULL;
4332 if (var_ret == NULL) {
4333 var11 = 1; /* is null */
4334 } else {
4335 var11 = 0; /* arg is null but recv is not */
4336 }
4337 if (var11){
4338 var12 = NULL;
4339 var_res = var12;
4340 } else {
4341 var13 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4342 var14 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var13) /* resolve_for on <self:GlobalCompilerVisitor>*/;
4343 var_ret = var14;
4344 var15 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
4345 var_res = var15;
4346 }
4347 }
4348 if (varonce) {
4349 var16 = varonce;
4350 } else {
4351 var17 = "/* send ";
4352 var18 = 8;
4353 var19 = string__NativeString__to_s_with_length(var17, var18);
4354 var16 = var19;
4355 varonce = var16;
4356 }
4357 if (varonce20) {
4358 var21 = varonce20;
4359 } else {
4360 var22 = " on ";
4361 var23 = 4;
4362 var24 = string__NativeString__to_s_with_length(var22, var23);
4363 var21 = var24;
4364 varonce20 = var21;
4365 }
4366 var25 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4367 var26 = ((val* (*)(val*))(var25->class->vft[COLOR_string__Object__inspect]))(var25) /* inspect on <var25:nullable Object(RuntimeVariable)>*/;
4368 if (varonce27) {
4369 var28 = varonce27;
4370 } else {
4371 var29 = " */";
4372 var30 = 3;
4373 var31 = string__NativeString__to_s_with_length(var29, var30);
4374 var28 = var31;
4375 varonce27 = var28;
4376 }
4377 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
4378 { /* var32 = array_instance Array[Object] */
4379 var33 = 5;
4380 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
4381 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var16;
4382 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_m;
4383 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var21;
4384 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var26;
4385 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
4386 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
4387 CHECK_NEW_array__Array(var32);
4388 }
4389 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
4390 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var35) /* add on <self:GlobalCompilerVisitor>*/;
4391 var36 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4392 var37 = ((val* (*)(val*))(var36->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var36) /* mtype on <var36:nullable Object(RuntimeVariable)>*/;
4393 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_compiler__MType__ctype]))(var37) /* ctype on <var37:MType>*/;
4394 if (varonce39) {
4395 var40 = varonce39;
4396 } else {
4397 var41 = "val*";
4398 var42 = 4;
4399 var43 = string__NativeString__to_s_with_length(var41, var42);
4400 var40 = var43;
4401 varonce39 = var40;
4402 }
4403 var44 = ((short int (*)(val*, val*))(var38->class->vft[COLOR_kernel__Object___33d_61d]))(var38, var40) /* != on <var38:String>*/;
4404 if (var44){
4405 var45 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4406 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var45) /* mtype on <var45:nullable Object(RuntimeVariable)>*/;
4407 /* <var46:MType> isa MClassType */
4408 cltype = type_model__MClassType.color;
4409 idtype = type_model__MClassType.id;
4410 if(cltype >= var46->type->table_size) {
4411 var47 = 0;
4412 } else {
4413 var47 = var46->type->type_table[cltype] == idtype;
4414 }
4415 if (!var47) {
4416 var_class_name = var46 == NULL ? "null" : var46->type->name;
4417 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
4418 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 359);
4419 exit(1);
4420 }
4421 var_mclasstype = var46;
4422 var48 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4423 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var48) /* runtime_type_analysis on <var48:AbstractCompiler(GlobalCompiler)>*/;
4424 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var49) /* live_types on <var49:RapidTypeAnalysis>*/;
4425 var51 = ((short int (*)(val*, val*))(var50->class->vft[COLOR_abstract_collection__Collection__has]))(var50, var_mclasstype) /* has on <var50:HashSet[MClassType]>*/;
4426 var52 = !var51;
4427 if (var52){
4428 if (varonce53) {
4429 var54 = varonce53;
4430 } else {
4431 var55 = "/* skip, no method ";
4432 var56 = 19;
4433 var57 = string__NativeString__to_s_with_length(var55, var56);
4434 var54 = var57;
4435 varonce53 = var54;
4436 }
4437 if (varonce58) {
4438 var59 = varonce58;
4439 } else {
4440 var60 = " */";
4441 var61 = 3;
4442 var62 = string__NativeString__to_s_with_length(var60, var61);
4443 var59 = var62;
4444 varonce58 = var59;
4445 }
4446 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
4447 { /* var63 = array_instance Array[Object] */
4448 var64 = 3;
4449 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
4450 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var54;
4451 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var_m;
4452 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var59;
4453 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
4454 CHECK_NEW_array__Array(var63);
4455 }
4456 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
4457 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var66) /* add on <self:GlobalCompilerVisitor>*/;
4458 var = var_res;
4459 goto RET_LABEL;
4460 } else {
4461 }
4462 var67 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4463 var68 = ((val* (*)(val*))(var67->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var67) /* mainmodule on <var67:AbstractCompiler(GlobalCompiler)>*/;
4464 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>*/;
4465 var_propdef = var69;
4466 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>*/;
4467 var_res2 = var70;
4468 var71 = NULL;
4469 if (var_res == NULL) {
4470 var72 = 0; /* is null */
4471 } else {
4472 var72 = 1; /* arg is null and recv is not */
4473 }
4474 if (var72){
4475 if (var_res2 == NULL) {
4476 fprintf(stderr, "Runtime error: %s", "Cast failed");
4477 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 366);
4478 exit(1);
4479 }
4480 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
4481 } else {
4482 }
4483 var = var_res;
4484 goto RET_LABEL;
4485 } else {
4486 }
4487 var75 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4488 var76 = ((val* (*)(val*))(var75->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var75) /* modelbuilder on <var75:AbstractCompiler(GlobalCompiler)>*/;
4489 var77 = ((val* (*)(val*))(var76->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var76) /* toolcontext on <var76:ModelBuilder>*/;
4490 var78 = ((val* (*)(val*))(var77->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_other]))(var77) /* opt_no_check_other on <var77:ToolContext>*/;
4491 var79 = ((val* (*)(val*))(var78->class->vft[COLOR_opts__Option__value]))(var78) /* value on <var78:OptionBool>*/;
4492 var80 = ((struct instance_kernel__Bool*)var79)->value; /* autounbox from nullable Object to Bool */;
4493 var81 = !var80;
4494 var_ = var81;
4495 if (var81){
4496 var74 = var_;
4497 } else {
4498 var82 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4499 if (varonce83) {
4500 var84 = varonce83;
4501 } else {
4502 var85 = "==";
4503 var86 = 2;
4504 var87 = string__NativeString__to_s_with_length(var85, var86);
4505 var84 = var87;
4506 varonce83 = var84;
4507 }
4508 var88 = ((short int (*)(val*, val*))(var82->class->vft[COLOR_kernel__Object___61d_61d]))(var82, var84) /* == on <var82:String>*/;
4509 var74 = var88;
4510 }
4511 var_89 = var74;
4512 if (var74){
4513 var73 = var_89;
4514 } else {
4515 var90 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4516 if (varonce91) {
4517 var92 = varonce91;
4518 } else {
4519 var93 = "!=";
4520 var94 = 2;
4521 var95 = string__NativeString__to_s_with_length(var93, var94);
4522 var92 = var95;
4523 varonce91 = var92;
4524 }
4525 var96 = ((short int (*)(val*, val*))(var90->class->vft[COLOR_kernel__Object___61d_61d]))(var90, var92) /* == on <var90:String>*/;
4526 var73 = var96;
4527 }
4528 var_consider_null = var73;
4529 var99 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4530 var100 = ((val* (*)(val*))(var99->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var99) /* mcasttype on <var99:nullable Object(RuntimeVariable)>*/;
4531 /* <var100:MType> isa MNullableType */
4532 cltype102 = type_model__MNullableType.color;
4533 idtype103 = type_model__MNullableType.id;
4534 if(cltype102 >= var100->type->table_size) {
4535 var101 = 0;
4536 } else {
4537 var101 = var100->type->type_table[cltype102] == idtype103;
4538 }
4539 var_104 = var101;
4540 if (var101){
4541 var98 = var_104;
4542 } else {
4543 var105 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4544 var106 = ((val* (*)(val*))(var105->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var105) /* mcasttype on <var105:nullable Object(RuntimeVariable)>*/;
4545 /* <var106:MType> isa MNullType */
4546 cltype108 = type_model__MNullType.color;
4547 idtype109 = type_model__MNullType.id;
4548 if(cltype108 >= var106->type->table_size) {
4549 var107 = 0;
4550 } else {
4551 var107 = var106->type->type_table[cltype108] == idtype109;
4552 }
4553 var98 = var107;
4554 }
4555 var_110 = var98;
4556 if (var98){
4557 var97 = var_consider_null;
4558 } else {
4559 var97 = var_110;
4560 }
4561 if (var97){
4562 if (varonce111) {
4563 var112 = varonce111;
4564 } else {
4565 var113 = "if (";
4566 var114 = 4;
4567 var115 = string__NativeString__to_s_with_length(var113, var114);
4568 var112 = var115;
4569 varonce111 = var112;
4570 }
4571 var116 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4572 if (varonce117) {
4573 var118 = varonce117;
4574 } else {
4575 var119 = " == NULL) { /* Special null case */";
4576 var120 = 35;
4577 var121 = string__NativeString__to_s_with_length(var119, var120);
4578 var118 = var121;
4579 varonce117 = var118;
4580 }
4581 var122 = NEW_array__Array(&type_array__Arraykernel__Object);
4582 { /* var122 = array_instance Array[Object] */
4583 var123 = 3;
4584 var124 = NEW_array__NativeArray(var123, &type_array__NativeArraykernel__Object);
4585 ((struct instance_array__NativeArray*)var124)->values[0] = (val*) var112;
4586 ((struct instance_array__NativeArray*)var124)->values[1] = (val*) var116;
4587 ((struct instance_array__NativeArray*)var124)->values[2] = (val*) var118;
4588 ((void (*)(val*, val*, long))(var122->class->vft[COLOR_array__Array__with_native]))(var122, var124, var123) /* with_native on <var122:Array[Object]>*/;
4589 CHECK_NEW_array__Array(var122);
4590 }
4591 var125 = ((val* (*)(val*))(var122->class->vft[COLOR_string__Object__to_s]))(var122) /* to_s on <var122:Array[Object]>*/;
4592 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var125) /* add on <self:GlobalCompilerVisitor>*/;
4593 var126 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4594 if (varonce127) {
4595 var128 = varonce127;
4596 } else {
4597 var129 = "==";
4598 var130 = 2;
4599 var131 = string__NativeString__to_s_with_length(var129, var130);
4600 var128 = var131;
4601 varonce127 = var128;
4602 }
4603 var132 = ((short int (*)(val*, val*))(var126->class->vft[COLOR_kernel__Object___61d_61d]))(var126, var128) /* == on <var126:String>*/;
4604 if (var132){
4605 var133 = NULL;
4606 if (var_res == NULL) {
4607 var134 = 0; /* is null */
4608 } else {
4609 var134 = 1; /* arg is null and recv is not */
4610 }
4611 if (!var134) {
4612 fprintf(stderr, "Runtime error: %s", "Assert failed");
4613 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 374);
4614 exit(1);
4615 }
4616 var135 = 1;
4617 var136 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var135) /* [] on <var_args:Array[RuntimeVariable]>*/;
4618 var137 = ((val* (*)(val*))(var136->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var136) /* mcasttype on <var136:nullable Object(RuntimeVariable)>*/;
4619 /* <var137:MType> isa MNullableType */
4620 cltype139 = type_model__MNullableType.color;
4621 idtype140 = type_model__MNullableType.id;
4622 if(cltype139 >= var137->type->table_size) {
4623 var138 = 0;
4624 } else {
4625 var138 = var137->type->type_table[cltype139] == idtype140;
4626 }
4627 if (var138){
4628 if (varonce141) {
4629 var142 = varonce141;
4630 } else {
4631 var143 = " = (";
4632 var144 = 4;
4633 var145 = string__NativeString__to_s_with_length(var143, var144);
4634 var142 = var145;
4635 varonce141 = var142;
4636 }
4637 var146 = 1;
4638 var147 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var146) /* [] on <var_args:Array[RuntimeVariable]>*/;
4639 if (varonce148) {
4640 var149 = varonce148;
4641 } else {
4642 var150 = " == NULL);";
4643 var151 = 10;
4644 var152 = string__NativeString__to_s_with_length(var150, var151);
4645 var149 = var152;
4646 varonce148 = var149;
4647 }
4648 var153 = NEW_array__Array(&type_array__Arraykernel__Object);
4649 { /* var153 = array_instance Array[Object] */
4650 var154 = 4;
4651 var155 = NEW_array__NativeArray(var154, &type_array__NativeArraykernel__Object);
4652 ((struct instance_array__NativeArray*)var155)->values[0] = (val*) var_res;
4653 ((struct instance_array__NativeArray*)var155)->values[1] = (val*) var142;
4654 ((struct instance_array__NativeArray*)var155)->values[2] = (val*) var147;
4655 ((struct instance_array__NativeArray*)var155)->values[3] = (val*) var149;
4656 ((void (*)(val*, val*, long))(var153->class->vft[COLOR_array__Array__with_native]))(var153, var155, var154) /* with_native on <var153:Array[Object]>*/;
4657 CHECK_NEW_array__Array(var153);
4658 }
4659 var156 = ((val* (*)(val*))(var153->class->vft[COLOR_string__Object__to_s]))(var153) /* to_s on <var153:Array[Object]>*/;
4660 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var156) /* add on <self:GlobalCompilerVisitor>*/;
4661 } else {
4662 var157 = 1;
4663 var158 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var157) /* [] on <var_args:Array[RuntimeVariable]>*/;
4664 var159 = ((val* (*)(val*))(var158->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var158) /* mcasttype on <var158:nullable Object(RuntimeVariable)>*/;
4665 /* <var159:MType> isa MNullType */
4666 cltype161 = type_model__MNullType.color;
4667 idtype162 = type_model__MNullType.id;
4668 if(cltype161 >= var159->type->table_size) {
4669 var160 = 0;
4670 } else {
4671 var160 = var159->type->type_table[cltype161] == idtype162;
4672 }
4673 if (var160){
4674 if (varonce163) {
4675 var164 = varonce163;
4676 } else {
4677 var165 = " = 1; /* is null */";
4678 var166 = 19;
4679 var167 = string__NativeString__to_s_with_length(var165, var166);
4680 var164 = var167;
4681 varonce163 = var164;
4682 }
4683 var168 = NEW_array__Array(&type_array__Arraykernel__Object);
4684 { /* var168 = array_instance Array[Object] */
4685 var169 = 2;
4686 var170 = NEW_array__NativeArray(var169, &type_array__NativeArraykernel__Object);
4687 ((struct instance_array__NativeArray*)var170)->values[0] = (val*) var_res;
4688 ((struct instance_array__NativeArray*)var170)->values[1] = (val*) var164;
4689 ((void (*)(val*, val*, long))(var168->class->vft[COLOR_array__Array__with_native]))(var168, var170, var169) /* with_native on <var168:Array[Object]>*/;
4690 CHECK_NEW_array__Array(var168);
4691 }
4692 var171 = ((val* (*)(val*))(var168->class->vft[COLOR_string__Object__to_s]))(var168) /* to_s on <var168:Array[Object]>*/;
4693 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
4694 } else {
4695 if (varonce172) {
4696 var173 = varonce172;
4697 } else {
4698 var174 = " = 0; /* ";
4699 var175 = 9;
4700 var176 = string__NativeString__to_s_with_length(var174, var175);
4701 var173 = var176;
4702 varonce172 = var173;
4703 }
4704 var177 = 1;
4705 var178 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var177) /* [] on <var_args:Array[RuntimeVariable]>*/;
4706 var179 = ((val* (*)(val*))(var178->class->vft[COLOR_string__Object__inspect]))(var178) /* inspect on <var178:nullable Object(RuntimeVariable)>*/;
4707 if (varonce180) {
4708 var181 = varonce180;
4709 } else {
4710 var182 = " cannot be null */";
4711 var183 = 18;
4712 var184 = string__NativeString__to_s_with_length(var182, var183);
4713 var181 = var184;
4714 varonce180 = var181;
4715 }
4716 var185 = NEW_array__Array(&type_array__Arraykernel__Object);
4717 { /* var185 = array_instance Array[Object] */
4718 var186 = 4;
4719 var187 = NEW_array__NativeArray(var186, &type_array__NativeArraykernel__Object);
4720 ((struct instance_array__NativeArray*)var187)->values[0] = (val*) var_res;
4721 ((struct instance_array__NativeArray*)var187)->values[1] = (val*) var173;
4722 ((struct instance_array__NativeArray*)var187)->values[2] = (val*) var179;
4723 ((struct instance_array__NativeArray*)var187)->values[3] = (val*) var181;
4724 ((void (*)(val*, val*, long))(var185->class->vft[COLOR_array__Array__with_native]))(var185, var187, var186) /* with_native on <var185:Array[Object]>*/;
4725 CHECK_NEW_array__Array(var185);
4726 }
4727 var188 = ((val* (*)(val*))(var185->class->vft[COLOR_string__Object__to_s]))(var185) /* to_s on <var185:Array[Object]>*/;
4728 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
4729 }
4730 }
4731 } else {
4732 var189 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4733 if (varonce190) {
4734 var191 = varonce190;
4735 } else {
4736 var192 = "!=";
4737 var193 = 2;
4738 var194 = string__NativeString__to_s_with_length(var192, var193);
4739 var191 = var194;
4740 varonce190 = var191;
4741 }
4742 var195 = ((short int (*)(val*, val*))(var189->class->vft[COLOR_kernel__Object___61d_61d]))(var189, var191) /* == on <var189:String>*/;
4743 if (var195){
4744 var196 = NULL;
4745 if (var_res == NULL) {
4746 var197 = 0; /* is null */
4747 } else {
4748 var197 = 1; /* arg is null and recv is not */
4749 }
4750 if (!var197) {
4751 fprintf(stderr, "Runtime error: %s", "Assert failed");
4752 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 383);
4753 exit(1);
4754 }
4755 var198 = 1;
4756 var199 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var198) /* [] on <var_args:Array[RuntimeVariable]>*/;
4757 var200 = ((val* (*)(val*))(var199->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var199) /* mcasttype on <var199:nullable Object(RuntimeVariable)>*/;
4758 /* <var200:MType> isa MNullableType */
4759 cltype202 = type_model__MNullableType.color;
4760 idtype203 = type_model__MNullableType.id;
4761 if(cltype202 >= var200->type->table_size) {
4762 var201 = 0;
4763 } else {
4764 var201 = var200->type->type_table[cltype202] == idtype203;
4765 }
4766 if (var201){
4767 if (varonce204) {
4768 var205 = varonce204;
4769 } else {
4770 var206 = " = (";
4771 var207 = 4;
4772 var208 = string__NativeString__to_s_with_length(var206, var207);
4773 var205 = var208;
4774 varonce204 = var205;
4775 }
4776 var209 = 1;
4777 var210 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var209) /* [] on <var_args:Array[RuntimeVariable]>*/;
4778 if (varonce211) {
4779 var212 = varonce211;
4780 } else {
4781 var213 = " != NULL);";
4782 var214 = 10;
4783 var215 = string__NativeString__to_s_with_length(var213, var214);
4784 var212 = var215;
4785 varonce211 = var212;
4786 }
4787 var216 = NEW_array__Array(&type_array__Arraykernel__Object);
4788 { /* var216 = array_instance Array[Object] */
4789 var217 = 4;
4790 var218 = NEW_array__NativeArray(var217, &type_array__NativeArraykernel__Object);
4791 ((struct instance_array__NativeArray*)var218)->values[0] = (val*) var_res;
4792 ((struct instance_array__NativeArray*)var218)->values[1] = (val*) var205;
4793 ((struct instance_array__NativeArray*)var218)->values[2] = (val*) var210;
4794 ((struct instance_array__NativeArray*)var218)->values[3] = (val*) var212;
4795 ((void (*)(val*, val*, long))(var216->class->vft[COLOR_array__Array__with_native]))(var216, var218, var217) /* with_native on <var216:Array[Object]>*/;
4796 CHECK_NEW_array__Array(var216);
4797 }
4798 var219 = ((val* (*)(val*))(var216->class->vft[COLOR_string__Object__to_s]))(var216) /* to_s on <var216:Array[Object]>*/;
4799 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var219) /* add on <self:GlobalCompilerVisitor>*/;
4800 } else {
4801 var220 = 1;
4802 var221 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var220) /* [] on <var_args:Array[RuntimeVariable]>*/;
4803 var222 = ((val* (*)(val*))(var221->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var221) /* mcasttype on <var221:nullable Object(RuntimeVariable)>*/;
4804 /* <var222:MType> isa MNullType */
4805 cltype224 = type_model__MNullType.color;
4806 idtype225 = type_model__MNullType.id;
4807 if(cltype224 >= var222->type->table_size) {
4808 var223 = 0;
4809 } else {
4810 var223 = var222->type->type_table[cltype224] == idtype225;
4811 }
4812 if (var223){
4813 if (varonce226) {
4814 var227 = varonce226;
4815 } else {
4816 var228 = " = 0; /* is null */";
4817 var229 = 19;
4818 var230 = string__NativeString__to_s_with_length(var228, var229);
4819 var227 = var230;
4820 varonce226 = var227;
4821 }
4822 var231 = NEW_array__Array(&type_array__Arraykernel__Object);
4823 { /* var231 = array_instance Array[Object] */
4824 var232 = 2;
4825 var233 = NEW_array__NativeArray(var232, &type_array__NativeArraykernel__Object);
4826 ((struct instance_array__NativeArray*)var233)->values[0] = (val*) var_res;
4827 ((struct instance_array__NativeArray*)var233)->values[1] = (val*) var227;
4828 ((void (*)(val*, val*, long))(var231->class->vft[COLOR_array__Array__with_native]))(var231, var233, var232) /* with_native on <var231:Array[Object]>*/;
4829 CHECK_NEW_array__Array(var231);
4830 }
4831 var234 = ((val* (*)(val*))(var231->class->vft[COLOR_string__Object__to_s]))(var231) /* to_s on <var231:Array[Object]>*/;
4832 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var234) /* add on <self:GlobalCompilerVisitor>*/;
4833 } else {
4834 if (varonce235) {
4835 var236 = varonce235;
4836 } else {
4837 var237 = " = 1; /* ";
4838 var238 = 9;
4839 var239 = string__NativeString__to_s_with_length(var237, var238);
4840 var236 = var239;
4841 varonce235 = var236;
4842 }
4843 var240 = 1;
4844 var241 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var240) /* [] on <var_args:Array[RuntimeVariable]>*/;
4845 var242 = ((val* (*)(val*))(var241->class->vft[COLOR_string__Object__inspect]))(var241) /* inspect on <var241:nullable Object(RuntimeVariable)>*/;
4846 if (varonce243) {
4847 var244 = varonce243;
4848 } else {
4849 var245 = " cannot be null */";
4850 var246 = 18;
4851 var247 = string__NativeString__to_s_with_length(var245, var246);
4852 var244 = var247;
4853 varonce243 = var244;
4854 }
4855 var248 = NEW_array__Array(&type_array__Arraykernel__Object);
4856 { /* var248 = array_instance Array[Object] */
4857 var249 = 4;
4858 var250 = NEW_array__NativeArray(var249, &type_array__NativeArraykernel__Object);
4859 ((struct instance_array__NativeArray*)var250)->values[0] = (val*) var_res;
4860 ((struct instance_array__NativeArray*)var250)->values[1] = (val*) var236;
4861 ((struct instance_array__NativeArray*)var250)->values[2] = (val*) var242;
4862 ((struct instance_array__NativeArray*)var250)->values[3] = (val*) var244;
4863 ((void (*)(val*, val*, long))(var248->class->vft[COLOR_array__Array__with_native]))(var248, var250, var249) /* with_native on <var248:Array[Object]>*/;
4864 CHECK_NEW_array__Array(var248);
4865 }
4866 var251 = ((val* (*)(val*))(var248->class->vft[COLOR_string__Object__to_s]))(var248) /* to_s on <var248:Array[Object]>*/;
4867 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var251) /* add on <self:GlobalCompilerVisitor>*/;
4868 }
4869 }
4870 } else {
4871 if (varonce252) {
4872 var253 = varonce252;
4873 } else {
4874 var254 = "Reciever is null";
4875 var255 = 16;
4876 var256 = string__NativeString__to_s_with_length(var254, var255);
4877 var253 = var256;
4878 varonce252 = var253;
4879 }
4880 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var253) /* add_abort on <self:GlobalCompilerVisitor>*/;
4881 }
4882 }
4883 if (varonce257) {
4884 var258 = varonce257;
4885 } else {
4886 var259 = "} else";
4887 var260 = 6;
4888 var261 = string__NativeString__to_s_with_length(var259, var260);
4889 var258 = var261;
4890 varonce257 = var258;
4891 }
4892 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var258) /* add on <self:GlobalCompilerVisitor>*/;
4893 } else {
4894 }
4895 var262 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
4896 if (var262){
4897 if (varonce263) {
4898 var264 = varonce263;
4899 } else {
4900 var265 = "{";
4901 var266 = 1;
4902 var267 = string__NativeString__to_s_with_length(var265, var266);
4903 var264 = var267;
4904 varonce263 = var264;
4905 }
4906 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var264) /* add on <self:GlobalCompilerVisitor>*/;
4907 if (varonce268) {
4908 var269 = varonce268;
4909 } else {
4910 var270 = "/*BUG: no live types for ";
4911 var271 = 25;
4912 var272 = string__NativeString__to_s_with_length(var270, var271);
4913 var269 = var272;
4914 varonce268 = var269;
4915 }
4916 var273 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4917 var274 = ((val* (*)(val*))(var273->class->vft[COLOR_string__Object__inspect]))(var273) /* inspect on <var273:nullable Object(RuntimeVariable)>*/;
4918 if (varonce275) {
4919 var276 = varonce275;
4920 } else {
4921 var277 = " . ";
4922 var278 = 3;
4923 var279 = string__NativeString__to_s_with_length(var277, var278);
4924 var276 = var279;
4925 varonce275 = var276;
4926 }
4927 if (varonce280) {
4928 var281 = varonce280;
4929 } else {
4930 var282 = "*/";
4931 var283 = 2;
4932 var284 = string__NativeString__to_s_with_length(var282, var283);
4933 var281 = var284;
4934 varonce280 = var281;
4935 }
4936 var285 = NEW_array__Array(&type_array__Arraykernel__Object);
4937 { /* var285 = array_instance Array[Object] */
4938 var286 = 5;
4939 var287 = NEW_array__NativeArray(var286, &type_array__NativeArraykernel__Object);
4940 ((struct instance_array__NativeArray*)var287)->values[0] = (val*) var269;
4941 ((struct instance_array__NativeArray*)var287)->values[1] = (val*) var274;
4942 ((struct instance_array__NativeArray*)var287)->values[2] = (val*) var276;
4943 ((struct instance_array__NativeArray*)var287)->values[3] = (val*) var_m;
4944 ((struct instance_array__NativeArray*)var287)->values[4] = (val*) var281;
4945 ((void (*)(val*, val*, long))(var285->class->vft[COLOR_array__Array__with_native]))(var285, var287, var286) /* with_native on <var285:Array[Object]>*/;
4946 CHECK_NEW_array__Array(var285);
4947 }
4948 var288 = ((val* (*)(val*))(var285->class->vft[COLOR_string__Object__to_s]))(var285) /* to_s on <var285:Array[Object]>*/;
4949 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var288) /* add on <self:GlobalCompilerVisitor>*/;
4950 var289 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4951 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var289) /* bugtype on <self:GlobalCompilerVisitor>*/;
4952 if (varonce290) {
4953 var291 = varonce290;
4954 } else {
4955 var292 = "}";
4956 var293 = 1;
4957 var294 = string__NativeString__to_s_with_length(var292, var293);
4958 var291 = var294;
4959 varonce290 = var291;
4960 }
4961 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var291) /* add on <self:GlobalCompilerVisitor>*/;
4962 var = var_res;
4963 goto RET_LABEL;
4964 } else {
4965 }
4966 if (varonce295) {
4967 var296 = varonce295;
4968 } else {
4969 var297 = "switch(";
4970 var298 = 7;
4971 var299 = string__NativeString__to_s_with_length(var297, var298);
4972 var296 = var299;
4973 varonce295 = var296;
4974 }
4975 var300 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4976 if (varonce301) {
4977 var302 = varonce301;
4978 } else {
4979 var303 = "->classid) {";
4980 var304 = 12;
4981 var305 = string__NativeString__to_s_with_length(var303, var304);
4982 var302 = var305;
4983 varonce301 = var302;
4984 }
4985 var306 = NEW_array__Array(&type_array__Arraykernel__Object);
4986 { /* var306 = array_instance Array[Object] */
4987 var307 = 3;
4988 var308 = NEW_array__NativeArray(var307, &type_array__NativeArraykernel__Object);
4989 ((struct instance_array__NativeArray*)var308)->values[0] = (val*) var296;
4990 ((struct instance_array__NativeArray*)var308)->values[1] = (val*) var300;
4991 ((struct instance_array__NativeArray*)var308)->values[2] = (val*) var302;
4992 ((void (*)(val*, val*, long))(var306->class->vft[COLOR_array__Array__with_native]))(var306, var308, var307) /* with_native on <var306:Array[Object]>*/;
4993 CHECK_NEW_array__Array(var306);
4994 }
4995 var309 = ((val* (*)(val*))(var306->class->vft[COLOR_string__Object__to_s]))(var306) /* to_s on <var306:Array[Object]>*/;
4996 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var309) /* add on <self:GlobalCompilerVisitor>*/;
4997 var310 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
4998 var_last = var310;
4999 var311 = NULL;
5000 var_defaultpropdef = var311;
5001 var312 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
5002 for(;;) {
5003 var313 = ((short int (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var312) /* is_ok on <var312:Iterator[nullable Object]>*/;
5004 if(!var313) break;
5005 var314 = ((val* (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__item]))(var312) /* item on <var312:Iterator[nullable Object]>*/;
5006 var_t = var314;
5007 var315 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5008 var316 = ((val* (*)(val*))(var315->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var315) /* mainmodule on <var315:AbstractCompiler(GlobalCompiler)>*/;
5009 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>*/;
5010 var_propdef318 = var317;
5011 var320 = ((val* (*)(val*))(var_propdef318->class->vft[COLOR_model__MPropDef__mclassdef]))(var_propdef318) /* mclassdef on <var_propdef318:MMethodDef>*/;
5012 var321 = ((val* (*)(val*))(var320->class->vft[COLOR_model__MClassDef__mclass]))(var320) /* mclass on <var320:MClassDef>*/;
5013 var322 = ((val* (*)(val*))(var321->class->vft[COLOR_model__MClass__name]))(var321) /* name on <var321:MClass>*/;
5014 if (varonce323) {
5015 var324 = varonce323;
5016 } else {
5017 var325 = "Object";
5018 var326 = 6;
5019 var327 = string__NativeString__to_s_with_length(var325, var326);
5020 var324 = var327;
5021 varonce323 = var324;
5022 }
5023 var328 = ((short int (*)(val*, val*))(var322->class->vft[COLOR_kernel__Object___61d_61d]))(var322, var324) /* == on <var322:String>*/;
5024 var_329 = var328;
5025 if (var328){
5026 var330 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MClassType>*/;
5027 if (varonce331) {
5028 var332 = varonce331;
5029 } else {
5030 var333 = "val*";
5031 var334 = 4;
5032 var335 = string__NativeString__to_s_with_length(var333, var334);
5033 var332 = var335;
5034 varonce331 = var332;
5035 }
5036 var336 = ((short int (*)(val*, val*))(var330->class->vft[COLOR_kernel__Object___61d_61d]))(var330, var332) /* == on <var330:String>*/;
5037 var319 = var336;
5038 } else {
5039 var319 = var_329;
5040 }
5041 if (var319){
5042 var_defaultpropdef = var_propdef318;
5043 goto CONTINUE_label;
5044 } else {
5045 }
5046 var339 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5047 var340 = ((short int (*)(val*))(var339->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var339) /* hardening on <var339:AbstractCompiler(GlobalCompiler)>*/;
5048 var341 = !var340;
5049 var_342 = var341;
5050 if (var341){
5051 var343 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
5052 var338 = var343;
5053 } else {
5054 var338 = var_342;
5055 }
5056 var_344 = var338;
5057 if (var338){
5058 var345 = NULL;
5059 if (var_defaultpropdef == NULL) {
5060 var346 = 1; /* is null */
5061 } else {
5062 var346 = 0; /* arg is null but recv is not */
5063 }
5064 var337 = var346;
5065 } else {
5066 var337 = var_344;
5067 }
5068 if (var337){
5069 if (varonce347) {
5070 var348 = varonce347;
5071 } else {
5072 var349 = "default: /* test ";
5073 var350 = 17;
5074 var351 = string__NativeString__to_s_with_length(var349, var350);
5075 var348 = var351;
5076 varonce347 = var348;
5077 }
5078 if (varonce352) {
5079 var353 = varonce352;
5080 } else {
5081 var354 = " */";
5082 var355 = 3;
5083 var356 = string__NativeString__to_s_with_length(var354, var355);
5084 var353 = var356;
5085 varonce352 = var353;
5086 }
5087 var357 = NEW_array__Array(&type_array__Arraykernel__Object);
5088 { /* var357 = array_instance Array[Object] */
5089 var358 = 3;
5090 var359 = NEW_array__NativeArray(var358, &type_array__NativeArraykernel__Object);
5091 ((struct instance_array__NativeArray*)var359)->values[0] = (val*) var348;
5092 ((struct instance_array__NativeArray*)var359)->values[1] = (val*) var_t;
5093 ((struct instance_array__NativeArray*)var359)->values[2] = (val*) var353;
5094 ((void (*)(val*, val*, long))(var357->class->vft[COLOR_array__Array__with_native]))(var357, var359, var358) /* with_native on <var357:Array[Object]>*/;
5095 CHECK_NEW_array__Array(var357);
5096 }
5097 var360 = ((val* (*)(val*))(var357->class->vft[COLOR_string__Object__to_s]))(var357) /* to_s on <var357:Array[Object]>*/;
5098 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var360) /* add on <self:GlobalCompilerVisitor>*/;
5099 } else {
5100 if (varonce361) {
5101 var362 = varonce361;
5102 } else {
5103 var363 = "case ";
5104 var364 = 5;
5105 var365 = string__NativeString__to_s_with_length(var363, var364);
5106 var362 = var365;
5107 varonce361 = var362;
5108 }
5109 var366 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5110 var367 = ((val* (*)(val*, val*))(var366->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var366, var_t) /* classid on <var366:AbstractCompiler(GlobalCompiler)>*/;
5111 if (varonce368) {
5112 var369 = varonce368;
5113 } else {
5114 var370 = ": /* test ";
5115 var371 = 10;
5116 var372 = string__NativeString__to_s_with_length(var370, var371);
5117 var369 = var372;
5118 varonce368 = var369;
5119 }
5120 if (varonce373) {
5121 var374 = varonce373;
5122 } else {
5123 var375 = " */";
5124 var376 = 3;
5125 var377 = string__NativeString__to_s_with_length(var375, var376);
5126 var374 = var377;
5127 varonce373 = var374;
5128 }
5129 var378 = NEW_array__Array(&type_array__Arraykernel__Object);
5130 { /* var378 = array_instance Array[Object] */
5131 var379 = 5;
5132 var380 = NEW_array__NativeArray(var379, &type_array__NativeArraykernel__Object);
5133 ((struct instance_array__NativeArray*)var380)->values[0] = (val*) var362;
5134 ((struct instance_array__NativeArray*)var380)->values[1] = (val*) var367;
5135 ((struct instance_array__NativeArray*)var380)->values[2] = (val*) var369;
5136 ((struct instance_array__NativeArray*)var380)->values[3] = (val*) var_t;
5137 ((struct instance_array__NativeArray*)var380)->values[4] = (val*) var374;
5138 ((void (*)(val*, val*, long))(var378->class->vft[COLOR_array__Array__with_native]))(var378, var380, var379) /* with_native on <var378:Array[Object]>*/;
5139 CHECK_NEW_array__Array(var378);
5140 }
5141 var381 = ((val* (*)(val*))(var378->class->vft[COLOR_string__Object__to_s]))(var378) /* to_s on <var378:Array[Object]>*/;
5142 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var381) /* add on <self:GlobalCompilerVisitor>*/;
5143 }
5144 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>*/;
5145 var_res2383 = var382;
5146 var384 = NULL;
5147 if (var_res == NULL) {
5148 var385 = 0; /* is null */
5149 } else {
5150 var385 = 1; /* arg is null and recv is not */
5151 }
5152 if (var385){
5153 if (var_res2383 == NULL) {
5154 fprintf(stderr, "Runtime error: %s", "Cast failed");
5155 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 419);
5156 exit(1);
5157 }
5158 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2383) /* assign on <self:GlobalCompilerVisitor>*/;
5159 } else {
5160 }
5161 if (varonce386) {
5162 var387 = varonce386;
5163 } else {
5164 var388 = "break;";
5165 var389 = 6;
5166 var390 = string__NativeString__to_s_with_length(var388, var389);
5167 var387 = var390;
5168 varonce386 = var387;
5169 }
5170 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var387) /* add on <self:GlobalCompilerVisitor>*/;
5171 CONTINUE_label: (void)0;
5172 ((void (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__next]))(var312) /* next on <var312:Iterator[nullable Object]>*/;
5173 }
5174 BREAK_label: (void)0;
5175 var391 = NULL;
5176 if (var_defaultpropdef == NULL) {
5177 var392 = 0; /* is null */
5178 } else {
5179 var392 = 1; /* arg is null and recv is not */
5180 }
5181 if (var392){
5182 if (varonce393) {
5183 var394 = varonce393;
5184 } else {
5185 var395 = "default: /* default is Object */";
5186 var396 = 32;
5187 var397 = string__NativeString__to_s_with_length(var395, var396);
5188 var394 = var397;
5189 varonce393 = var394;
5190 }
5191 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var394) /* add on <self:GlobalCompilerVisitor>*/;
5192 var398 = ((val* (*)(val*))(var_defaultpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_defaultpropdef) /* mclassdef on <var_defaultpropdef:nullable MMethodDef(MMethodDef)>*/;
5193 var399 = ((val* (*)(val*))(var398->class->vft[COLOR_model__MClassDef__bound_mtype]))(var398) /* bound_mtype on <var398:MClassDef>*/;
5194 var400 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__call]))(self, var_defaultpropdef, var399, var_args) /* call on <self:GlobalCompilerVisitor>*/;
5195 var_res2401 = var400;
5196 var402 = NULL;
5197 if (var_res == NULL) {
5198 var403 = 0; /* is null */
5199 } else {
5200 var403 = 1; /* arg is null and recv is not */
5201 }
5202 if (var403){
5203 if (var_res2401 == NULL) {
5204 fprintf(stderr, "Runtime error: %s", "Cast failed");
5205 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 425);
5206 exit(1);
5207 }
5208 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2401) /* assign on <self:GlobalCompilerVisitor>*/;
5209 } else {
5210 }
5211 } else {
5212 var404 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5213 var405 = ((short int (*)(val*))(var404->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var404) /* hardening on <var404:AbstractCompiler(GlobalCompiler)>*/;
5214 if (var405){
5215 if (varonce406) {
5216 var407 = varonce406;
5217 } else {
5218 var408 = "default: /* bug */";
5219 var409 = 18;
5220 var410 = string__NativeString__to_s_with_length(var408, var409);
5221 var407 = var410;
5222 varonce406 = var407;
5223 }
5224 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var407) /* add on <self:GlobalCompilerVisitor>*/;
5225 var411 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5226 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var411) /* bugtype on <self:GlobalCompilerVisitor>*/;
5227 } else {
5228 }
5229 }
5230 if (varonce412) {
5231 var413 = varonce412;
5232 } else {
5233 var414 = "}";
5234 var415 = 1;
5235 var416 = string__NativeString__to_s_with_length(var414, var415);
5236 var413 = var416;
5237 varonce412 = var413;
5238 }
5239 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var413) /* add on <self:GlobalCompilerVisitor>*/;
5240 var = var_res;
5241 goto RET_LABEL;
5242 RET_LABEL:;
5243 return var;
5244 }
5245 /* method global_compiler#GlobalCompilerVisitor#send for (self: Object, MMethod, Array[RuntimeVariable]): nullable RuntimeVariable */
5246 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__send(val* self, val* p0, val* p1) {
5247 val* var /* : nullable RuntimeVariable */;
5248 val* var1 /* : nullable RuntimeVariable */;
5249 var1 = global_compiler__GlobalCompilerVisitor__send(self, p0, p1);
5250 var = var1;
5251 RET_LABEL:;
5252 return var;
5253 }
5254 /* method global_compiler#GlobalCompilerVisitor#check_valid_reciever for (self: GlobalCompilerVisitor, MClassType) */
5255 void global_compiler__GlobalCompilerVisitor__check_valid_reciever(val* self, val* p0) {
5256 val* var_recvtype /* var recvtype: MClassType */;
5257 short int var /* : Bool */;
5258 val* var1 /* : AbstractCompiler */;
5259 val* var2 /* : RapidTypeAnalysis */;
5260 val* var3 /* : HashSet[MClassType] */;
5261 short int var4 /* : Bool */;
5262 short int var_ /* var : Bool */;
5263 val* var5 /* : MClass */;
5264 val* var6 /* : String */;
5265 static val* varonce;
5266 val* var7 /* : String */;
5267 char* var8 /* : NativeString */;
5268 long var9 /* : Int */;
5269 val* var10 /* : String */;
5270 short int var11 /* : Bool */;
5271 static val* varonce12;
5272 val* var13 /* : String */;
5273 char* var14 /* : NativeString */;
5274 long var15 /* : Int */;
5275 val* var16 /* : String */;
5276 val* var17 /* : Array[Object] */;
5277 long var18 /* : Int */;
5278 val* var19 /* : NativeArray[Object] */;
5279 val* var20 /* : String */;
5280 var_recvtype = p0;
5281 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5282 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var1) /* runtime_type_analysis on <var1:AbstractCompiler(GlobalCompiler)>*/;
5283 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var2) /* live_types on <var2:RapidTypeAnalysis>*/;
5284 var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_recvtype) /* has on <var3:HashSet[MClassType]>*/;
5285 var_ = var4;
5286 if (var4){
5287 var = var_;
5288 } else {
5289 var5 = ((val* (*)(val*))(var_recvtype->class->vft[COLOR_model__MClassType__mclass]))(var_recvtype) /* mclass on <var_recvtype:MClassType>*/;
5290 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MClass__name]))(var5) /* name on <var5:MClass>*/;
5291 if (varonce) {
5292 var7 = varonce;
5293 } else {
5294 var8 = "Object";
5295 var9 = 6;
5296 var10 = string__NativeString__to_s_with_length(var8, var9);
5297 var7 = var10;
5298 varonce = var7;
5299 }
5300 var11 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_kernel__Object___61d_61d]))(var6, var7) /* == on <var6:String>*/;
5301 var = var11;
5302 }
5303 if (var){
5304 goto RET_LABEL;
5305 } else {
5306 }
5307 if (varonce12) {
5308 var13 = varonce12;
5309 } else {
5310 var14 = " is not a live type";
5311 var15 = 19;
5312 var16 = string__NativeString__to_s_with_length(var14, var15);
5313 var13 = var16;
5314 varonce12 = var13;
5315 }
5316 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
5317 { /* var17 = array_instance Array[Object] */
5318 var18 = 2;
5319 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
5320 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var_recvtype;
5321 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var13;
5322 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
5323 CHECK_NEW_array__Array(var17);
5324 }
5325 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
5326 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var20) /* print on <self:GlobalCompilerVisitor>*/;
5327 fprintf(stderr, "Runtime error: %s", "Aborted");
5328 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 438);
5329 exit(1);
5330 RET_LABEL:;
5331 }
5332 /* method global_compiler#GlobalCompilerVisitor#check_valid_reciever for (self: Object, MClassType) */
5333 void VIRTUAL_global_compiler__GlobalCompilerVisitor__check_valid_reciever(val* self, val* p0) {
5334 global_compiler__GlobalCompilerVisitor__check_valid_reciever(self, p0);
5335 RET_LABEL:;
5336 }
5337 /* method global_compiler#GlobalCompilerVisitor#get_recvtype for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): MClassType */
5338 val* global_compiler__GlobalCompilerVisitor__get_recvtype(val* self, val* p0, val* p1, val* p2) {
5339 val* var /* : MClassType */;
5340 val* var_m /* var m: MMethodDef */;
5341 val* var_recvtype /* var recvtype: MClassType */;
5342 val* var_args /* var args: Array[RuntimeVariable] */;
5343 short int var1 /* : Bool */;
5344 val* var2 /* : MClassDef */;
5345 val* var3 /* : MClass */;
5346 val* var4 /* : String */;
5347 static val* varonce;
5348 val* var5 /* : String */;
5349 char* var6 /* : NativeString */;
5350 long var7 /* : Int */;
5351 val* var8 /* : String */;
5352 short int var9 /* : Bool */;
5353 short int var_ /* var : Bool */;
5354 val* var10 /* : String */;
5355 static val* varonce11;
5356 val* var12 /* : String */;
5357 char* var13 /* : NativeString */;
5358 long var14 /* : Int */;
5359 val* var15 /* : String */;
5360 short int var16 /* : Bool */;
5361 val* var17 /* : MClassDef */;
5362 val* var18 /* : MClassType */;
5363 var_m = p0;
5364 var_recvtype = p1;
5365 var_args = p2;
5366 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__check_valid_reciever]))(self, var_recvtype) /* check_valid_reciever on <self:GlobalCompilerVisitor>*/;
5367 var2 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
5368 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__MClassDef__mclass]))(var2) /* mclass on <var2:MClassDef>*/;
5369 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MClass__name]))(var3) /* name on <var3:MClass>*/;
5370 if (varonce) {
5371 var5 = varonce;
5372 } else {
5373 var6 = "Object";
5374 var7 = 6;
5375 var8 = string__NativeString__to_s_with_length(var6, var7);
5376 var5 = var8;
5377 varonce = var5;
5378 }
5379 var9 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_kernel__Object___61d_61d]))(var4, var5) /* == on <var4:String>*/;
5380 var_ = var9;
5381 if (var9){
5382 var10 = ((val* (*)(val*))(var_recvtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_recvtype) /* ctype on <var_recvtype:MClassType>*/;
5383 if (varonce11) {
5384 var12 = varonce11;
5385 } else {
5386 var13 = "val*";
5387 var14 = 4;
5388 var15 = string__NativeString__to_s_with_length(var13, var14);
5389 var12 = var15;
5390 varonce11 = var12;
5391 }
5392 var16 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___61d_61d]))(var10, var12) /* == on <var10:String>*/;
5393 var1 = var16;
5394 } else {
5395 var1 = var_;
5396 }
5397 if (var1){
5398 var17 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
5399 var18 = ((val* (*)(val*))(var17->class->vft[COLOR_model__MClassDef__bound_mtype]))(var17) /* bound_mtype on <var17:MClassDef>*/;
5400 var_recvtype = var18;
5401 } else {
5402 }
5403 var = var_recvtype;
5404 goto RET_LABEL;
5405 RET_LABEL:;
5406 return var;
5407 }
5408 /* method global_compiler#GlobalCompilerVisitor#get_recvtype for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): MClassType */
5409 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__get_recvtype(val* self, val* p0, val* p1, val* p2) {
5410 val* var /* : MClassType */;
5411 val* var1 /* : MClassType */;
5412 var1 = global_compiler__GlobalCompilerVisitor__get_recvtype(self, p0, p1, p2);
5413 var = var1;
5414 RET_LABEL:;
5415 return var;
5416 }
5417 /* method global_compiler#GlobalCompilerVisitor#get_recv for (self: GlobalCompilerVisitor, MClassType, Array[RuntimeVariable]): RuntimeVariable */
5418 val* global_compiler__GlobalCompilerVisitor__get_recv(val* self, val* p0, val* p1) {
5419 val* var /* : RuntimeVariable */;
5420 val* var_recvtype /* var recvtype: MClassType */;
5421 val* var_args /* var args: Array[RuntimeVariable] */;
5422 val* var1 /* : nullable Object */;
5423 val* var2 /* : RuntimeVariable */;
5424 val* var3 /* : RuntimeVariable */;
5425 var_recvtype = p0;
5426 var_args = p1;
5427 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5428 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var1, var_recvtype) /* autobox on <self:GlobalCompilerVisitor>*/;
5429 var3 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var2, var_recvtype) /* autoadapt on <self:GlobalCompilerVisitor>*/;
5430 var = var3;
5431 goto RET_LABEL;
5432 RET_LABEL:;
5433 return var;
5434 }
5435 /* method global_compiler#GlobalCompilerVisitor#get_recv for (self: Object, MClassType, Array[RuntimeVariable]): RuntimeVariable */
5436 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__get_recv(val* self, val* p0, val* p1) {
5437 val* var /* : RuntimeVariable */;
5438 val* var1 /* : RuntimeVariable */;
5439 var1 = global_compiler__GlobalCompilerVisitor__get_recv(self, p0, p1);
5440 var = var1;
5441 RET_LABEL:;
5442 return var;
5443 }
5444 /* method global_compiler#GlobalCompilerVisitor#finalize_call for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5445 val* global_compiler__GlobalCompilerVisitor__finalize_call(val* self, val* p0, val* p1, val* p2) {
5446 val* var /* : nullable RuntimeVariable */;
5447 val* var_m /* var m: MMethodDef */;
5448 val* var_recvtype /* var recvtype: MClassType */;
5449 val* var_args /* var args: Array[RuntimeVariable] */;
5450 long var1 /* : Int */;
5451 val* var2 /* : nullable MSignature */;
5452 long var3 /* : Int */;
5453 long var4 /* : Int */;
5454 long var5 /* : Int */;
5455 long var7 /* : Int */;
5456 short int var8 /* : Bool */;
5457 short int var10 /* : Bool */;
5458 short int var11 /* : Bool */;
5459 static val* varonce;
5460 val* var12 /* : String */;
5461 char* var13 /* : NativeString */;
5462 long var14 /* : Int */;
5463 val* var15 /* : String */;
5464 static val* varonce16;
5465 val* var17 /* : String */;
5466 char* var18 /* : NativeString */;
5467 long var19 /* : Int */;
5468 val* var20 /* : String */;
5469 long var21 /* : Int */;
5470 static val* varonce22;
5471 val* var23 /* : String */;
5472 char* var24 /* : NativeString */;
5473 long var25 /* : Int */;
5474 val* var26 /* : String */;
5475 val* var27 /* : Array[Object] */;
5476 long var28 /* : Int */;
5477 val* var29 /* : NativeArray[Object] */;
5478 val* var30 /* : Object */;
5479 val* var31 /* : String */;
5480 static val* varonce32;
5481 val* var33 /* : String */;
5482 char* var34 /* : NativeString */;
5483 long var35 /* : Int */;
5484 val* var36 /* : String */;
5485 static val* varonce37;
5486 val* var38 /* : String */;
5487 char* var39 /* : NativeString */;
5488 long var40 /* : Int */;
5489 val* var41 /* : String */;
5490 long var42 /* : Int */;
5491 static val* varonce43;
5492 val* var44 /* : String */;
5493 char* var45 /* : NativeString */;
5494 long var46 /* : Int */;
5495 val* var47 /* : String */;
5496 val* var48 /* : Array[Object] */;
5497 long var49 /* : Int */;
5498 val* var50 /* : NativeArray[Object] */;
5499 val* var51 /* : Object */;
5500 val* var52 /* : String */;
5501 val* var53 /* : null */;
5502 val* var54 /* : CustomizedRuntimeFunction */;
5503 val* var_rm /* var rm: CustomizedRuntimeFunction */;
5504 val* var55 /* : nullable RuntimeVariable */;
5505 var_m = p0;
5506 var_recvtype = p1;
5507 var_args = p2;
5508 var1 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5509 var2 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
5510 if (var2 == NULL) {
5511 fprintf(stderr, "Runtime error: %s", "Reciever is null");
5512 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 464);
5513 exit(1);
5514 } else {
5515 var3 = ((long (*)(val*))(var2->class->vft[COLOR_model__MSignature__arity]))(var2) /* arity on <var2:nullable MSignature>*/;
5516 }
5517 var4 = 1;
5518 { /* Inline kernel#Int#+ (var3,var4) */
5519 var7 = var3 + var4;
5520 var5 = var7;
5521 goto RET_LABEL6;
5522 RET_LABEL6:(void)0;
5523 }
5524 { /* Inline kernel#Int#!= (var1,var5) */
5525 var10 = var1 == var5;
5526 var11 = !var10;
5527 var8 = var11;
5528 goto RET_LABEL9;
5529 RET_LABEL9:(void)0;
5530 }
5531 if (var8){
5532 if (varonce) {
5533 var12 = varonce;
5534 } else {
5535 var13 = "printf(\"NOT YET IMPLEMENTED: Invalid arity for ";
5536 var14 = 47;
5537 var15 = string__NativeString__to_s_with_length(var13, var14);
5538 var12 = var15;
5539 varonce = var12;
5540 }
5541 if (varonce16) {
5542 var17 = varonce16;
5543 } else {
5544 var18 = ". ";
5545 var19 = 2;
5546 var20 = string__NativeString__to_s_with_length(var18, var19);
5547 var17 = var20;
5548 varonce16 = var17;
5549 }
5550 var21 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5551 if (varonce22) {
5552 var23 = varonce22;
5553 } else {
5554 var24 = " arguments given.\\n\"); exit(1);";
5555 var25 = 31;
5556 var26 = string__NativeString__to_s_with_length(var24, var25);
5557 var23 = var26;
5558 varonce22 = var23;
5559 }
5560 var27 = NEW_array__Array(&type_array__Arraykernel__Object);
5561 { /* var27 = array_instance Array[Object] */
5562 var28 = 5;
5563 var29 = NEW_array__NativeArray(var28, &type_array__NativeArraykernel__Object);
5564 ((struct instance_array__NativeArray*)var29)->values[0] = (val*) var12;
5565 ((struct instance_array__NativeArray*)var29)->values[1] = (val*) var_m;
5566 ((struct instance_array__NativeArray*)var29)->values[2] = (val*) var17;
5567 var30 = BOX_kernel__Int(var21); /* autobox from Int to Object */
5568 ((struct instance_array__NativeArray*)var29)->values[3] = (val*) var30;
5569 ((struct instance_array__NativeArray*)var29)->values[4] = (val*) var23;
5570 ((void (*)(val*, val*, long))(var27->class->vft[COLOR_array__Array__with_native]))(var27, var29, var28) /* with_native on <var27:Array[Object]>*/;
5571 CHECK_NEW_array__Array(var27);
5572 }
5573 var31 = ((val* (*)(val*))(var27->class->vft[COLOR_string__Object__to_s]))(var27) /* to_s on <var27:Array[Object]>*/;
5574 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var31) /* add on <self:GlobalCompilerVisitor>*/;
5575 if (varonce32) {
5576 var33 = varonce32;
5577 } else {
5578 var34 = "NOT YET IMPLEMENTED: Invalid arity for ";
5579 var35 = 39;
5580 var36 = string__NativeString__to_s_with_length(var34, var35);
5581 var33 = var36;
5582 varonce32 = var33;
5583 }
5584 if (varonce37) {
5585 var38 = varonce37;
5586 } else {
5587 var39 = ". ";
5588 var40 = 2;
5589 var41 = string__NativeString__to_s_with_length(var39, var40);
5590 var38 = var41;
5591 varonce37 = var38;
5592 }
5593 var42 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5594 if (varonce43) {
5595 var44 = varonce43;
5596 } else {
5597 var45 = " arguments given.";
5598 var46 = 17;
5599 var47 = string__NativeString__to_s_with_length(var45, var46);
5600 var44 = var47;
5601 varonce43 = var44;
5602 }
5603 var48 = NEW_array__Array(&type_array__Arraykernel__Object);
5604 { /* var48 = array_instance Array[Object] */
5605 var49 = 5;
5606 var50 = NEW_array__NativeArray(var49, &type_array__NativeArraykernel__Object);
5607 ((struct instance_array__NativeArray*)var50)->values[0] = (val*) var33;
5608 ((struct instance_array__NativeArray*)var50)->values[1] = (val*) var_m;
5609 ((struct instance_array__NativeArray*)var50)->values[2] = (val*) var38;
5610 var51 = BOX_kernel__Int(var42); /* autobox from Int to Object */
5611 ((struct instance_array__NativeArray*)var50)->values[3] = (val*) var51;
5612 ((struct instance_array__NativeArray*)var50)->values[4] = (val*) var44;
5613 ((void (*)(val*, val*, long))(var48->class->vft[COLOR_array__Array__with_native]))(var48, var50, var49) /* with_native on <var48:Array[Object]>*/;
5614 CHECK_NEW_array__Array(var48);
5615 }
5616 var52 = ((val* (*)(val*))(var48->class->vft[COLOR_string__Object__to_s]))(var48) /* to_s on <var48:Array[Object]>*/;
5617 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var52) /* debug on <self:GlobalCompilerVisitor>*/;
5618 var53 = NULL;
5619 var = var53;
5620 goto RET_LABEL;
5621 } else {
5622 }
5623 var54 = NEW_global_compiler__CustomizedRuntimeFunction(&type_global_compiler__CustomizedRuntimeFunction);
5624 ((void (*)(val*, val*, val*))(var54->class->vft[COLOR_global_compiler__CustomizedRuntimeFunction__init]))(var54, var_m, var_recvtype) /* init on <var54:CustomizedRuntimeFunction>*/;
5625 CHECK_NEW_global_compiler__CustomizedRuntimeFunction(var54);
5626 var_rm = var54;
5627 var55 = ((val* (*)(val*, val*, val*))(var_rm->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__call]))(var_rm, self, var_args) /* call on <var_rm:CustomizedRuntimeFunction>*/;
5628 var = var55;
5629 goto RET_LABEL;
5630 RET_LABEL:;
5631 return var;
5632 }
5633 /* method global_compiler#GlobalCompilerVisitor#finalize_call for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5634 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__finalize_call(val* self, val* p0, val* p1, val* p2) {
5635 val* var /* : nullable RuntimeVariable */;
5636 val* var1 /* : nullable RuntimeVariable */;
5637 var1 = global_compiler__GlobalCompilerVisitor__finalize_call(self, p0, p1, p2);
5638 var = var1;
5639 RET_LABEL:;
5640 return var;
5641 }
5642 /* method global_compiler#GlobalCompilerVisitor#call for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5643 val* global_compiler__GlobalCompilerVisitor__call(val* self, val* p0, val* p1, val* p2) {
5644 val* var /* : nullable RuntimeVariable */;
5645 val* var_m /* var m: MMethodDef */;
5646 val* var_recvtype /* var recvtype: MClassType */;
5647 val* var_args /* var args: Array[RuntimeVariable] */;
5648 val* var1 /* : MClassType */;
5649 val* var_recv_type /* var recv_type: MClassType */;
5650 val* var2 /* : RuntimeVariable */;
5651 val* var_recv /* var recv: RuntimeVariable */;
5652 val* var3 /* : Array[nullable Object] */;
5653 val* var_new_args /* var new_args: Array[RuntimeVariable] */;
5654 val* var4 /* : nullable MSignature */;
5655 val* var5 /* : nullable RuntimeVariable */;
5656 var_m = p0;
5657 var_recvtype = p1;
5658 var_args = p2;
5659 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>*/;
5660 var_recv_type = var1;
5661 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>*/;
5662 var_recv = var2;
5663 var3 = ((val* (*)(val*))(var_args->class->vft[COLOR_array__Collection__to_a]))(var_args) /* to_a on <var_args:Array[RuntimeVariable]>*/;
5664 var_new_args = var3;
5665 var4 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
5666 if (var4 == NULL) {
5667 fprintf(stderr, "Runtime error: %s", "Cast failed");
5668 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 479);
5669 exit(1);
5670 }
5671 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__varargize]))(self, var_m, var4, var_new_args) /* varargize on <self:GlobalCompilerVisitor>*/;
5672 ((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]>*/;
5673 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>*/;
5674 var = var5;
5675 goto RET_LABEL;
5676 RET_LABEL:;
5677 return var;
5678 }
5679 /* method global_compiler#GlobalCompilerVisitor#call for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5680 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__call(val* self, val* p0, val* p1, val* p2) {
5681 val* var /* : nullable RuntimeVariable */;
5682 val* var1 /* : nullable RuntimeVariable */;
5683 var1 = global_compiler__GlobalCompilerVisitor__call(self, p0, p1, p2);
5684 var = var1;
5685 RET_LABEL:;
5686 return var;
5687 }
5688 /* method global_compiler#GlobalCompilerVisitor#call_without_varargize for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5689 val* global_compiler__GlobalCompilerVisitor__call_without_varargize(val* self, val* p0, val* p1, val* p2) {
5690 val* var /* : nullable RuntimeVariable */;
5691 val* var_m /* var m: MMethodDef */;
5692 val* var_recvtype /* var recvtype: MClassType */;
5693 val* var_args /* var args: Array[RuntimeVariable] */;
5694 val* var1 /* : MClassType */;
5695 val* var_recv_type /* var recv_type: MClassType */;
5696 val* var2 /* : RuntimeVariable */;
5697 val* var_recv /* var recv: RuntimeVariable */;
5698 val* var3 /* : Array[nullable Object] */;
5699 val* var_new_args /* var new_args: Array[RuntimeVariable] */;
5700 val* var4 /* : nullable RuntimeVariable */;
5701 var_m = p0;
5702 var_recvtype = p1;
5703 var_args = p2;
5704 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>*/;
5705 var_recv_type = var1;
5706 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>*/;
5707 var_recv = var2;
5708 var3 = ((val* (*)(val*))(var_args->class->vft[COLOR_array__Collection__to_a]))(var_args) /* to_a on <var_args:Array[RuntimeVariable]>*/;
5709 var_new_args = var3;
5710 ((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]>*/;
5711 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>*/;
5712 var = var4;
5713 goto RET_LABEL;
5714 RET_LABEL:;
5715 return var;
5716 }
5717 /* method global_compiler#GlobalCompilerVisitor#call_without_varargize for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5718 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__call_without_varargize(val* self, val* p0, val* p1, val* p2) {
5719 val* var /* : nullable RuntimeVariable */;
5720 val* var1 /* : nullable RuntimeVariable */;
5721 var1 = global_compiler__GlobalCompilerVisitor__call_without_varargize(self, p0, p1, p2);
5722 var = var1;
5723 RET_LABEL:;
5724 return var;
5725 }
5726 /* method global_compiler#GlobalCompilerVisitor#supercall for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5727 val* global_compiler__GlobalCompilerVisitor__supercall(val* self, val* p0, val* p1, val* p2) {
5728 val* var /* : nullable RuntimeVariable */;
5729 val* var_m /* var m: MMethodDef */;
5730 val* var_recvtype /* var recvtype: MClassType */;
5731 val* var_args /* var args: Array[RuntimeVariable] */;
5732 val* var1 /* : nullable Object */;
5733 val* var2 /* : Array[MClassType] */;
5734 val* var_types /* var types: Array[MClassType] */;
5735 val* var3 /* : MProperty */;
5736 val* var4 /* : MPropDef */;
5737 val* var5 /* : nullable MSignature */;
5738 val* var6 /* : nullable MType */;
5739 val* var_ret /* var ret: nullable MType */;
5740 val* var7 /* : null */;
5741 short int var8 /* : Bool */;
5742 val* var9 /* : null */;
5743 val* var_res /* var res: nullable RuntimeVariable */;
5744 val* var10 /* : nullable Object */;
5745 val* var11 /* : MType */;
5746 val* var12 /* : RuntimeVariable */;
5747 static val* varonce;
5748 val* var13 /* : String */;
5749 char* var14 /* : NativeString */;
5750 long var15 /* : Int */;
5751 val* var16 /* : String */;
5752 static val* varonce17;
5753 val* var18 /* : String */;
5754 char* var19 /* : NativeString */;
5755 long var20 /* : Int */;
5756 val* var21 /* : String */;
5757 val* var22 /* : nullable Object */;
5758 val* var23 /* : String */;
5759 static val* varonce24;
5760 val* var25 /* : String */;
5761 char* var26 /* : NativeString */;
5762 long var27 /* : Int */;
5763 val* var28 /* : String */;
5764 val* var29 /* : Array[Object] */;
5765 long var30 /* : Int */;
5766 val* var31 /* : NativeArray[Object] */;
5767 val* var32 /* : String */;
5768 val* var33 /* : nullable Object */;
5769 val* var34 /* : MType */;
5770 val* var35 /* : String */;
5771 static val* varonce36;
5772 val* var37 /* : String */;
5773 char* var38 /* : NativeString */;
5774 long var39 /* : Int */;
5775 val* var40 /* : String */;
5776 short int var41 /* : Bool */;
5777 val* var42 /* : nullable Object */;
5778 val* var43 /* : MType */;
5779 short int var44 /* : Bool */;
5780 int cltype;
5781 int idtype;
5782 const char* var_class_name;
5783 val* var_mclasstype /* var mclasstype: MClassType */;
5784 val* var45 /* : AbstractCompiler */;
5785 val* var46 /* : RapidTypeAnalysis */;
5786 val* var47 /* : HashSet[MClassType] */;
5787 short int var48 /* : Bool */;
5788 short int var49 /* : Bool */;
5789 static val* varonce50;
5790 val* var51 /* : String */;
5791 char* var52 /* : NativeString */;
5792 long var53 /* : Int */;
5793 val* var54 /* : String */;
5794 static val* varonce55;
5795 val* var56 /* : String */;
5796 char* var57 /* : NativeString */;
5797 long var58 /* : Int */;
5798 val* var59 /* : String */;
5799 val* var60 /* : Array[Object] */;
5800 long var61 /* : Int */;
5801 val* var62 /* : NativeArray[Object] */;
5802 val* var63 /* : String */;
5803 val* var64 /* : AbstractCompiler */;
5804 val* var65 /* : MModule */;
5805 val* var66 /* : MPropDef */;
5806 val* var_propdef /* var propdef: MMethodDef */;
5807 val* var67 /* : nullable RuntimeVariable */;
5808 val* var_res2 /* var res2: nullable RuntimeVariable */;
5809 val* var68 /* : null */;
5810 short int var69 /* : Bool */;
5811 short int var70 /* : Bool */;
5812 static val* varonce71;
5813 val* var72 /* : String */;
5814 char* var73 /* : NativeString */;
5815 long var74 /* : Int */;
5816 val* var75 /* : String */;
5817 static val* varonce76;
5818 val* var77 /* : String */;
5819 char* var78 /* : NativeString */;
5820 long var79 /* : Int */;
5821 val* var80 /* : String */;
5822 val* var81 /* : nullable Object */;
5823 val* var82 /* : String */;
5824 static val* varonce83;
5825 val* var84 /* : String */;
5826 char* var85 /* : NativeString */;
5827 long var86 /* : Int */;
5828 val* var87 /* : String */;
5829 static val* varonce88;
5830 val* var89 /* : String */;
5831 char* var90 /* : NativeString */;
5832 long var91 /* : Int */;
5833 val* var92 /* : String */;
5834 val* var93 /* : Array[Object] */;
5835 long var94 /* : Int */;
5836 val* var95 /* : NativeArray[Object] */;
5837 val* var96 /* : String */;
5838 val* var97 /* : nullable Object */;
5839 static val* varonce98;
5840 val* var99 /* : String */;
5841 char* var100 /* : NativeString */;
5842 long var101 /* : Int */;
5843 val* var102 /* : String */;
5844 static val* varonce103;
5845 val* var104 /* : String */;
5846 char* var105 /* : NativeString */;
5847 long var106 /* : Int */;
5848 val* var107 /* : String */;
5849 val* var108 /* : nullable Object */;
5850 static val* varonce109;
5851 val* var110 /* : String */;
5852 char* var111 /* : NativeString */;
5853 long var112 /* : Int */;
5854 val* var113 /* : String */;
5855 val* var114 /* : Array[Object] */;
5856 long var115 /* : Int */;
5857 val* var116 /* : NativeArray[Object] */;
5858 val* var117 /* : String */;
5859 val* var118 /* : nullable Object */;
5860 val* var_last /* var last: MClassType */;
5861 val* var119 /* : Iterator[nullable Object] */;
5862 short int var120 /* : Bool */;
5863 val* var121 /* : nullable Object */;
5864 val* var_t /* var t: MClassType */;
5865 val* var122 /* : AbstractCompiler */;
5866 val* var123 /* : MModule */;
5867 val* var124 /* : MPropDef */;
5868 val* var_propdef125 /* var propdef: MMethodDef */;
5869 short int var126 /* : Bool */;
5870 val* var127 /* : AbstractCompiler */;
5871 short int var128 /* : Bool */;
5872 short int var129 /* : Bool */;
5873 short int var_ /* var : Bool */;
5874 short int var130 /* : Bool */;
5875 static val* varonce131;
5876 val* var132 /* : String */;
5877 char* var133 /* : NativeString */;
5878 long var134 /* : Int */;
5879 val* var135 /* : String */;
5880 static val* varonce136;
5881 val* var137 /* : String */;
5882 char* var138 /* : NativeString */;
5883 long var139 /* : Int */;
5884 val* var140 /* : String */;
5885 val* var141 /* : Array[Object] */;
5886 long var142 /* : Int */;
5887 val* var143 /* : NativeArray[Object] */;
5888 val* var144 /* : String */;
5889 static val* varonce145;
5890 val* var146 /* : String */;
5891 char* var147 /* : NativeString */;
5892 long var148 /* : Int */;
5893 val* var149 /* : String */;
5894 val* var150 /* : AbstractCompiler */;
5895 val* var151 /* : String */;
5896 static val* varonce152;
5897 val* var153 /* : String */;
5898 char* var154 /* : NativeString */;
5899 long var155 /* : Int */;
5900 val* var156 /* : String */;
5901 static val* varonce157;
5902 val* var158 /* : String */;
5903 char* var159 /* : NativeString */;
5904 long var160 /* : Int */;
5905 val* var161 /* : String */;
5906 val* var162 /* : Array[Object] */;
5907 long var163 /* : Int */;
5908 val* var164 /* : NativeArray[Object] */;
5909 val* var165 /* : String */;
5910 val* var166 /* : nullable RuntimeVariable */;
5911 val* var_res2167 /* var res2: nullable RuntimeVariable */;
5912 val* var168 /* : null */;
5913 short int var169 /* : Bool */;
5914 static val* varonce170;
5915 val* var171 /* : String */;
5916 char* var172 /* : NativeString */;
5917 long var173 /* : Int */;
5918 val* var174 /* : String */;
5919 val* var175 /* : AbstractCompiler */;
5920 short int var176 /* : Bool */;
5921 static val* varonce177;
5922 val* var178 /* : String */;
5923 char* var179 /* : NativeString */;
5924 long var180 /* : Int */;
5925 val* var181 /* : String */;
5926 val* var182 /* : nullable Object */;
5927 static val* varonce183;
5928 val* var184 /* : String */;
5929 char* var185 /* : NativeString */;
5930 long var186 /* : Int */;
5931 val* var187 /* : String */;
5932 var_m = p0;
5933 var_recvtype = p1;
5934 var_args = p2;
5935 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5936 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var1) /* collect_types on <self:GlobalCompilerVisitor>*/;
5937 var_types = var2;
5938 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mproperty]))(var_m) /* mproperty on <var_m:MMethodDef>*/;
5939 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MProperty__intro]))(var3) /* intro on <var3:MProperty(MMethod)>*/;
5940 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_model__MMethodDef__msignature]))(var4) /* msignature on <var4:MPropDef(MMethodDef)>*/;
5941 if (var5 == NULL) {
5942 fprintf(stderr, "Runtime error: %s", "Reciever is null");
5943 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 500);
5944 exit(1);
5945 } else {
5946 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MSignature__return_mtype]))(var5) /* return_mtype on <var5:nullable MSignature>*/;
5947 }
5948 var_ret = var6;
5949 var7 = NULL;
5950 if (var_ret == NULL) {
5951 var8 = 1; /* is null */
5952 } else {
5953 var8 = 0; /* arg is null but recv is not */
5954 }
5955 if (var8){
5956 var9 = NULL;
5957 var_res = var9;
5958 } else {
5959 var10 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5960 var11 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var10) /* resolve_for on <self:GlobalCompilerVisitor>*/;
5961 var_ret = var11;
5962 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
5963 var_res = var12;
5964 }
5965 if (varonce) {
5966 var13 = varonce;
5967 } else {
5968 var14 = "/* super ";
5969 var15 = 9;
5970 var16 = string__NativeString__to_s_with_length(var14, var15);
5971 var13 = var16;
5972 varonce = var13;
5973 }
5974 if (varonce17) {
5975 var18 = varonce17;
5976 } else {
5977 var19 = " on ";
5978 var20 = 4;
5979 var21 = string__NativeString__to_s_with_length(var19, var20);
5980 var18 = var21;
5981 varonce17 = var18;
5982 }
5983 var22 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5984 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__inspect]))(var22) /* inspect on <var22:nullable Object(RuntimeVariable)>*/;
5985 if (varonce24) {
5986 var25 = varonce24;
5987 } else {
5988 var26 = " */";
5989 var27 = 3;
5990 var28 = string__NativeString__to_s_with_length(var26, var27);
5991 var25 = var28;
5992 varonce24 = var25;
5993 }
5994 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
5995 { /* var29 = array_instance Array[Object] */
5996 var30 = 5;
5997 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
5998 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var13;
5999 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var_m;
6000 ((struct instance_array__NativeArray*)var31)->values[2] = (val*) var18;
6001 ((struct instance_array__NativeArray*)var31)->values[3] = (val*) var23;
6002 ((struct instance_array__NativeArray*)var31)->values[4] = (val*) var25;
6003 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
6004 CHECK_NEW_array__Array(var29);
6005 }
6006 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
6007 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var32) /* add on <self:GlobalCompilerVisitor>*/;
6008 var33 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6009 var34 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var33) /* mtype on <var33:nullable Object(RuntimeVariable)>*/;
6010 var35 = ((val* (*)(val*))(var34->class->vft[COLOR_abstract_compiler__MType__ctype]))(var34) /* ctype on <var34:MType>*/;
6011 if (varonce36) {
6012 var37 = varonce36;
6013 } else {
6014 var38 = "val*";
6015 var39 = 4;
6016 var40 = string__NativeString__to_s_with_length(var38, var39);
6017 var37 = var40;
6018 varonce36 = var37;
6019 }
6020 var41 = ((short int (*)(val*, val*))(var35->class->vft[COLOR_kernel__Object___33d_61d]))(var35, var37) /* != on <var35:String>*/;
6021 if (var41){
6022 var42 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6023 var43 = ((val* (*)(val*))(var42->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var42) /* mtype on <var42:nullable Object(RuntimeVariable)>*/;
6024 /* <var43:MType> isa MClassType */
6025 cltype = type_model__MClassType.color;
6026 idtype = type_model__MClassType.id;
6027 if(cltype >= var43->type->table_size) {
6028 var44 = 0;
6029 } else {
6030 var44 = var43->type->type_table[cltype] == idtype;
6031 }
6032 if (!var44) {
6033 var_class_name = var43 == NULL ? "null" : var43->type->name;
6034 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
6035 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 510);
6036 exit(1);
6037 }
6038 var_mclasstype = var43;
6039 var45 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6040 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var45) /* runtime_type_analysis on <var45:AbstractCompiler(GlobalCompiler)>*/;
6041 var47 = ((val* (*)(val*))(var46->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var46) /* live_types on <var46:RapidTypeAnalysis>*/;
6042 var48 = ((short int (*)(val*, val*))(var47->class->vft[COLOR_abstract_collection__Collection__has]))(var47, var_mclasstype) /* has on <var47:HashSet[MClassType]>*/;
6043 var49 = !var48;
6044 if (var49){
6045 if (varonce50) {
6046 var51 = varonce50;
6047 } else {
6048 var52 = "/* skip, no method ";
6049 var53 = 19;
6050 var54 = string__NativeString__to_s_with_length(var52, var53);
6051 var51 = var54;
6052 varonce50 = var51;
6053 }
6054 if (varonce55) {
6055 var56 = varonce55;
6056 } else {
6057 var57 = " */";
6058 var58 = 3;
6059 var59 = string__NativeString__to_s_with_length(var57, var58);
6060 var56 = var59;
6061 varonce55 = var56;
6062 }
6063 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
6064 { /* var60 = array_instance Array[Object] */
6065 var61 = 3;
6066 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
6067 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var51;
6068 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_m;
6069 ((struct instance_array__NativeArray*)var62)->values[2] = (val*) var56;
6070 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
6071 CHECK_NEW_array__Array(var60);
6072 }
6073 var63 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
6074 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var63) /* add on <self:GlobalCompilerVisitor>*/;
6075 var = var_res;
6076 goto RET_LABEL;
6077 } else {
6078 }
6079 var64 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6080 var65 = ((val* (*)(val*))(var64->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var64) /* mainmodule on <var64:AbstractCompiler(GlobalCompiler)>*/;
6081 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>*/;
6082 var_propdef = var66;
6083 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>*/;
6084 var_res2 = var67;
6085 var68 = NULL;
6086 if (var_res == NULL) {
6087 var69 = 0; /* is null */
6088 } else {
6089 var69 = 1; /* arg is null and recv is not */
6090 }
6091 if (var69){
6092 if (var_res2 == NULL) {
6093 fprintf(stderr, "Runtime error: %s", "Cast failed");
6094 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 517);
6095 exit(1);
6096 }
6097 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
6098 } else {
6099 }
6100 var = var_res;
6101 goto RET_LABEL;
6102 } else {
6103 }
6104 var70 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
6105 if (var70){
6106 if (varonce71) {
6107 var72 = varonce71;
6108 } else {
6109 var73 = "{";
6110 var74 = 1;
6111 var75 = string__NativeString__to_s_with_length(var73, var74);
6112 var72 = var75;
6113 varonce71 = var72;
6114 }
6115 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var72) /* add on <self:GlobalCompilerVisitor>*/;
6116 if (varonce76) {
6117 var77 = varonce76;
6118 } else {
6119 var78 = "/*BUG: no live types for ";
6120 var79 = 25;
6121 var80 = string__NativeString__to_s_with_length(var78, var79);
6122 var77 = var80;
6123 varonce76 = var77;
6124 }
6125 var81 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6126 var82 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__inspect]))(var81) /* inspect on <var81:nullable Object(RuntimeVariable)>*/;
6127 if (varonce83) {
6128 var84 = varonce83;
6129 } else {
6130 var85 = " . ";
6131 var86 = 3;
6132 var87 = string__NativeString__to_s_with_length(var85, var86);
6133 var84 = var87;
6134 varonce83 = var84;
6135 }
6136 if (varonce88) {
6137 var89 = varonce88;
6138 } else {
6139 var90 = "*/";
6140 var91 = 2;
6141 var92 = string__NativeString__to_s_with_length(var90, var91);
6142 var89 = var92;
6143 varonce88 = var89;
6144 }
6145 var93 = NEW_array__Array(&type_array__Arraykernel__Object);
6146 { /* var93 = array_instance Array[Object] */
6147 var94 = 5;
6148 var95 = NEW_array__NativeArray(var94, &type_array__NativeArraykernel__Object);
6149 ((struct instance_array__NativeArray*)var95)->values[0] = (val*) var77;
6150 ((struct instance_array__NativeArray*)var95)->values[1] = (val*) var82;
6151 ((struct instance_array__NativeArray*)var95)->values[2] = (val*) var84;
6152 ((struct instance_array__NativeArray*)var95)->values[3] = (val*) var_m;
6153 ((struct instance_array__NativeArray*)var95)->values[4] = (val*) var89;
6154 ((void (*)(val*, val*, long))(var93->class->vft[COLOR_array__Array__with_native]))(var93, var95, var94) /* with_native on <var93:Array[Object]>*/;
6155 CHECK_NEW_array__Array(var93);
6156 }
6157 var96 = ((val* (*)(val*))(var93->class->vft[COLOR_string__Object__to_s]))(var93) /* to_s on <var93:Array[Object]>*/;
6158 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var96) /* add on <self:GlobalCompilerVisitor>*/;
6159 var97 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6160 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var97) /* bugtype on <self:GlobalCompilerVisitor>*/;
6161 if (varonce98) {
6162 var99 = varonce98;
6163 } else {
6164 var100 = "}";
6165 var101 = 1;
6166 var102 = string__NativeString__to_s_with_length(var100, var101);
6167 var99 = var102;
6168 varonce98 = var99;
6169 }
6170 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var99) /* add on <self:GlobalCompilerVisitor>*/;
6171 var = var_res;
6172 goto RET_LABEL;
6173 } else {
6174 }
6175 if (varonce103) {
6176 var104 = varonce103;
6177 } else {
6178 var105 = "switch(";
6179 var106 = 7;
6180 var107 = string__NativeString__to_s_with_length(var105, var106);
6181 var104 = var107;
6182 varonce103 = var104;
6183 }
6184 var108 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6185 if (varonce109) {
6186 var110 = varonce109;
6187 } else {
6188 var111 = "->classid) {";
6189 var112 = 12;
6190 var113 = string__NativeString__to_s_with_length(var111, var112);
6191 var110 = var113;
6192 varonce109 = var110;
6193 }
6194 var114 = NEW_array__Array(&type_array__Arraykernel__Object);
6195 { /* var114 = array_instance Array[Object] */
6196 var115 = 3;
6197 var116 = NEW_array__NativeArray(var115, &type_array__NativeArraykernel__Object);
6198 ((struct instance_array__NativeArray*)var116)->values[0] = (val*) var104;
6199 ((struct instance_array__NativeArray*)var116)->values[1] = (val*) var108;
6200 ((struct instance_array__NativeArray*)var116)->values[2] = (val*) var110;
6201 ((void (*)(val*, val*, long))(var114->class->vft[COLOR_array__Array__with_native]))(var114, var116, var115) /* with_native on <var114:Array[Object]>*/;
6202 CHECK_NEW_array__Array(var114);
6203 }
6204 var117 = ((val* (*)(val*))(var114->class->vft[COLOR_string__Object__to_s]))(var114) /* to_s on <var114:Array[Object]>*/;
6205 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var117) /* add on <self:GlobalCompilerVisitor>*/;
6206 var118 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
6207 var_last = var118;
6208 var119 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
6209 for(;;) {
6210 var120 = ((short int (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var119) /* is_ok on <var119:Iterator[nullable Object]>*/;
6211 if(!var120) break;
6212 var121 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__item]))(var119) /* item on <var119:Iterator[nullable Object]>*/;
6213 var_t = var121;
6214 var122 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6215 var123 = ((val* (*)(val*))(var122->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var122) /* mainmodule on <var122:AbstractCompiler(GlobalCompiler)>*/;
6216 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>*/;
6217 var_propdef125 = var124;
6218 var127 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6219 var128 = ((short int (*)(val*))(var127->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var127) /* hardening on <var127:AbstractCompiler(GlobalCompiler)>*/;
6220 var129 = !var128;
6221 var_ = var129;
6222 if (var129){
6223 var130 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
6224 var126 = var130;
6225 } else {
6226 var126 = var_;
6227 }
6228 if (var126){
6229 if (varonce131) {
6230 var132 = varonce131;
6231 } else {
6232 var133 = "default: /* test ";
6233 var134 = 17;
6234 var135 = string__NativeString__to_s_with_length(var133, var134);
6235 var132 = var135;
6236 varonce131 = var132;
6237 }
6238 if (varonce136) {
6239 var137 = varonce136;
6240 } else {
6241 var138 = " */";
6242 var139 = 3;
6243 var140 = string__NativeString__to_s_with_length(var138, var139);
6244 var137 = var140;
6245 varonce136 = var137;
6246 }
6247 var141 = NEW_array__Array(&type_array__Arraykernel__Object);
6248 { /* var141 = array_instance Array[Object] */
6249 var142 = 3;
6250 var143 = NEW_array__NativeArray(var142, &type_array__NativeArraykernel__Object);
6251 ((struct instance_array__NativeArray*)var143)->values[0] = (val*) var132;
6252 ((struct instance_array__NativeArray*)var143)->values[1] = (val*) var_t;
6253 ((struct instance_array__NativeArray*)var143)->values[2] = (val*) var137;
6254 ((void (*)(val*, val*, long))(var141->class->vft[COLOR_array__Array__with_native]))(var141, var143, var142) /* with_native on <var141:Array[Object]>*/;
6255 CHECK_NEW_array__Array(var141);
6256 }
6257 var144 = ((val* (*)(val*))(var141->class->vft[COLOR_string__Object__to_s]))(var141) /* to_s on <var141:Array[Object]>*/;
6258 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var144) /* add on <self:GlobalCompilerVisitor>*/;
6259 } else {
6260 if (varonce145) {
6261 var146 = varonce145;
6262 } else {
6263 var147 = "case ";
6264 var148 = 5;
6265 var149 = string__NativeString__to_s_with_length(var147, var148);
6266 var146 = var149;
6267 varonce145 = var146;
6268 }
6269 var150 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6270 var151 = ((val* (*)(val*, val*))(var150->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var150, var_t) /* classid on <var150:AbstractCompiler(GlobalCompiler)>*/;
6271 if (varonce152) {
6272 var153 = varonce152;
6273 } else {
6274 var154 = ": /* test ";
6275 var155 = 10;
6276 var156 = string__NativeString__to_s_with_length(var154, var155);
6277 var153 = var156;
6278 varonce152 = var153;
6279 }
6280 if (varonce157) {
6281 var158 = varonce157;
6282 } else {
6283 var159 = " */";
6284 var160 = 3;
6285 var161 = string__NativeString__to_s_with_length(var159, var160);
6286 var158 = var161;
6287 varonce157 = var158;
6288 }
6289 var162 = NEW_array__Array(&type_array__Arraykernel__Object);
6290 { /* var162 = array_instance Array[Object] */
6291 var163 = 5;
6292 var164 = NEW_array__NativeArray(var163, &type_array__NativeArraykernel__Object);
6293 ((struct instance_array__NativeArray*)var164)->values[0] = (val*) var146;
6294 ((struct instance_array__NativeArray*)var164)->values[1] = (val*) var151;
6295 ((struct instance_array__NativeArray*)var164)->values[2] = (val*) var153;
6296 ((struct instance_array__NativeArray*)var164)->values[3] = (val*) var_t;
6297 ((struct instance_array__NativeArray*)var164)->values[4] = (val*) var158;
6298 ((void (*)(val*, val*, long))(var162->class->vft[COLOR_array__Array__with_native]))(var162, var164, var163) /* with_native on <var162:Array[Object]>*/;
6299 CHECK_NEW_array__Array(var162);
6300 }
6301 var165 = ((val* (*)(val*))(var162->class->vft[COLOR_string__Object__to_s]))(var162) /* to_s on <var162:Array[Object]>*/;
6302 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var165) /* add on <self:GlobalCompilerVisitor>*/;
6303 }
6304 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>*/;
6305 var_res2167 = var166;
6306 var168 = NULL;
6307 if (var_res == NULL) {
6308 var169 = 0; /* is null */
6309 } else {
6310 var169 = 1; /* arg is null and recv is not */
6311 }
6312 if (var169){
6313 if (var_res2167 == NULL) {
6314 fprintf(stderr, "Runtime error: %s", "Cast failed");
6315 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 539);
6316 exit(1);
6317 }
6318 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2167) /* assign on <self:GlobalCompilerVisitor>*/;
6319 } else {
6320 }
6321 if (varonce170) {
6322 var171 = varonce170;
6323 } else {
6324 var172 = "break;";
6325 var173 = 6;
6326 var174 = string__NativeString__to_s_with_length(var172, var173);
6327 var171 = var174;
6328 varonce170 = var171;
6329 }
6330 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
6331 CONTINUE_label: (void)0;
6332 ((void (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__next]))(var119) /* next on <var119:Iterator[nullable Object]>*/;
6333 }
6334 BREAK_label: (void)0;
6335 var175 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6336 var176 = ((short int (*)(val*))(var175->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var175) /* hardening on <var175:AbstractCompiler(GlobalCompiler)>*/;
6337 if (var176){
6338 if (varonce177) {
6339 var178 = varonce177;
6340 } else {
6341 var179 = "default: /* bug */";
6342 var180 = 18;
6343 var181 = string__NativeString__to_s_with_length(var179, var180);
6344 var178 = var181;
6345 varonce177 = var178;
6346 }
6347 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var178) /* add on <self:GlobalCompilerVisitor>*/;
6348 var182 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6349 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var182) /* bugtype on <self:GlobalCompilerVisitor>*/;
6350 } else {
6351 }
6352 if (varonce183) {
6353 var184 = varonce183;
6354 } else {
6355 var185 = "}";
6356 var186 = 1;
6357 var187 = string__NativeString__to_s_with_length(var185, var186);
6358 var184 = var187;
6359 varonce183 = var184;
6360 }
6361 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var184) /* add on <self:GlobalCompilerVisitor>*/;
6362 var = var_res;
6363 goto RET_LABEL;
6364 RET_LABEL:;
6365 return var;
6366 }
6367 /* method global_compiler#GlobalCompilerVisitor#supercall for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
6368 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__supercall(val* self, val* p0, val* p1, val* p2) {
6369 val* var /* : nullable RuntimeVariable */;
6370 val* var1 /* : nullable RuntimeVariable */;
6371 var1 = global_compiler__GlobalCompilerVisitor__supercall(self, p0, p1, p2);
6372 var = var1;
6373 RET_LABEL:;
6374 return var;
6375 }
6376 /* method global_compiler#GlobalCompilerVisitor#adapt_signature for (self: GlobalCompilerVisitor, MMethodDef, Array[RuntimeVariable]) */
6377 void global_compiler__GlobalCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
6378 val* var_m /* var m: MMethodDef */;
6379 val* var_args /* var args: Array[RuntimeVariable] */;
6380 val* var /* : nullable Object */;
6381 val* var_recv /* var recv: RuntimeVariable */;
6382 val* var1 /* : Range[Int] */;
6383 long var2 /* : Int */;
6384 val* var3 /* : nullable MSignature */;
6385 long var4 /* : Int */;
6386 val* var5 /* : Discrete */;
6387 val* var6 /* : Discrete */;
6388 val* var7 /* : Iterator[nullable Object] */;
6389 short int var8 /* : Bool */;
6390 val* var9 /* : nullable Object */;
6391 long var_i /* var i: Int */;
6392 long var10 /* : Int */;
6393 val* var11 /* : nullable MSignature */;
6394 val* var12 /* : Array[MParameter] */;
6395 val* var13 /* : nullable Object */;
6396 val* var14 /* : MType */;
6397 val* var_t /* var t: MType */;
6398 val* var15 /* : nullable MSignature */;
6399 long var16 /* : Int */;
6400 short int var17 /* : Bool */;
6401 short int var19 /* : Bool */;
6402 long var20 /* : Int */;
6403 long var21 /* : Int */;
6404 long var23 /* : Int */;
6405 val* var24 /* : nullable Object */;
6406 val* var25 /* : MType */;
6407 val* var26 /* : MType */;
6408 long var27 /* : Int */;
6409 long var28 /* : Int */;
6410 long var30 /* : Int */;
6411 long var31 /* : Int */;
6412 long var32 /* : Int */;
6413 long var34 /* : Int */;
6414 val* var35 /* : nullable Object */;
6415 val* var36 /* : RuntimeVariable */;
6416 var_m = p0;
6417 var_args = p1;
6418 var = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6419 var_recv = var;
6420 var1 = NEW_range__Range(&type_range__Rangekernel__Int);
6421 var2 = 0;
6422 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6423 if (var3 == NULL) {
6424 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6425 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 553);
6426 exit(1);
6427 } else {
6428 var4 = ((long (*)(val*))(var3->class->vft[COLOR_model__MSignature__arity]))(var3) /* arity on <var3:nullable MSignature>*/;
6429 }
6430 var5 = BOX_kernel__Int(var2); /* autobox from Int to Discrete */
6431 var6 = BOX_kernel__Int(var4); /* autobox from Int to Discrete */
6432 ((void (*)(val*, val*, val*))(var1->class->vft[COLOR_range__Range__without_last]))(var1, var5, var6) /* without_last on <var1:Range[Int]>*/;
6433 CHECK_NEW_range__Range(var1);
6434 var7 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__iterator]))(var1) /* iterator on <var1:Range[Int]>*/;
6435 for(;;) {
6436 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
6437 if(!var8) break;
6438 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
6439 var10 = ((struct instance_kernel__Int*)var9)->value; /* autounbox from nullable Object to Int */;
6440 var_i = var10;
6441 var11 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6442 if (var11 == NULL) {
6443 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6444 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 554);
6445 exit(1);
6446 } else {
6447 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_model__MSignature__mparameters]))(var11) /* mparameters on <var11:nullable MSignature>*/;
6448 }
6449 var13 = ((val* (*)(val*, long))(var12->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var12, var_i) /* [] on <var12:Array[MParameter]>*/;
6450 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_model__MParameter__mtype]))(var13) /* mtype on <var13:nullable Object(MParameter)>*/;
6451 var_t = var14;
6452 var15 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6453 if (var15 == NULL) {
6454 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6455 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 555);
6456 exit(1);
6457 } else {
6458 var16 = ((long (*)(val*))(var15->class->vft[COLOR_model__MSignature__vararg_rank]))(var15) /* vararg_rank on <var15:nullable MSignature>*/;
6459 }
6460 { /* Inline kernel#Int#== (var_i,var16) */
6461 var19 = var_i == var16;
6462 var17 = var19;
6463 goto RET_LABEL18;
6464 RET_LABEL18:(void)0;
6465 }
6466 if (var17){
6467 var20 = 1;
6468 { /* Inline kernel#Int#+ (var_i,var20) */
6469 var23 = var_i + var20;
6470 var21 = var23;
6471 goto RET_LABEL22;
6472 RET_LABEL22:(void)0;
6473 }
6474 var24 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var21) /* [] on <var_args:Array[RuntimeVariable]>*/;
6475 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var24) /* mtype on <var24:nullable Object(RuntimeVariable)>*/;
6476 var_t = var25;
6477 } else {
6478 }
6479 var26 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_t, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6480 var_t = var26;
6481 var27 = 1;
6482 { /* Inline kernel#Int#+ (var_i,var27) */
6483 var30 = var_i + var27;
6484 var28 = var30;
6485 goto RET_LABEL29;
6486 RET_LABEL29:(void)0;
6487 }
6488 var31 = 1;
6489 { /* Inline kernel#Int#+ (var_i,var31) */
6490 var34 = var_i + var31;
6491 var32 = var34;
6492 goto RET_LABEL33;
6493 RET_LABEL33:(void)0;
6494 }
6495 var35 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var32) /* [] on <var_args:Array[RuntimeVariable]>*/;
6496 var36 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var35, var_t) /* autobox on <self:GlobalCompilerVisitor>*/;
6497 ((void (*)(val*, long, val*))(var_args->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_args, var28, var36) /* []= on <var_args:Array[RuntimeVariable]>*/;
6498 CONTINUE_label: (void)0;
6499 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
6500 }
6501 BREAK_label: (void)0;
6502 RET_LABEL:;
6503 }
6504 /* method global_compiler#GlobalCompilerVisitor#adapt_signature for (self: Object, MMethodDef, Array[RuntimeVariable]) */
6505 void VIRTUAL_global_compiler__GlobalCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
6506 global_compiler__GlobalCompilerVisitor__adapt_signature(self, p0, p1);
6507 RET_LABEL:;
6508 }
6509 /* method global_compiler#GlobalCompilerVisitor#vararg_instance for (self: GlobalCompilerVisitor, MPropDef, RuntimeVariable, Array[RuntimeVariable], MType): RuntimeVariable */
6510 val* global_compiler__GlobalCompilerVisitor__vararg_instance(val* self, val* p0, val* p1, val* p2, val* p3) {
6511 val* var /* : RuntimeVariable */;
6512 val* var_mpropdef /* var mpropdef: MPropDef */;
6513 val* var_recv /* var recv: RuntimeVariable */;
6514 val* var_varargs /* var varargs: Array[RuntimeVariable] */;
6515 val* var_elttype /* var elttype: MType */;
6516 val* var1 /* : MType */;
6517 val* var2 /* : RuntimeVariable */;
6518 var_mpropdef = p0;
6519 var_recv = p1;
6520 var_varargs = p2;
6521 var_elttype = p3;
6522 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_elttype, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6523 var_elttype = var1;
6524 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__array_instance]))(self, var_varargs, var_elttype) /* array_instance on <self:GlobalCompilerVisitor>*/;
6525 var = var2;
6526 goto RET_LABEL;
6527 RET_LABEL:;
6528 return var;
6529 }
6530 /* method global_compiler#GlobalCompilerVisitor#vararg_instance for (self: Object, MPropDef, RuntimeVariable, Array[RuntimeVariable], MType): RuntimeVariable */
6531 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__vararg_instance(val* self, val* p0, val* p1, val* p2, val* p3) {
6532 val* var /* : RuntimeVariable */;
6533 val* var1 /* : RuntimeVariable */;
6534 var1 = global_compiler__GlobalCompilerVisitor__vararg_instance(self, p0, p1, p2, p3);
6535 var = var1;
6536 RET_LABEL:;
6537 return var;
6538 }
6539 /* method global_compiler#GlobalCompilerVisitor#bugtype for (self: GlobalCompilerVisitor, RuntimeVariable) */
6540 void global_compiler__GlobalCompilerVisitor__bugtype(val* self, val* p0) {
6541 val* var_recv /* var recv: RuntimeVariable */;
6542 val* var /* : MType */;
6543 val* var1 /* : String */;
6544 static val* varonce;
6545 val* var2 /* : String */;
6546 char* var3 /* : NativeString */;
6547 long var4 /* : Int */;
6548 val* var5 /* : String */;
6549 short int var6 /* : Bool */;
6550 static val* varonce7;
6551 val* var8 /* : String */;
6552 char* var9 /* : NativeString */;
6553 long var10 /* : Int */;
6554 val* var11 /* : String */;
6555 static val* varonce12;
6556 val* var13 /* : String */;
6557 char* var14 /* : NativeString */;
6558 long var15 /* : Int */;
6559 val* var16 /* : String */;
6560 val* var17 /* : MType */;
6561 static val* varonce18;
6562 val* var19 /* : String */;
6563 char* var20 /* : NativeString */;
6564 long var21 /* : Int */;
6565 val* var22 /* : String */;
6566 val* var23 /* : Array[Object] */;
6567 long var24 /* : Int */;
6568 val* var25 /* : NativeArray[Object] */;
6569 val* var26 /* : String */;
6570 static val* varonce27;
6571 val* var28 /* : String */;
6572 char* var29 /* : NativeString */;
6573 long var30 /* : Int */;
6574 val* var31 /* : String */;
6575 var_recv = p0;
6576 var = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6577 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__MType__ctype]))(var) /* ctype on <var:MType>*/;
6578 if (varonce) {
6579 var2 = varonce;
6580 } else {
6581 var3 = "val*";
6582 var4 = 4;
6583 var5 = string__NativeString__to_s_with_length(var3, var4);
6584 var2 = var5;
6585 varonce = var2;
6586 }
6587 var6 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___33d_61d]))(var1, var2) /* != on <var1:String>*/;
6588 if (var6){
6589 goto RET_LABEL;
6590 } else {
6591 }
6592 if (varonce7) {
6593 var8 = varonce7;
6594 } else {
6595 var9 = "fprintf(stderr, \"BTD BUG: Dynamic type is %s, static type is %s\\n\", class_names[";
6596 var10 = 80;
6597 var11 = string__NativeString__to_s_with_length(var9, var10);
6598 var8 = var11;
6599 varonce7 = var8;
6600 }
6601 if (varonce12) {
6602 var13 = varonce12;
6603 } else {
6604 var14 = "->classid], \"";
6605 var15 = 13;
6606 var16 = string__NativeString__to_s_with_length(var14, var15);
6607 var13 = var16;
6608 varonce12 = var13;
6609 }
6610 var17 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_recv) /* mcasttype on <var_recv:RuntimeVariable>*/;
6611 if (varonce18) {
6612 var19 = varonce18;
6613 } else {
6614 var20 = "\");";
6615 var21 = 3;
6616 var22 = string__NativeString__to_s_with_length(var20, var21);
6617 var19 = var22;
6618 varonce18 = var19;
6619 }
6620 var23 = NEW_array__Array(&type_array__Arraykernel__Object);
6621 { /* var23 = array_instance Array[Object] */
6622 var24 = 5;
6623 var25 = NEW_array__NativeArray(var24, &type_array__NativeArraykernel__Object);
6624 ((struct instance_array__NativeArray*)var25)->values[0] = (val*) var8;
6625 ((struct instance_array__NativeArray*)var25)->values[1] = (val*) var_recv;
6626 ((struct instance_array__NativeArray*)var25)->values[2] = (val*) var13;
6627 ((struct instance_array__NativeArray*)var25)->values[3] = (val*) var17;
6628 ((struct instance_array__NativeArray*)var25)->values[4] = (val*) var19;
6629 ((void (*)(val*, val*, long))(var23->class->vft[COLOR_array__Array__with_native]))(var23, var25, var24) /* with_native on <var23:Array[Object]>*/;
6630 CHECK_NEW_array__Array(var23);
6631 }
6632 var26 = ((val* (*)(val*))(var23->class->vft[COLOR_string__Object__to_s]))(var23) /* to_s on <var23:Array[Object]>*/;
6633 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var26) /* add on <self:GlobalCompilerVisitor>*/;
6634 if (varonce27) {
6635 var28 = varonce27;
6636 } else {
6637 var29 = "exit(1);";
6638 var30 = 8;
6639 var31 = string__NativeString__to_s_with_length(var29, var30);
6640 var28 = var31;
6641 varonce27 = var28;
6642 }
6643 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var28) /* add on <self:GlobalCompilerVisitor>*/;
6644 RET_LABEL:;
6645 }
6646 /* method global_compiler#GlobalCompilerVisitor#bugtype for (self: Object, RuntimeVariable) */
6647 void VIRTUAL_global_compiler__GlobalCompilerVisitor__bugtype(val* self, val* p0) {
6648 global_compiler__GlobalCompilerVisitor__bugtype(self, p0);
6649 RET_LABEL:;
6650 }
6651 /* method global_compiler#GlobalCompilerVisitor#isset_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable): RuntimeVariable */
6652 val* global_compiler__GlobalCompilerVisitor__isset_attribute(val* self, val* p0, val* p1) {
6653 val* var /* : RuntimeVariable */;
6654 val* var_a /* var a: MAttribute */;
6655 val* var_recv /* var recv: RuntimeVariable */;
6656 val* var1 /* : Array[MClassType] */;
6657 val* var_types /* var types: Array[MClassType] */;
6658 val* var2 /* : MClassType */;
6659 val* var3 /* : RuntimeVariable */;
6660 val* var_res /* var res: RuntimeVariable */;
6661 short int var4 /* : Bool */;
6662 static val* varonce;
6663 val* var5 /* : String */;
6664 char* var6 /* : NativeString */;
6665 long var7 /* : Int */;
6666 val* var8 /* : String */;
6667 val* var9 /* : String */;
6668 static val* varonce10;
6669 val* var11 /* : String */;
6670 char* var12 /* : NativeString */;
6671 long var13 /* : Int */;
6672 val* var14 /* : String */;
6673 static val* varonce15;
6674 val* var16 /* : String */;
6675 char* var17 /* : NativeString */;
6676 long var18 /* : Int */;
6677 val* var19 /* : String */;
6678 val* var20 /* : Array[Object] */;
6679 long var21 /* : Int */;
6680 val* var22 /* : NativeArray[Object] */;
6681 val* var23 /* : String */;
6682 static val* varonce24;
6683 val* var25 /* : String */;
6684 char* var26 /* : NativeString */;
6685 long var27 /* : Int */;
6686 val* var28 /* : String */;
6687 static val* varonce29;
6688 val* var30 /* : String */;
6689 char* var31 /* : NativeString */;
6690 long var32 /* : Int */;
6691 val* var33 /* : String */;
6692 val* var34 /* : String */;
6693 static val* varonce35;
6694 val* var36 /* : String */;
6695 char* var37 /* : NativeString */;
6696 long var38 /* : Int */;
6697 val* var39 /* : String */;
6698 val* var40 /* : Array[Object] */;
6699 long var41 /* : Int */;
6700 val* var42 /* : NativeArray[Object] */;
6701 val* var43 /* : String */;
6702 static val* varonce44;
6703 val* var45 /* : String */;
6704 char* var46 /* : NativeString */;
6705 long var47 /* : Int */;
6706 val* var48 /* : String */;
6707 static val* varonce49;
6708 val* var50 /* : String */;
6709 char* var51 /* : NativeString */;
6710 long var52 /* : Int */;
6711 val* var53 /* : String */;
6712 val* var54 /* : Array[Object] */;
6713 long var55 /* : Int */;
6714 val* var56 /* : NativeArray[Object] */;
6715 val* var57 /* : String */;
6716 val* var58 /* : nullable Object */;
6717 val* var_last /* var last: MClassType */;
6718 val* var59 /* : Iterator[nullable Object] */;
6719 short int var60 /* : Bool */;
6720 val* var61 /* : nullable Object */;
6721 val* var_t /* var t: MClassType */;
6722 short int var62 /* : Bool */;
6723 val* var63 /* : AbstractCompiler */;
6724 short int var64 /* : Bool */;
6725 short int var65 /* : Bool */;
6726 short int var_ /* var : Bool */;
6727 short int var66 /* : Bool */;
6728 static val* varonce67;
6729 val* var68 /* : String */;
6730 char* var69 /* : NativeString */;
6731 long var70 /* : Int */;
6732 val* var71 /* : String */;
6733 val* var72 /* : AbstractCompiler */;
6734 val* var73 /* : String */;
6735 static val* varonce74;
6736 val* var75 /* : String */;
6737 char* var76 /* : NativeString */;
6738 long var77 /* : Int */;
6739 val* var78 /* : String */;
6740 val* var79 /* : Array[Object] */;
6741 long var80 /* : Int */;
6742 val* var81 /* : NativeArray[Object] */;
6743 val* var82 /* : String */;
6744 static val* varonce83;
6745 val* var84 /* : String */;
6746 char* var85 /* : NativeString */;
6747 long var86 /* : Int */;
6748 val* var87 /* : String */;
6749 val* var88 /* : AbstractCompiler */;
6750 val* var89 /* : String */;
6751 static val* varonce90;
6752 val* var91 /* : String */;
6753 char* var92 /* : NativeString */;
6754 long var93 /* : Int */;
6755 val* var94 /* : String */;
6756 val* var95 /* : Array[Object] */;
6757 long var96 /* : Int */;
6758 val* var97 /* : NativeArray[Object] */;
6759 val* var98 /* : String */;
6760 val* var99 /* : RuntimeVariable */;
6761 val* var_recv2 /* var recv2: RuntimeVariable */;
6762 val* var100 /* : MPropDef */;
6763 val* var101 /* : nullable MType */;
6764 val* var_ta /* var ta: MType */;
6765 val* var102 /* : MType */;
6766 static val* varonce103;
6767 val* var104 /* : String */;
6768 char* var105 /* : NativeString */;
6769 long var106 /* : Int */;
6770 val* var107 /* : String */;
6771 val* var108 /* : String */;
6772 static val* varonce109;
6773 val* var110 /* : String */;
6774 char* var111 /* : NativeString */;
6775 long var112 /* : Int */;
6776 val* var113 /* : String */;
6777 static val* varonce114;
6778 val* var115 /* : String */;
6779 char* var116 /* : NativeString */;
6780 long var117 /* : Int */;
6781 val* var118 /* : String */;
6782 val* var119 /* : MPropDef */;
6783 val* var120 /* : String */;
6784 val* var121 /* : Array[Object] */;
6785 long var122 /* : Int */;
6786 val* var123 /* : NativeArray[Object] */;
6787 val* var124 /* : String */;
6788 val* var125 /* : RuntimeVariable */;
6789 val* var_attr /* var attr: RuntimeVariable */;
6790 short int var126 /* : Bool */;
6791 int cltype;
6792 int idtype;
6793 short int var127 /* : Bool */;
6794 val* var128 /* : String */;
6795 static val* varonce129;
6796 val* var130 /* : String */;
6797 char* var131 /* : NativeString */;
6798 long var132 /* : Int */;
6799 val* var133 /* : String */;
6800 short int var134 /* : Bool */;
6801 static val* varonce135;
6802 val* var136 /* : String */;
6803 char* var137 /* : NativeString */;
6804 long var138 /* : Int */;
6805 val* var139 /* : String */;
6806 static val* varonce140;
6807 val* var141 /* : String */;
6808 char* var142 /* : NativeString */;
6809 long var143 /* : Int */;
6810 val* var144 /* : String */;
6811 val* var145 /* : Array[Object] */;
6812 long var146 /* : Int */;
6813 val* var147 /* : NativeArray[Object] */;
6814 val* var148 /* : String */;
6815 static val* varonce149;
6816 val* var150 /* : String */;
6817 char* var151 /* : NativeString */;
6818 long var152 /* : Int */;
6819 val* var153 /* : String */;
6820 val* var154 /* : Array[Object] */;
6821 long var155 /* : Int */;
6822 val* var156 /* : NativeArray[Object] */;
6823 val* var157 /* : String */;
6824 static val* varonce158;
6825 val* var159 /* : String */;
6826 char* var160 /* : NativeString */;
6827 long var161 /* : Int */;
6828 val* var162 /* : String */;
6829 val* var163 /* : AbstractCompiler */;
6830 short int var164 /* : Bool */;
6831 static val* varonce165;
6832 val* var166 /* : String */;
6833 char* var167 /* : NativeString */;
6834 long var168 /* : Int */;
6835 val* var169 /* : String */;
6836 static val* varonce170;
6837 val* var171 /* : String */;
6838 char* var172 /* : NativeString */;
6839 long var173 /* : Int */;
6840 val* var174 /* : String */;
6841 var_a = p0;
6842 var_recv = p1;
6843 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
6844 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
6845 var_types = var1;
6846 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
6847 var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var2) /* new_var on <self:GlobalCompilerVisitor>*/;
6848 var_res = var3;
6849 var4 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
6850 if (var4){
6851 if (varonce) {
6852 var5 = varonce;
6853 } else {
6854 var6 = "/*BUG: no live types for ";
6855 var7 = 25;
6856 var8 = string__NativeString__to_s_with_length(var6, var7);
6857 var5 = var8;
6858 varonce = var5;
6859 }
6860 var9 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
6861 if (varonce10) {
6862 var11 = varonce10;
6863 } else {
6864 var12 = " . ";
6865 var13 = 3;
6866 var14 = string__NativeString__to_s_with_length(var12, var13);
6867 var11 = var14;
6868 varonce10 = var11;
6869 }
6870 if (varonce15) {
6871 var16 = varonce15;
6872 } else {
6873 var17 = "*/";
6874 var18 = 2;
6875 var19 = string__NativeString__to_s_with_length(var17, var18);
6876 var16 = var19;
6877 varonce15 = var16;
6878 }
6879 var20 = NEW_array__Array(&type_array__Arraykernel__Object);
6880 { /* var20 = array_instance Array[Object] */
6881 var21 = 5;
6882 var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
6883 ((struct instance_array__NativeArray*)var22)->values[0] = (val*) var5;
6884 ((struct instance_array__NativeArray*)var22)->values[1] = (val*) var9;
6885 ((struct instance_array__NativeArray*)var22)->values[2] = (val*) var11;
6886 ((struct instance_array__NativeArray*)var22)->values[3] = (val*) var_a;
6887 ((struct instance_array__NativeArray*)var22)->values[4] = (val*) var16;
6888 ((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
6889 CHECK_NEW_array__Array(var20);
6890 }
6891 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
6892 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var23) /* add on <self:GlobalCompilerVisitor>*/;
6893 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
6894 var = var_res;
6895 goto RET_LABEL;
6896 } else {
6897 }
6898 if (varonce24) {
6899 var25 = varonce24;
6900 } else {
6901 var26 = "/* isset ";
6902 var27 = 9;
6903 var28 = string__NativeString__to_s_with_length(var26, var27);
6904 var25 = var28;
6905 varonce24 = var25;
6906 }
6907 if (varonce29) {
6908 var30 = varonce29;
6909 } else {
6910 var31 = " on ";
6911 var32 = 4;
6912 var33 = string__NativeString__to_s_with_length(var31, var32);
6913 var30 = var33;
6914 varonce29 = var30;
6915 }
6916 var34 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
6917 if (varonce35) {
6918 var36 = varonce35;
6919 } else {
6920 var37 = " */";
6921 var38 = 3;
6922 var39 = string__NativeString__to_s_with_length(var37, var38);
6923 var36 = var39;
6924 varonce35 = var36;
6925 }
6926 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
6927 { /* var40 = array_instance Array[Object] */
6928 var41 = 5;
6929 var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
6930 ((struct instance_array__NativeArray*)var42)->values[0] = (val*) var25;
6931 ((struct instance_array__NativeArray*)var42)->values[1] = (val*) var_a;
6932 ((struct instance_array__NativeArray*)var42)->values[2] = (val*) var30;
6933 ((struct instance_array__NativeArray*)var42)->values[3] = (val*) var34;
6934 ((struct instance_array__NativeArray*)var42)->values[4] = (val*) var36;
6935 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
6936 CHECK_NEW_array__Array(var40);
6937 }
6938 var43 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
6939 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var43) /* add on <self:GlobalCompilerVisitor>*/;
6940 if (varonce44) {
6941 var45 = varonce44;
6942 } else {
6943 var46 = "switch(";
6944 var47 = 7;
6945 var48 = string__NativeString__to_s_with_length(var46, var47);
6946 var45 = var48;
6947 varonce44 = var45;
6948 }
6949 if (varonce49) {
6950 var50 = varonce49;
6951 } else {
6952 var51 = "->classid) {";
6953 var52 = 12;
6954 var53 = string__NativeString__to_s_with_length(var51, var52);
6955 var50 = var53;
6956 varonce49 = var50;
6957 }
6958 var54 = NEW_array__Array(&type_array__Arraykernel__Object);
6959 { /* var54 = array_instance Array[Object] */
6960 var55 = 3;
6961 var56 = NEW_array__NativeArray(var55, &type_array__NativeArraykernel__Object);
6962 ((struct instance_array__NativeArray*)var56)->values[0] = (val*) var45;
6963 ((struct instance_array__NativeArray*)var56)->values[1] = (val*) var_recv;
6964 ((struct instance_array__NativeArray*)var56)->values[2] = (val*) var50;
6965 ((void (*)(val*, val*, long))(var54->class->vft[COLOR_array__Array__with_native]))(var54, var56, var55) /* with_native on <var54:Array[Object]>*/;
6966 CHECK_NEW_array__Array(var54);
6967 }
6968 var57 = ((val* (*)(val*))(var54->class->vft[COLOR_string__Object__to_s]))(var54) /* to_s on <var54:Array[Object]>*/;
6969 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var57) /* add on <self:GlobalCompilerVisitor>*/;
6970 var58 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
6971 var_last = var58;
6972 var59 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
6973 for(;;) {
6974 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var59) /* is_ok on <var59:Iterator[nullable Object]>*/;
6975 if(!var60) break;
6976 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__item]))(var59) /* item on <var59:Iterator[nullable Object]>*/;
6977 var_t = var61;
6978 var63 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6979 var64 = ((short int (*)(val*))(var63->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var63) /* hardening on <var63:AbstractCompiler(GlobalCompiler)>*/;
6980 var65 = !var64;
6981 var_ = var65;
6982 if (var65){
6983 var66 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
6984 var62 = var66;
6985 } else {
6986 var62 = var_;
6987 }
6988 if (var62){
6989 if (varonce67) {
6990 var68 = varonce67;
6991 } else {
6992 var69 = "default: /*";
6993 var70 = 11;
6994 var71 = string__NativeString__to_s_with_length(var69, var70);
6995 var68 = var71;
6996 varonce67 = var68;
6997 }
6998 var72 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6999 var73 = ((val* (*)(val*, val*))(var72->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var72, var_t) /* classid on <var72:AbstractCompiler(GlobalCompiler)>*/;
7000 if (varonce74) {
7001 var75 = varonce74;
7002 } else {
7003 var76 = "*/";
7004 var77 = 2;
7005 var78 = string__NativeString__to_s_with_length(var76, var77);
7006 var75 = var78;
7007 varonce74 = var75;
7008 }
7009 var79 = NEW_array__Array(&type_array__Arraykernel__Object);
7010 { /* var79 = array_instance Array[Object] */
7011 var80 = 3;
7012 var81 = NEW_array__NativeArray(var80, &type_array__NativeArraykernel__Object);
7013 ((struct instance_array__NativeArray*)var81)->values[0] = (val*) var68;
7014 ((struct instance_array__NativeArray*)var81)->values[1] = (val*) var73;
7015 ((struct instance_array__NativeArray*)var81)->values[2] = (val*) var75;
7016 ((void (*)(val*, val*, long))(var79->class->vft[COLOR_array__Array__with_native]))(var79, var81, var80) /* with_native on <var79:Array[Object]>*/;
7017 CHECK_NEW_array__Array(var79);
7018 }
7019 var82 = ((val* (*)(val*))(var79->class->vft[COLOR_string__Object__to_s]))(var79) /* to_s on <var79:Array[Object]>*/;
7020 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var82) /* add on <self:GlobalCompilerVisitor>*/;
7021 } else {
7022 if (varonce83) {
7023 var84 = varonce83;
7024 } else {
7025 var85 = "case ";
7026 var86 = 5;
7027 var87 = string__NativeString__to_s_with_length(var85, var86);
7028 var84 = var87;
7029 varonce83 = var84;
7030 }
7031 var88 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7032 var89 = ((val* (*)(val*, val*))(var88->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var88, var_t) /* classid on <var88:AbstractCompiler(GlobalCompiler)>*/;
7033 if (varonce90) {
7034 var91 = varonce90;
7035 } else {
7036 var92 = ":";
7037 var93 = 1;
7038 var94 = string__NativeString__to_s_with_length(var92, var93);
7039 var91 = var94;
7040 varonce90 = var91;
7041 }
7042 var95 = NEW_array__Array(&type_array__Arraykernel__Object);
7043 { /* var95 = array_instance Array[Object] */
7044 var96 = 3;
7045 var97 = NEW_array__NativeArray(var96, &type_array__NativeArraykernel__Object);
7046 ((struct instance_array__NativeArray*)var97)->values[0] = (val*) var84;
7047 ((struct instance_array__NativeArray*)var97)->values[1] = (val*) var89;
7048 ((struct instance_array__NativeArray*)var97)->values[2] = (val*) var91;
7049 ((void (*)(val*, val*, long))(var95->class->vft[COLOR_array__Array__with_native]))(var95, var97, var96) /* with_native on <var95:Array[Object]>*/;
7050 CHECK_NEW_array__Array(var95);
7051 }
7052 var98 = ((val* (*)(val*))(var95->class->vft[COLOR_string__Object__to_s]))(var95) /* to_s on <var95:Array[Object]>*/;
7053 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var98) /* add on <self:GlobalCompilerVisitor>*/;
7054 }
7055 var99 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
7056 var_recv2 = var99;
7057 var100 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7058 var101 = ((val* (*)(val*))(var100->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var100) /* static_mtype on <var100:MPropDef(MAttributeDef)>*/;
7059 if (var101 == NULL) {
7060 fprintf(stderr, "Runtime error: %s", "Cast failed");
7061 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 599);
7062 exit(1);
7063 }
7064 var_ta = var101;
7065 var102 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7066 var_ta = var102;
7067 if (varonce103) {
7068 var104 = varonce103;
7069 } else {
7070 var105 = "((struct ";
7071 var106 = 9;
7072 var107 = string__NativeString__to_s_with_length(var105, var106);
7073 var104 = var107;
7074 varonce103 = var104;
7075 }
7076 var108 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
7077 if (varonce109) {
7078 var110 = varonce109;
7079 } else {
7080 var111 = "*)";
7081 var112 = 2;
7082 var113 = string__NativeString__to_s_with_length(var111, var112);
7083 var110 = var113;
7084 varonce109 = var110;
7085 }
7086 if (varonce114) {
7087 var115 = varonce114;
7088 } else {
7089 var116 = ")->";
7090 var117 = 3;
7091 var118 = string__NativeString__to_s_with_length(var116, var117);
7092 var115 = var118;
7093 varonce114 = var115;
7094 }
7095 var119 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7096 var120 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var119) /* c_name on <var119:MPropDef(MAttributeDef)>*/;
7097 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
7098 { /* var121 = array_instance Array[Object] */
7099 var122 = 6;
7100 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
7101 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var104;
7102 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var108;
7103 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var110;
7104 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var_recv;
7105 ((struct instance_array__NativeArray*)var123)->values[4] = (val*) var115;
7106 ((struct instance_array__NativeArray*)var123)->values[5] = (val*) var120;
7107 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
7108 CHECK_NEW_array__Array(var121);
7109 }
7110 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
7111 var125 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var124, var_ta) /* new_expr on <self:GlobalCompilerVisitor>*/;
7112 var_attr = var125;
7113 /* <var_ta:MType> isa MNullableType */
7114 cltype = type_model__MNullableType.color;
7115 idtype = type_model__MNullableType.id;
7116 if(cltype >= var_ta->type->table_size) {
7117 var126 = 0;
7118 } else {
7119 var126 = var_ta->type->type_table[cltype] == idtype;
7120 }
7121 var127 = !var126;
7122 if (var127){
7123 var128 = ((val* (*)(val*))(var_ta->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_ta) /* ctype on <var_ta:MType>*/;
7124 if (varonce129) {
7125 var130 = varonce129;
7126 } else {
7127 var131 = "val*";
7128 var132 = 4;
7129 var133 = string__NativeString__to_s_with_length(var131, var132);
7130 var130 = var133;
7131 varonce129 = var130;
7132 }
7133 var134 = ((short int (*)(val*, val*))(var128->class->vft[COLOR_kernel__Object___61d_61d]))(var128, var130) /* == on <var128:String>*/;
7134 if (var134){
7135 if (varonce135) {
7136 var136 = varonce135;
7137 } else {
7138 var137 = " = (";
7139 var138 = 4;
7140 var139 = string__NativeString__to_s_with_length(var137, var138);
7141 var136 = var139;
7142 varonce135 = var136;
7143 }
7144 if (varonce140) {
7145 var141 = varonce140;
7146 } else {
7147 var142 = " != NULL);";
7148 var143 = 10;
7149 var144 = string__NativeString__to_s_with_length(var142, var143);
7150 var141 = var144;
7151 varonce140 = var141;
7152 }
7153 var145 = NEW_array__Array(&type_array__Arraykernel__Object);
7154 { /* var145 = array_instance Array[Object] */
7155 var146 = 4;
7156 var147 = NEW_array__NativeArray(var146, &type_array__NativeArraykernel__Object);
7157 ((struct instance_array__NativeArray*)var147)->values[0] = (val*) var_res;
7158 ((struct instance_array__NativeArray*)var147)->values[1] = (val*) var136;
7159 ((struct instance_array__NativeArray*)var147)->values[2] = (val*) var_attr;
7160 ((struct instance_array__NativeArray*)var147)->values[3] = (val*) var141;
7161 ((void (*)(val*, val*, long))(var145->class->vft[COLOR_array__Array__with_native]))(var145, var147, var146) /* with_native on <var145:Array[Object]>*/;
7162 CHECK_NEW_array__Array(var145);
7163 }
7164 var148 = ((val* (*)(val*))(var145->class->vft[COLOR_string__Object__to_s]))(var145) /* to_s on <var145:Array[Object]>*/;
7165 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var148) /* add on <self:GlobalCompilerVisitor>*/;
7166 } else {
7167 if (varonce149) {
7168 var150 = varonce149;
7169 } else {
7170 var151 = " = 1; /*NOTYET isset on primitive attributes*/";
7171 var152 = 46;
7172 var153 = string__NativeString__to_s_with_length(var151, var152);
7173 var150 = var153;
7174 varonce149 = var150;
7175 }
7176 var154 = NEW_array__Array(&type_array__Arraykernel__Object);
7177 { /* var154 = array_instance Array[Object] */
7178 var155 = 2;
7179 var156 = NEW_array__NativeArray(var155, &type_array__NativeArraykernel__Object);
7180 ((struct instance_array__NativeArray*)var156)->values[0] = (val*) var_res;
7181 ((struct instance_array__NativeArray*)var156)->values[1] = (val*) var150;
7182 ((void (*)(val*, val*, long))(var154->class->vft[COLOR_array__Array__with_native]))(var154, var156, var155) /* with_native on <var154:Array[Object]>*/;
7183 CHECK_NEW_array__Array(var154);
7184 }
7185 var157 = ((val* (*)(val*))(var154->class->vft[COLOR_string__Object__to_s]))(var154) /* to_s on <var154:Array[Object]>*/;
7186 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var157) /* add on <self:GlobalCompilerVisitor>*/;
7187 }
7188 } else {
7189 }
7190 if (varonce158) {
7191 var159 = varonce158;
7192 } else {
7193 var160 = "break;";
7194 var161 = 6;
7195 var162 = string__NativeString__to_s_with_length(var160, var161);
7196 var159 = var162;
7197 varonce158 = var159;
7198 }
7199 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var159) /* add on <self:GlobalCompilerVisitor>*/;
7200 CONTINUE_label: (void)0;
7201 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__next]))(var59) /* next on <var59:Iterator[nullable Object]>*/;
7202 }
7203 BREAK_label: (void)0;
7204 var163 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7205 var164 = ((short int (*)(val*))(var163->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var163) /* hardening on <var163:AbstractCompiler(GlobalCompiler)>*/;
7206 if (var164){
7207 if (varonce165) {
7208 var166 = varonce165;
7209 } else {
7210 var167 = "default: /* Bug */";
7211 var168 = 18;
7212 var169 = string__NativeString__to_s_with_length(var167, var168);
7213 var166 = var169;
7214 varonce165 = var166;
7215 }
7216 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var166) /* add on <self:GlobalCompilerVisitor>*/;
7217 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7218 } else {
7219 }
7220 if (varonce170) {
7221 var171 = varonce170;
7222 } else {
7223 var172 = "}";
7224 var173 = 1;
7225 var174 = string__NativeString__to_s_with_length(var172, var173);
7226 var171 = var174;
7227 varonce170 = var171;
7228 }
7229 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
7230 var = var_res;
7231 goto RET_LABEL;
7232 RET_LABEL:;
7233 return var;
7234 }
7235 /* method global_compiler#GlobalCompilerVisitor#isset_attribute for (self: Object, MAttribute, RuntimeVariable): RuntimeVariable */
7236 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__isset_attribute(val* self, val* p0, val* p1) {
7237 val* var /* : RuntimeVariable */;
7238 val* var1 /* : RuntimeVariable */;
7239 var1 = global_compiler__GlobalCompilerVisitor__isset_attribute(self, p0, p1);
7240 var = var1;
7241 RET_LABEL:;
7242 return var;
7243 }
7244 /* method global_compiler#GlobalCompilerVisitor#read_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable): RuntimeVariable */
7245 val* global_compiler__GlobalCompilerVisitor__read_attribute(val* self, val* p0, val* p1) {
7246 val* var /* : RuntimeVariable */;
7247 val* var_a /* var a: MAttribute */;
7248 val* var_recv /* var recv: RuntimeVariable */;
7249 val* var1 /* : Array[MClassType] */;
7250 val* var_types /* var types: Array[MClassType] */;
7251 val* var2 /* : MPropDef */;
7252 val* var3 /* : nullable MType */;
7253 val* var_ret /* var ret: MType */;
7254 val* var4 /* : MType */;
7255 val* var5 /* : RuntimeVariable */;
7256 val* var_res /* var res: RuntimeVariable */;
7257 short int var6 /* : Bool */;
7258 static val* varonce;
7259 val* var7 /* : String */;
7260 char* var8 /* : NativeString */;
7261 long var9 /* : Int */;
7262 val* var10 /* : String */;
7263 val* var11 /* : String */;
7264 static val* varonce12;
7265 val* var13 /* : String */;
7266 char* var14 /* : NativeString */;
7267 long var15 /* : Int */;
7268 val* var16 /* : String */;
7269 static val* varonce17;
7270 val* var18 /* : String */;
7271 char* var19 /* : NativeString */;
7272 long var20 /* : Int */;
7273 val* var21 /* : String */;
7274 val* var22 /* : Array[Object] */;
7275 long var23 /* : Int */;
7276 val* var24 /* : NativeArray[Object] */;
7277 val* var25 /* : String */;
7278 static val* varonce26;
7279 val* var27 /* : String */;
7280 char* var28 /* : NativeString */;
7281 long var29 /* : Int */;
7282 val* var30 /* : String */;
7283 static val* varonce31;
7284 val* var32 /* : String */;
7285 char* var33 /* : NativeString */;
7286 long var34 /* : Int */;
7287 val* var35 /* : String */;
7288 val* var36 /* : String */;
7289 static val* varonce37;
7290 val* var38 /* : String */;
7291 char* var39 /* : NativeString */;
7292 long var40 /* : Int */;
7293 val* var41 /* : String */;
7294 val* var42 /* : Array[Object] */;
7295 long var43 /* : Int */;
7296 val* var44 /* : NativeArray[Object] */;
7297 val* var45 /* : String */;
7298 static val* varonce46;
7299 val* var47 /* : String */;
7300 char* var48 /* : NativeString */;
7301 long var49 /* : Int */;
7302 val* var50 /* : String */;
7303 static val* varonce51;
7304 val* var52 /* : String */;
7305 char* var53 /* : NativeString */;
7306 long var54 /* : Int */;
7307 val* var55 /* : String */;
7308 val* var56 /* : Array[Object] */;
7309 long var57 /* : Int */;
7310 val* var58 /* : NativeArray[Object] */;
7311 val* var59 /* : String */;
7312 val* var60 /* : nullable Object */;
7313 val* var_last /* var last: MClassType */;
7314 val* var61 /* : Iterator[nullable Object] */;
7315 short int var62 /* : Bool */;
7316 val* var63 /* : nullable Object */;
7317 val* var_t /* var t: MClassType */;
7318 short int var64 /* : Bool */;
7319 val* var65 /* : AbstractCompiler */;
7320 short int var66 /* : Bool */;
7321 short int var67 /* : Bool */;
7322 short int var_ /* var : Bool */;
7323 short int var68 /* : Bool */;
7324 static val* varonce69;
7325 val* var70 /* : String */;
7326 char* var71 /* : NativeString */;
7327 long var72 /* : Int */;
7328 val* var73 /* : String */;
7329 val* var74 /* : AbstractCompiler */;
7330 val* var75 /* : String */;
7331 static val* varonce76;
7332 val* var77 /* : String */;
7333 char* var78 /* : NativeString */;
7334 long var79 /* : Int */;
7335 val* var80 /* : String */;
7336 val* var81 /* : Array[Object] */;
7337 long var82 /* : Int */;
7338 val* var83 /* : NativeArray[Object] */;
7339 val* var84 /* : String */;
7340 static val* varonce85;
7341 val* var86 /* : String */;
7342 char* var87 /* : NativeString */;
7343 long var88 /* : Int */;
7344 val* var89 /* : String */;
7345 val* var90 /* : AbstractCompiler */;
7346 val* var91 /* : String */;
7347 static val* varonce92;
7348 val* var93 /* : String */;
7349 char* var94 /* : NativeString */;
7350 long var95 /* : Int */;
7351 val* var96 /* : String */;
7352 val* var97 /* : Array[Object] */;
7353 long var98 /* : Int */;
7354 val* var99 /* : NativeArray[Object] */;
7355 val* var100 /* : String */;
7356 val* var101 /* : RuntimeVariable */;
7357 val* var_recv2 /* var recv2: RuntimeVariable */;
7358 val* var102 /* : MPropDef */;
7359 val* var103 /* : nullable MType */;
7360 val* var_ta /* var ta: MType */;
7361 val* var104 /* : MType */;
7362 static val* varonce105;
7363 val* var106 /* : String */;
7364 char* var107 /* : NativeString */;
7365 long var108 /* : Int */;
7366 val* var109 /* : String */;
7367 val* var110 /* : String */;
7368 static val* varonce111;
7369 val* var112 /* : String */;
7370 char* var113 /* : NativeString */;
7371 long var114 /* : Int */;
7372 val* var115 /* : String */;
7373 static val* varonce116;
7374 val* var117 /* : String */;
7375 char* var118 /* : NativeString */;
7376 long var119 /* : Int */;
7377 val* var120 /* : String */;
7378 val* var121 /* : MPropDef */;
7379 val* var122 /* : String */;
7380 val* var123 /* : Array[Object] */;
7381 long var124 /* : Int */;
7382 val* var125 /* : NativeArray[Object] */;
7383 val* var126 /* : String */;
7384 val* var127 /* : RuntimeVariable */;
7385 val* var_res2 /* var res2: RuntimeVariable */;
7386 short int var128 /* : Bool */;
7387 short int var129 /* : Bool */;
7388 int cltype;
7389 int idtype;
7390 short int var130 /* : Bool */;
7391 short int var_131 /* var : Bool */;
7392 val* var132 /* : AbstractCompiler */;
7393 val* var133 /* : ModelBuilder */;
7394 val* var134 /* : ToolContext */;
7395 val* var135 /* : OptionBool */;
7396 val* var136 /* : nullable Object */;
7397 short int var137 /* : Bool */;
7398 short int var138 /* : Bool */;
7399 val* var139 /* : String */;
7400 static val* varonce140;
7401 val* var141 /* : String */;
7402 char* var142 /* : NativeString */;
7403 long var143 /* : Int */;
7404 val* var144 /* : String */;
7405 short int var145 /* : Bool */;
7406 static val* varonce146;
7407 val* var147 /* : String */;
7408 char* var148 /* : NativeString */;
7409 long var149 /* : Int */;
7410 val* var150 /* : String */;
7411 static val* varonce151;
7412 val* var152 /* : String */;
7413 char* var153 /* : NativeString */;
7414 long var154 /* : Int */;
7415 val* var155 /* : String */;
7416 val* var156 /* : Array[Object] */;
7417 long var157 /* : Int */;
7418 val* var158 /* : NativeArray[Object] */;
7419 val* var159 /* : String */;
7420 static val* varonce160;
7421 val* var161 /* : String */;
7422 char* var162 /* : NativeString */;
7423 long var163 /* : Int */;
7424 val* var164 /* : String */;
7425 val* var165 /* : String */;
7426 val* var166 /* : Array[Object] */;
7427 long var167 /* : Int */;
7428 val* var168 /* : NativeArray[Object] */;
7429 val* var169 /* : String */;
7430 static val* varonce170;
7431 val* var171 /* : String */;
7432 char* var172 /* : NativeString */;
7433 long var173 /* : Int */;
7434 val* var174 /* : String */;
7435 static val* varonce175;
7436 val* var176 /* : String */;
7437 char* var177 /* : NativeString */;
7438 long var178 /* : Int */;
7439 val* var179 /* : String */;
7440 static val* varonce180;
7441 val* var181 /* : String */;
7442 char* var182 /* : NativeString */;
7443 long var183 /* : Int */;
7444 val* var184 /* : String */;
7445 val* var185 /* : AbstractCompiler */;
7446 short int var186 /* : Bool */;
7447 static val* varonce187;
7448 val* var188 /* : String */;
7449 char* var189 /* : NativeString */;
7450 long var190 /* : Int */;
7451 val* var191 /* : String */;
7452 static val* varonce192;
7453 val* var193 /* : String */;
7454 char* var194 /* : NativeString */;
7455 long var195 /* : Int */;
7456 val* var196 /* : String */;
7457 var_a = p0;
7458 var_recv = p1;
7459 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
7460 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
7461 var_types = var1;
7462 var2 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7463 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var2) /* static_mtype on <var2:MPropDef(MAttributeDef)>*/;
7464 if (var3 == NULL) {
7465 fprintf(stderr, "Runtime error: %s", "Cast failed");
7466 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 626);
7467 exit(1);
7468 }
7469 var_ret = var3;
7470 var4 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7471 var_ret = var4;
7472 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
7473 var_res = var5;
7474 var6 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
7475 if (var6){
7476 if (varonce) {
7477 var7 = varonce;
7478 } else {
7479 var8 = "/*BUG: no live types for ";
7480 var9 = 25;
7481 var10 = string__NativeString__to_s_with_length(var8, var9);
7482 var7 = var10;
7483 varonce = var7;
7484 }
7485 var11 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7486 if (varonce12) {
7487 var13 = varonce12;
7488 } else {
7489 var14 = " . ";
7490 var15 = 3;
7491 var16 = string__NativeString__to_s_with_length(var14, var15);
7492 var13 = var16;
7493 varonce12 = var13;
7494 }
7495 if (varonce17) {
7496 var18 = varonce17;
7497 } else {
7498 var19 = "*/";
7499 var20 = 2;
7500 var21 = string__NativeString__to_s_with_length(var19, var20);
7501 var18 = var21;
7502 varonce17 = var18;
7503 }
7504 var22 = NEW_array__Array(&type_array__Arraykernel__Object);
7505 { /* var22 = array_instance Array[Object] */
7506 var23 = 5;
7507 var24 = NEW_array__NativeArray(var23, &type_array__NativeArraykernel__Object);
7508 ((struct instance_array__NativeArray*)var24)->values[0] = (val*) var7;
7509 ((struct instance_array__NativeArray*)var24)->values[1] = (val*) var11;
7510 ((struct instance_array__NativeArray*)var24)->values[2] = (val*) var13;
7511 ((struct instance_array__NativeArray*)var24)->values[3] = (val*) var_a;
7512 ((struct instance_array__NativeArray*)var24)->values[4] = (val*) var18;
7513 ((void (*)(val*, val*, long))(var22->class->vft[COLOR_array__Array__with_native]))(var22, var24, var23) /* with_native on <var22:Array[Object]>*/;
7514 CHECK_NEW_array__Array(var22);
7515 }
7516 var25 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__to_s]))(var22) /* to_s on <var22:Array[Object]>*/;
7517 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var25) /* add on <self:GlobalCompilerVisitor>*/;
7518 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7519 var = var_res;
7520 goto RET_LABEL;
7521 } else {
7522 }
7523 if (varonce26) {
7524 var27 = varonce26;
7525 } else {
7526 var28 = "/* read ";
7527 var29 = 8;
7528 var30 = string__NativeString__to_s_with_length(var28, var29);
7529 var27 = var30;
7530 varonce26 = var27;
7531 }
7532 if (varonce31) {
7533 var32 = varonce31;
7534 } else {
7535 var33 = " on ";
7536 var34 = 4;
7537 var35 = string__NativeString__to_s_with_length(var33, var34);
7538 var32 = var35;
7539 varonce31 = var32;
7540 }
7541 var36 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7542 if (varonce37) {
7543 var38 = varonce37;
7544 } else {
7545 var39 = " */";
7546 var40 = 3;
7547 var41 = string__NativeString__to_s_with_length(var39, var40);
7548 var38 = var41;
7549 varonce37 = var38;
7550 }
7551 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
7552 { /* var42 = array_instance Array[Object] */
7553 var43 = 5;
7554 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
7555 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var27;
7556 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_a;
7557 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var32;
7558 ((struct instance_array__NativeArray*)var44)->values[3] = (val*) var36;
7559 ((struct instance_array__NativeArray*)var44)->values[4] = (val*) var38;
7560 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
7561 CHECK_NEW_array__Array(var42);
7562 }
7563 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
7564 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var45) /* add on <self:GlobalCompilerVisitor>*/;
7565 if (varonce46) {
7566 var47 = varonce46;
7567 } else {
7568 var48 = "switch(";
7569 var49 = 7;
7570 var50 = string__NativeString__to_s_with_length(var48, var49);
7571 var47 = var50;
7572 varonce46 = var47;
7573 }
7574 if (varonce51) {
7575 var52 = varonce51;
7576 } else {
7577 var53 = "->classid) {";
7578 var54 = 12;
7579 var55 = string__NativeString__to_s_with_length(var53, var54);
7580 var52 = var55;
7581 varonce51 = var52;
7582 }
7583 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
7584 { /* var56 = array_instance Array[Object] */
7585 var57 = 3;
7586 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
7587 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var47;
7588 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var_recv;
7589 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var52;
7590 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
7591 CHECK_NEW_array__Array(var56);
7592 }
7593 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
7594 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
7595 var60 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
7596 var_last = var60;
7597 var61 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
7598 for(;;) {
7599 var62 = ((short int (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var61) /* is_ok on <var61:Iterator[nullable Object]>*/;
7600 if(!var62) break;
7601 var63 = ((val* (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__item]))(var61) /* item on <var61:Iterator[nullable Object]>*/;
7602 var_t = var63;
7603 var65 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7604 var66 = ((short int (*)(val*))(var65->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var65) /* hardening on <var65:AbstractCompiler(GlobalCompiler)>*/;
7605 var67 = !var66;
7606 var_ = var67;
7607 if (var67){
7608 var68 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
7609 var64 = var68;
7610 } else {
7611 var64 = var_;
7612 }
7613 if (var64){
7614 if (varonce69) {
7615 var70 = varonce69;
7616 } else {
7617 var71 = "default: /*";
7618 var72 = 11;
7619 var73 = string__NativeString__to_s_with_length(var71, var72);
7620 var70 = var73;
7621 varonce69 = var70;
7622 }
7623 var74 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7624 var75 = ((val* (*)(val*, val*))(var74->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var74, var_t) /* classid on <var74:AbstractCompiler(GlobalCompiler)>*/;
7625 if (varonce76) {
7626 var77 = varonce76;
7627 } else {
7628 var78 = "*/";
7629 var79 = 2;
7630 var80 = string__NativeString__to_s_with_length(var78, var79);
7631 var77 = var80;
7632 varonce76 = var77;
7633 }
7634 var81 = NEW_array__Array(&type_array__Arraykernel__Object);
7635 { /* var81 = array_instance Array[Object] */
7636 var82 = 3;
7637 var83 = NEW_array__NativeArray(var82, &type_array__NativeArraykernel__Object);
7638 ((struct instance_array__NativeArray*)var83)->values[0] = (val*) var70;
7639 ((struct instance_array__NativeArray*)var83)->values[1] = (val*) var75;
7640 ((struct instance_array__NativeArray*)var83)->values[2] = (val*) var77;
7641 ((void (*)(val*, val*, long))(var81->class->vft[COLOR_array__Array__with_native]))(var81, var83, var82) /* with_native on <var81:Array[Object]>*/;
7642 CHECK_NEW_array__Array(var81);
7643 }
7644 var84 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__to_s]))(var81) /* to_s on <var81:Array[Object]>*/;
7645 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var84) /* add on <self:GlobalCompilerVisitor>*/;
7646 } else {
7647 if (varonce85) {
7648 var86 = varonce85;
7649 } else {
7650 var87 = "case ";
7651 var88 = 5;
7652 var89 = string__NativeString__to_s_with_length(var87, var88);
7653 var86 = var89;
7654 varonce85 = var86;
7655 }
7656 var90 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7657 var91 = ((val* (*)(val*, val*))(var90->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var90, var_t) /* classid on <var90:AbstractCompiler(GlobalCompiler)>*/;
7658 if (varonce92) {
7659 var93 = varonce92;
7660 } else {
7661 var94 = ":";
7662 var95 = 1;
7663 var96 = string__NativeString__to_s_with_length(var94, var95);
7664 var93 = var96;
7665 varonce92 = var93;
7666 }
7667 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
7668 { /* var97 = array_instance Array[Object] */
7669 var98 = 3;
7670 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
7671 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var86;
7672 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var91;
7673 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
7674 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
7675 CHECK_NEW_array__Array(var97);
7676 }
7677 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
7678 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var100) /* add on <self:GlobalCompilerVisitor>*/;
7679 }
7680 var101 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
7681 var_recv2 = var101;
7682 var102 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7683 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var102) /* static_mtype on <var102:MPropDef(MAttributeDef)>*/;
7684 if (var103 == NULL) {
7685 fprintf(stderr, "Runtime error: %s", "Cast failed");
7686 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 645);
7687 exit(1);
7688 }
7689 var_ta = var103;
7690 var104 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7691 var_ta = var104;
7692 if (varonce105) {
7693 var106 = varonce105;
7694 } else {
7695 var107 = "((struct ";
7696 var108 = 9;
7697 var109 = string__NativeString__to_s_with_length(var107, var108);
7698 var106 = var109;
7699 varonce105 = var106;
7700 }
7701 var110 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
7702 if (varonce111) {
7703 var112 = varonce111;
7704 } else {
7705 var113 = "*)";
7706 var114 = 2;
7707 var115 = string__NativeString__to_s_with_length(var113, var114);
7708 var112 = var115;
7709 varonce111 = var112;
7710 }
7711 if (varonce116) {
7712 var117 = varonce116;
7713 } else {
7714 var118 = ")->";
7715 var119 = 3;
7716 var120 = string__NativeString__to_s_with_length(var118, var119);
7717 var117 = var120;
7718 varonce116 = var117;
7719 }
7720 var121 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7721 var122 = ((val* (*)(val*))(var121->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var121) /* c_name on <var121:MPropDef(MAttributeDef)>*/;
7722 var123 = NEW_array__Array(&type_array__Arraykernel__Object);
7723 { /* var123 = array_instance Array[Object] */
7724 var124 = 6;
7725 var125 = NEW_array__NativeArray(var124, &type_array__NativeArraykernel__Object);
7726 ((struct instance_array__NativeArray*)var125)->values[0] = (val*) var106;
7727 ((struct instance_array__NativeArray*)var125)->values[1] = (val*) var110;
7728 ((struct instance_array__NativeArray*)var125)->values[2] = (val*) var112;
7729 ((struct instance_array__NativeArray*)var125)->values[3] = (val*) var_recv;
7730 ((struct instance_array__NativeArray*)var125)->values[4] = (val*) var117;
7731 ((struct instance_array__NativeArray*)var125)->values[5] = (val*) var122;
7732 ((void (*)(val*, val*, long))(var123->class->vft[COLOR_array__Array__with_native]))(var123, var125, var124) /* with_native on <var123:Array[Object]>*/;
7733 CHECK_NEW_array__Array(var123);
7734 }
7735 var126 = ((val* (*)(val*))(var123->class->vft[COLOR_string__Object__to_s]))(var123) /* to_s on <var123:Array[Object]>*/;
7736 var127 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var126, var_ta) /* new_expr on <self:GlobalCompilerVisitor>*/;
7737 var_res2 = var127;
7738 /* <var_ta:MType> isa MNullableType */
7739 cltype = type_model__MNullableType.color;
7740 idtype = type_model__MNullableType.id;
7741 if(cltype >= var_ta->type->table_size) {
7742 var129 = 0;
7743 } else {
7744 var129 = var_ta->type->type_table[cltype] == idtype;
7745 }
7746 var130 = !var129;
7747 var_131 = var130;
7748 if (var130){
7749 var132 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7750 var133 = ((val* (*)(val*))(var132->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var132) /* modelbuilder on <var132:AbstractCompiler(GlobalCompiler)>*/;
7751 var134 = ((val* (*)(val*))(var133->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var133) /* toolcontext on <var133:ModelBuilder>*/;
7752 var135 = ((val* (*)(val*))(var134->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_other]))(var134) /* opt_no_check_other on <var134:ToolContext>*/;
7753 var136 = ((val* (*)(val*))(var135->class->vft[COLOR_opts__Option__value]))(var135) /* value on <var135:OptionBool>*/;
7754 var137 = ((struct instance_kernel__Bool*)var136)->value; /* autounbox from nullable Object to Bool */;
7755 var138 = !var137;
7756 var128 = var138;
7757 } else {
7758 var128 = var_131;
7759 }
7760 if (var128){
7761 var139 = ((val* (*)(val*))(var_ta->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_ta) /* ctype on <var_ta:MType>*/;
7762 if (varonce140) {
7763 var141 = varonce140;
7764 } else {
7765 var142 = "val*";
7766 var143 = 4;
7767 var144 = string__NativeString__to_s_with_length(var142, var143);
7768 var141 = var144;
7769 varonce140 = var141;
7770 }
7771 var145 = ((short int (*)(val*, val*))(var139->class->vft[COLOR_kernel__Object___61d_61d]))(var139, var141) /* == on <var139:String>*/;
7772 if (var145){
7773 if (varonce146) {
7774 var147 = varonce146;
7775 } else {
7776 var148 = "if (";
7777 var149 = 4;
7778 var150 = string__NativeString__to_s_with_length(var148, var149);
7779 var147 = var150;
7780 varonce146 = var147;
7781 }
7782 if (varonce151) {
7783 var152 = varonce151;
7784 } else {
7785 var153 = " == NULL) {";
7786 var154 = 11;
7787 var155 = string__NativeString__to_s_with_length(var153, var154);
7788 var152 = var155;
7789 varonce151 = var152;
7790 }
7791 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
7792 { /* var156 = array_instance Array[Object] */
7793 var157 = 3;
7794 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
7795 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var147;
7796 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var_res2;
7797 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var152;
7798 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
7799 CHECK_NEW_array__Array(var156);
7800 }
7801 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
7802 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var159) /* add on <self:GlobalCompilerVisitor>*/;
7803 if (varonce160) {
7804 var161 = varonce160;
7805 } else {
7806 var162 = "Uninitialized attribute ";
7807 var163 = 24;
7808 var164 = string__NativeString__to_s_with_length(var162, var163);
7809 var161 = var164;
7810 varonce160 = var161;
7811 }
7812 var165 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__name]))(var_a) /* name on <var_a:MAttribute>*/;
7813 var166 = NEW_array__Array(&type_array__Arraykernel__Object);
7814 { /* var166 = array_instance Array[Object] */
7815 var167 = 2;
7816 var168 = NEW_array__NativeArray(var167, &type_array__NativeArraykernel__Object);
7817 ((struct instance_array__NativeArray*)var168)->values[0] = (val*) var161;
7818 ((struct instance_array__NativeArray*)var168)->values[1] = (val*) var165;
7819 ((void (*)(val*, val*, long))(var166->class->vft[COLOR_array__Array__with_native]))(var166, var168, var167) /* with_native on <var166:Array[Object]>*/;
7820 CHECK_NEW_array__Array(var166);
7821 }
7822 var169 = ((val* (*)(val*))(var166->class->vft[COLOR_string__Object__to_s]))(var166) /* to_s on <var166:Array[Object]>*/;
7823 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var169) /* add_abort on <self:GlobalCompilerVisitor>*/;
7824 if (varonce170) {
7825 var171 = varonce170;
7826 } else {
7827 var172 = "}";
7828 var173 = 1;
7829 var174 = string__NativeString__to_s_with_length(var172, var173);
7830 var171 = var174;
7831 varonce170 = var171;
7832 }
7833 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
7834 } else {
7835 if (varonce175) {
7836 var176 = varonce175;
7837 } else {
7838 var177 = "/*NOTYET isset on primitive attributes*/";
7839 var178 = 40;
7840 var179 = string__NativeString__to_s_with_length(var177, var178);
7841 var176 = var179;
7842 varonce175 = var176;
7843 }
7844 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var176) /* add on <self:GlobalCompilerVisitor>*/;
7845 }
7846 } else {
7847 }
7848 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
7849 if (varonce180) {
7850 var181 = varonce180;
7851 } else {
7852 var182 = "break;";
7853 var183 = 6;
7854 var184 = string__NativeString__to_s_with_length(var182, var183);
7855 var181 = var184;
7856 varonce180 = var181;
7857 }
7858 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var181) /* add on <self:GlobalCompilerVisitor>*/;
7859 CONTINUE_label: (void)0;
7860 ((void (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__next]))(var61) /* next on <var61:Iterator[nullable Object]>*/;
7861 }
7862 BREAK_label: (void)0;
7863 var185 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7864 var186 = ((short int (*)(val*))(var185->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var185) /* hardening on <var185:AbstractCompiler(GlobalCompiler)>*/;
7865 if (var186){
7866 if (varonce187) {
7867 var188 = varonce187;
7868 } else {
7869 var189 = "default: /* Bug */";
7870 var190 = 18;
7871 var191 = string__NativeString__to_s_with_length(var189, var190);
7872 var188 = var191;
7873 varonce187 = var188;
7874 }
7875 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
7876 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7877 } else {
7878 }
7879 if (varonce192) {
7880 var193 = varonce192;
7881 } else {
7882 var194 = "}";
7883 var195 = 1;
7884 var196 = string__NativeString__to_s_with_length(var194, var195);
7885 var193 = var196;
7886 varonce192 = var193;
7887 }
7888 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var193) /* add on <self:GlobalCompilerVisitor>*/;
7889 var = var_res;
7890 goto RET_LABEL;
7891 RET_LABEL:;
7892 return var;
7893 }
7894 /* method global_compiler#GlobalCompilerVisitor#read_attribute for (self: Object, MAttribute, RuntimeVariable): RuntimeVariable */
7895 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__read_attribute(val* self, val* p0, val* p1) {
7896 val* var /* : RuntimeVariable */;
7897 val* var1 /* : RuntimeVariable */;
7898 var1 = global_compiler__GlobalCompilerVisitor__read_attribute(self, p0, p1);
7899 var = var1;
7900 RET_LABEL:;
7901 return var;
7902 }
7903 /* method global_compiler#GlobalCompilerVisitor#write_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable, RuntimeVariable) */
7904 void global_compiler__GlobalCompilerVisitor__write_attribute(val* self, val* p0, val* p1, val* p2) {
7905 val* var_a /* var a: MAttribute */;
7906 val* var_recv /* var recv: RuntimeVariable */;
7907 val* var_value /* var value: RuntimeVariable */;
7908 val* var /* : Array[MClassType] */;
7909 val* var_types /* var types: Array[MClassType] */;
7910 short int var1 /* : Bool */;
7911 static val* varonce;
7912 val* var2 /* : String */;
7913 char* var3 /* : NativeString */;
7914 long var4 /* : Int */;
7915 val* var5 /* : String */;
7916 val* var6 /* : String */;
7917 static val* varonce7;
7918 val* var8 /* : String */;
7919 char* var9 /* : NativeString */;
7920 long var10 /* : Int */;
7921 val* var11 /* : String */;
7922 static val* varonce12;
7923 val* var13 /* : String */;
7924 char* var14 /* : NativeString */;
7925 long var15 /* : Int */;
7926 val* var16 /* : String */;
7927 val* var17 /* : Array[Object] */;
7928 long var18 /* : Int */;
7929 val* var19 /* : NativeArray[Object] */;
7930 val* var20 /* : String */;
7931 static val* varonce21;
7932 val* var22 /* : String */;
7933 char* var23 /* : NativeString */;
7934 long var24 /* : Int */;
7935 val* var25 /* : String */;
7936 static val* varonce26;
7937 val* var27 /* : String */;
7938 char* var28 /* : NativeString */;
7939 long var29 /* : Int */;
7940 val* var30 /* : String */;
7941 val* var31 /* : String */;
7942 static val* varonce32;
7943 val* var33 /* : String */;
7944 char* var34 /* : NativeString */;
7945 long var35 /* : Int */;
7946 val* var36 /* : String */;
7947 val* var37 /* : Array[Object] */;
7948 long var38 /* : Int */;
7949 val* var39 /* : NativeArray[Object] */;
7950 val* var40 /* : String */;
7951 static val* varonce41;
7952 val* var42 /* : String */;
7953 char* var43 /* : NativeString */;
7954 long var44 /* : Int */;
7955 val* var45 /* : String */;
7956 static val* varonce46;
7957 val* var47 /* : String */;
7958 char* var48 /* : NativeString */;
7959 long var49 /* : Int */;
7960 val* var50 /* : String */;
7961 val* var51 /* : Array[Object] */;
7962 long var52 /* : Int */;
7963 val* var53 /* : NativeArray[Object] */;
7964 val* var54 /* : String */;
7965 val* var55 /* : nullable Object */;
7966 val* var_last /* var last: MClassType */;
7967 val* var56 /* : Iterator[nullable Object] */;
7968 short int var57 /* : Bool */;
7969 val* var58 /* : nullable Object */;
7970 val* var_t /* var t: MClassType */;
7971 short int var59 /* : Bool */;
7972 val* var60 /* : AbstractCompiler */;
7973 short int var61 /* : Bool */;
7974 short int var62 /* : Bool */;
7975 short int var_ /* var : Bool */;
7976 short int var63 /* : Bool */;
7977 static val* varonce64;
7978 val* var65 /* : String */;
7979 char* var66 /* : NativeString */;
7980 long var67 /* : Int */;
7981 val* var68 /* : String */;
7982 val* var69 /* : AbstractCompiler */;
7983 val* var70 /* : String */;
7984 static val* varonce71;
7985 val* var72 /* : String */;
7986 char* var73 /* : NativeString */;
7987 long var74 /* : Int */;
7988 val* var75 /* : String */;
7989 val* var76 /* : Array[Object] */;
7990 long var77 /* : Int */;
7991 val* var78 /* : NativeArray[Object] */;
7992 val* var79 /* : String */;
7993 static val* varonce80;
7994 val* var81 /* : String */;
7995 char* var82 /* : NativeString */;
7996 long var83 /* : Int */;
7997 val* var84 /* : String */;
7998 val* var85 /* : AbstractCompiler */;
7999 val* var86 /* : String */;
8000 static val* varonce87;
8001 val* var88 /* : String */;
8002 char* var89 /* : NativeString */;
8003 long var90 /* : Int */;
8004 val* var91 /* : String */;
8005 val* var92 /* : Array[Object] */;
8006 long var93 /* : Int */;
8007 val* var94 /* : NativeArray[Object] */;
8008 val* var95 /* : String */;
8009 val* var96 /* : RuntimeVariable */;
8010 val* var_recv2 /* var recv2: RuntimeVariable */;
8011 val* var97 /* : MPropDef */;
8012 val* var98 /* : nullable MType */;
8013 val* var_ta /* var ta: MType */;
8014 val* var99 /* : MType */;
8015 static val* varonce100;
8016 val* var101 /* : String */;
8017 char* var102 /* : NativeString */;
8018 long var103 /* : Int */;
8019 val* var104 /* : String */;
8020 val* var105 /* : String */;
8021 static val* varonce106;
8022 val* var107 /* : String */;
8023 char* var108 /* : NativeString */;
8024 long var109 /* : Int */;
8025 val* var110 /* : String */;
8026 static val* varonce111;
8027 val* var112 /* : String */;
8028 char* var113 /* : NativeString */;
8029 long var114 /* : Int */;
8030 val* var115 /* : String */;
8031 val* var116 /* : MPropDef */;
8032 val* var117 /* : String */;
8033 static val* varonce118;
8034 val* var119 /* : String */;
8035 char* var120 /* : NativeString */;
8036 long var121 /* : Int */;
8037 val* var122 /* : String */;
8038 val* var123 /* : RuntimeVariable */;
8039 static val* varonce124;
8040 val* var125 /* : String */;
8041 char* var126 /* : NativeString */;
8042 long var127 /* : Int */;
8043 val* var128 /* : String */;
8044 val* var129 /* : Array[Object] */;
8045 long var130 /* : Int */;
8046 val* var131 /* : NativeArray[Object] */;
8047 val* var132 /* : String */;
8048 static val* varonce133;
8049 val* var134 /* : String */;
8050 char* var135 /* : NativeString */;
8051 long var136 /* : Int */;
8052 val* var137 /* : String */;
8053 val* var138 /* : AbstractCompiler */;
8054 short int var139 /* : Bool */;
8055 static val* varonce140;
8056 val* var141 /* : String */;
8057 char* var142 /* : NativeString */;
8058 long var143 /* : Int */;
8059 val* var144 /* : String */;
8060 static val* varonce145;
8061 val* var146 /* : String */;
8062 char* var147 /* : NativeString */;
8063 long var148 /* : Int */;
8064 val* var149 /* : String */;
8065 var_a = p0;
8066 var_recv = p1;
8067 var_value = p2;
8068 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
8069 var = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
8070 var_types = var;
8071 var1 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
8072 if (var1){
8073 if (varonce) {
8074 var2 = varonce;
8075 } else {
8076 var3 = "/*BUG: no live types for ";
8077 var4 = 25;
8078 var5 = string__NativeString__to_s_with_length(var3, var4);
8079 var2 = var5;
8080 varonce = var2;
8081 }
8082 var6 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
8083 if (varonce7) {
8084 var8 = varonce7;
8085 } else {
8086 var9 = " . ";
8087 var10 = 3;
8088 var11 = string__NativeString__to_s_with_length(var9, var10);
8089 var8 = var11;
8090 varonce7 = var8;
8091 }
8092 if (varonce12) {
8093 var13 = varonce12;
8094 } else {
8095 var14 = "*/";
8096 var15 = 2;
8097 var16 = string__NativeString__to_s_with_length(var14, var15);
8098 var13 = var16;
8099 varonce12 = var13;
8100 }
8101 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
8102 { /* var17 = array_instance Array[Object] */
8103 var18 = 5;
8104 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
8105 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var2;
8106 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var6;
8107 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var8;
8108 ((struct instance_array__NativeArray*)var19)->values[3] = (val*) var_a;
8109 ((struct instance_array__NativeArray*)var19)->values[4] = (val*) var13;
8110 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
8111 CHECK_NEW_array__Array(var17);
8112 }
8113 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
8114 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var20) /* add on <self:GlobalCompilerVisitor>*/;
8115 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
8116 goto RET_LABEL;
8117 } else {
8118 }
8119 if (varonce21) {
8120 var22 = varonce21;
8121 } else {
8122 var23 = "/* write ";
8123 var24 = 9;
8124 var25 = string__NativeString__to_s_with_length(var23, var24);
8125 var22 = var25;
8126 varonce21 = var22;
8127 }
8128 if (varonce26) {
8129 var27 = varonce26;
8130 } else {
8131 var28 = " on ";
8132 var29 = 4;
8133 var30 = string__NativeString__to_s_with_length(var28, var29);
8134 var27 = var30;
8135 varonce26 = var27;
8136 }
8137 var31 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
8138 if (varonce32) {
8139 var33 = varonce32;
8140 } else {
8141 var34 = " */";
8142 var35 = 3;
8143 var36 = string__NativeString__to_s_with_length(var34, var35);
8144 var33 = var36;
8145 varonce32 = var33;
8146 }
8147 var37 = NEW_array__Array(&type_array__Arraykernel__Object);
8148 { /* var37 = array_instance Array[Object] */
8149 var38 = 5;
8150 var39 = NEW_array__NativeArray(var38, &type_array__NativeArraykernel__Object);
8151 ((struct instance_array__NativeArray*)var39)->values[0] = (val*) var22;
8152 ((struct instance_array__NativeArray*)var39)->values[1] = (val*) var_a;
8153 ((struct instance_array__NativeArray*)var39)->values[2] = (val*) var27;
8154 ((struct instance_array__NativeArray*)var39)->values[3] = (val*) var31;
8155 ((struct instance_array__NativeArray*)var39)->values[4] = (val*) var33;
8156 ((void (*)(val*, val*, long))(var37->class->vft[COLOR_array__Array__with_native]))(var37, var39, var38) /* with_native on <var37:Array[Object]>*/;
8157 CHECK_NEW_array__Array(var37);
8158 }
8159 var40 = ((val* (*)(val*))(var37->class->vft[COLOR_string__Object__to_s]))(var37) /* to_s on <var37:Array[Object]>*/;
8160 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var40) /* add on <self:GlobalCompilerVisitor>*/;
8161 if (varonce41) {
8162 var42 = varonce41;
8163 } else {
8164 var43 = "switch(";
8165 var44 = 7;
8166 var45 = string__NativeString__to_s_with_length(var43, var44);
8167 var42 = var45;
8168 varonce41 = var42;
8169 }
8170 if (varonce46) {
8171 var47 = varonce46;
8172 } else {
8173 var48 = "->classid) {";
8174 var49 = 12;
8175 var50 = string__NativeString__to_s_with_length(var48, var49);
8176 var47 = var50;
8177 varonce46 = var47;
8178 }
8179 var51 = NEW_array__Array(&type_array__Arraykernel__Object);
8180 { /* var51 = array_instance Array[Object] */
8181 var52 = 3;
8182 var53 = NEW_array__NativeArray(var52, &type_array__NativeArraykernel__Object);
8183 ((struct instance_array__NativeArray*)var53)->values[0] = (val*) var42;
8184 ((struct instance_array__NativeArray*)var53)->values[1] = (val*) var_recv;
8185 ((struct instance_array__NativeArray*)var53)->values[2] = (val*) var47;
8186 ((void (*)(val*, val*, long))(var51->class->vft[COLOR_array__Array__with_native]))(var51, var53, var52) /* with_native on <var51:Array[Object]>*/;
8187 CHECK_NEW_array__Array(var51);
8188 }
8189 var54 = ((val* (*)(val*))(var51->class->vft[COLOR_string__Object__to_s]))(var51) /* to_s on <var51:Array[Object]>*/;
8190 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var54) /* add on <self:GlobalCompilerVisitor>*/;
8191 var55 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
8192 var_last = var55;
8193 var56 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
8194 for(;;) {
8195 var57 = ((short int (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var56) /* is_ok on <var56:Iterator[nullable Object]>*/;
8196 if(!var57) break;
8197 var58 = ((val* (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__item]))(var56) /* item on <var56:Iterator[nullable Object]>*/;
8198 var_t = var58;
8199 var60 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8200 var61 = ((short int (*)(val*))(var60->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var60) /* hardening on <var60:AbstractCompiler(GlobalCompiler)>*/;
8201 var62 = !var61;
8202 var_ = var62;
8203 if (var62){
8204 var63 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
8205 var59 = var63;
8206 } else {
8207 var59 = var_;
8208 }
8209 if (var59){
8210 if (varonce64) {
8211 var65 = varonce64;
8212 } else {
8213 var66 = "default: /*";
8214 var67 = 11;
8215 var68 = string__NativeString__to_s_with_length(var66, var67);
8216 var65 = var68;
8217 varonce64 = var65;
8218 }
8219 var69 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8220 var70 = ((val* (*)(val*, val*))(var69->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var69, var_t) /* classid on <var69:AbstractCompiler(GlobalCompiler)>*/;
8221 if (varonce71) {
8222 var72 = varonce71;
8223 } else {
8224 var73 = "*/";
8225 var74 = 2;
8226 var75 = string__NativeString__to_s_with_length(var73, var74);
8227 var72 = var75;
8228 varonce71 = var72;
8229 }
8230 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
8231 { /* var76 = array_instance Array[Object] */
8232 var77 = 3;
8233 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
8234 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var65;
8235 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var70;
8236 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var72;
8237 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
8238 CHECK_NEW_array__Array(var76);
8239 }
8240 var79 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
8241 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var79) /* add on <self:GlobalCompilerVisitor>*/;
8242 } else {
8243 if (varonce80) {
8244 var81 = varonce80;
8245 } else {
8246 var82 = "case ";
8247 var83 = 5;
8248 var84 = string__NativeString__to_s_with_length(var82, var83);
8249 var81 = var84;
8250 varonce80 = var81;
8251 }
8252 var85 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8253 var86 = ((val* (*)(val*, val*))(var85->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var85, var_t) /* classid on <var85:AbstractCompiler(GlobalCompiler)>*/;
8254 if (varonce87) {
8255 var88 = varonce87;
8256 } else {
8257 var89 = ":";
8258 var90 = 1;
8259 var91 = string__NativeString__to_s_with_length(var89, var90);
8260 var88 = var91;
8261 varonce87 = var88;
8262 }
8263 var92 = NEW_array__Array(&type_array__Arraykernel__Object);
8264 { /* var92 = array_instance Array[Object] */
8265 var93 = 3;
8266 var94 = NEW_array__NativeArray(var93, &type_array__NativeArraykernel__Object);
8267 ((struct instance_array__NativeArray*)var94)->values[0] = (val*) var81;
8268 ((struct instance_array__NativeArray*)var94)->values[1] = (val*) var86;
8269 ((struct instance_array__NativeArray*)var94)->values[2] = (val*) var88;
8270 ((void (*)(val*, val*, long))(var92->class->vft[COLOR_array__Array__with_native]))(var92, var94, var93) /* with_native on <var92:Array[Object]>*/;
8271 CHECK_NEW_array__Array(var92);
8272 }
8273 var95 = ((val* (*)(val*))(var92->class->vft[COLOR_string__Object__to_s]))(var92) /* to_s on <var92:Array[Object]>*/;
8274 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var95) /* add on <self:GlobalCompilerVisitor>*/;
8275 }
8276 var96 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
8277 var_recv2 = var96;
8278 var97 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
8279 var98 = ((val* (*)(val*))(var97->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var97) /* static_mtype on <var97:MPropDef(MAttributeDef)>*/;
8280 if (var98 == NULL) {
8281 fprintf(stderr, "Runtime error: %s", "Cast failed");
8282 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 690);
8283 exit(1);
8284 }
8285 var_ta = var98;
8286 var99 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
8287 var_ta = var99;
8288 if (varonce100) {
8289 var101 = varonce100;
8290 } else {
8291 var102 = "((struct ";
8292 var103 = 9;
8293 var104 = string__NativeString__to_s_with_length(var102, var103);
8294 var101 = var104;
8295 varonce100 = var101;
8296 }
8297 var105 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
8298 if (varonce106) {
8299 var107 = varonce106;
8300 } else {
8301 var108 = "*)";
8302 var109 = 2;
8303 var110 = string__NativeString__to_s_with_length(var108, var109);
8304 var107 = var110;
8305 varonce106 = var107;
8306 }
8307 if (varonce111) {
8308 var112 = varonce111;
8309 } else {
8310 var113 = ")->";
8311 var114 = 3;
8312 var115 = string__NativeString__to_s_with_length(var113, var114);
8313 var112 = var115;
8314 varonce111 = var112;
8315 }
8316 var116 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
8317 var117 = ((val* (*)(val*))(var116->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var116) /* c_name on <var116:MPropDef(MAttributeDef)>*/;
8318 if (varonce118) {
8319 var119 = varonce118;
8320 } else {
8321 var120 = " = ";
8322 var121 = 3;
8323 var122 = string__NativeString__to_s_with_length(var120, var121);
8324 var119 = var122;
8325 varonce118 = var119;
8326 }
8327 var123 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var_value, var_ta) /* autobox on <self:GlobalCompilerVisitor>*/;
8328 if (varonce124) {
8329 var125 = varonce124;
8330 } else {
8331 var126 = ";";
8332 var127 = 1;
8333 var128 = string__NativeString__to_s_with_length(var126, var127);
8334 var125 = var128;
8335 varonce124 = var125;
8336 }
8337 var129 = NEW_array__Array(&type_array__Arraykernel__Object);
8338 { /* var129 = array_instance Array[Object] */
8339 var130 = 9;
8340 var131 = NEW_array__NativeArray(var130, &type_array__NativeArraykernel__Object);
8341 ((struct instance_array__NativeArray*)var131)->values[0] = (val*) var101;
8342 ((struct instance_array__NativeArray*)var131)->values[1] = (val*) var105;
8343 ((struct instance_array__NativeArray*)var131)->values[2] = (val*) var107;
8344 ((struct instance_array__NativeArray*)var131)->values[3] = (val*) var_recv;
8345 ((struct instance_array__NativeArray*)var131)->values[4] = (val*) var112;
8346 ((struct instance_array__NativeArray*)var131)->values[5] = (val*) var117;
8347 ((struct instance_array__NativeArray*)var131)->values[6] = (val*) var119;
8348 ((struct instance_array__NativeArray*)var131)->values[7] = (val*) var123;
8349 ((struct instance_array__NativeArray*)var131)->values[8] = (val*) var125;
8350 ((void (*)(val*, val*, long))(var129->class->vft[COLOR_array__Array__with_native]))(var129, var131, var130) /* with_native on <var129:Array[Object]>*/;
8351 CHECK_NEW_array__Array(var129);
8352 }
8353 var132 = ((val* (*)(val*))(var129->class->vft[COLOR_string__Object__to_s]))(var129) /* to_s on <var129:Array[Object]>*/;
8354 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var132) /* add on <self:GlobalCompilerVisitor>*/;
8355 if (varonce133) {
8356 var134 = varonce133;
8357 } else {
8358 var135 = "break;";
8359 var136 = 6;
8360 var137 = string__NativeString__to_s_with_length(var135, var136);
8361 var134 = var137;
8362 varonce133 = var134;
8363 }
8364 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
8365 CONTINUE_label: (void)0;
8366 ((void (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__next]))(var56) /* next on <var56:Iterator[nullable Object]>*/;
8367 }
8368 BREAK_label: (void)0;
8369 var138 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8370 var139 = ((short int (*)(val*))(var138->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var138) /* hardening on <var138:AbstractCompiler(GlobalCompiler)>*/;
8371 if (var139){
8372 if (varonce140) {
8373 var141 = varonce140;
8374 } else {
8375 var142 = "default: /* Bug*/";
8376 var143 = 17;
8377 var144 = string__NativeString__to_s_with_length(var142, var143);
8378 var141 = var144;
8379 varonce140 = var141;
8380 }
8381 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var141) /* add on <self:GlobalCompilerVisitor>*/;
8382 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
8383 } else {
8384 }
8385 if (varonce145) {
8386 var146 = varonce145;
8387 } else {
8388 var147 = "}";
8389 var148 = 1;
8390 var149 = string__NativeString__to_s_with_length(var147, var148);
8391 var146 = var149;
8392 varonce145 = var146;
8393 }
8394 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var146) /* add on <self:GlobalCompilerVisitor>*/;
8395 RET_LABEL:;
8396 }
8397 /* method global_compiler#GlobalCompilerVisitor#write_attribute for (self: Object, MAttribute, RuntimeVariable, RuntimeVariable) */
8398 void VIRTUAL_global_compiler__GlobalCompilerVisitor__write_attribute(val* self, val* p0, val* p1, val* p2) {
8399 global_compiler__GlobalCompilerVisitor__write_attribute(self, p0, p1, p2);
8400 RET_LABEL:;
8401 }
8402 /* method global_compiler#GlobalCompilerVisitor#init_instance for (self: GlobalCompilerVisitor, MClassType): RuntimeVariable */
8403 val* global_compiler__GlobalCompilerVisitor__init_instance(val* self, val* p0) {
8404 val* var /* : RuntimeVariable */;
8405 val* var_mtype /* var mtype: MClassType */;
8406 val* var1 /* : MType */;
8407 short int var2 /* : Bool */;
8408 int cltype;
8409 int idtype;
8410 const char* var_class_name;
8411 val* var3 /* : AbstractCompiler */;
8412 val* var4 /* : RapidTypeAnalysis */;
8413 val* var5 /* : HashSet[MClassType] */;
8414 short int var6 /* : Bool */;
8415 short int var7 /* : Bool */;
8416 static val* varonce;
8417 val* var8 /* : String */;
8418 char* var9 /* : NativeString */;
8419 long var10 /* : Int */;
8420 val* var11 /* : String */;
8421 static val* varonce12;
8422 val* var13 /* : String */;
8423 char* var14 /* : NativeString */;
8424 long var15 /* : Int */;
8425 val* var16 /* : String */;
8426 val* var17 /* : Array[Object] */;
8427 long var18 /* : Int */;
8428 val* var19 /* : NativeArray[Object] */;
8429 val* var20 /* : String */;
8430 static val* varonce21;
8431 val* var22 /* : String */;
8432 char* var23 /* : NativeString */;
8433 long var24 /* : Int */;
8434 val* var25 /* : String */;
8435 val* var26 /* : String */;
8436 static val* varonce27;
8437 val* var28 /* : String */;
8438 char* var29 /* : NativeString */;
8439 long var30 /* : Int */;
8440 val* var31 /* : String */;
8441 val* var32 /* : Array[Object] */;
8442 long var33 /* : Int */;
8443 val* var34 /* : NativeArray[Object] */;
8444 val* var35 /* : String */;
8445 val* var36 /* : RuntimeVariable */;
8446 val* var_res /* var res: RuntimeVariable */;
8447 short int var37 /* : Bool */;
8448 var_mtype = p0;
8449 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_mtype) /* anchor on <self:GlobalCompilerVisitor>*/;
8450 /* <var1:MType> isa MClassType */
8451 cltype = type_model__MClassType.color;
8452 idtype = type_model__MClassType.id;
8453 if(cltype >= var1->type->table_size) {
8454 var2 = 0;
8455 } else {
8456 var2 = var1->type->type_table[cltype] == idtype;
8457 }
8458 if (!var2) {
8459 var_class_name = var1 == NULL ? "null" : var1->type->name;
8460 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
8461 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 704);
8462 exit(1);
8463 }
8464 var_mtype = var1;
8465 var3 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8466 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var3) /* runtime_type_analysis on <var3:AbstractCompiler(GlobalCompiler)>*/;
8467 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var4) /* live_types on <var4:RapidTypeAnalysis>*/;
8468 var6 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__Collection__has]))(var5, var_mtype) /* has on <var5:HashSet[MClassType]>*/;
8469 var7 = !var6;
8470 if (var7){
8471 if (varonce) {
8472 var8 = varonce;
8473 } else {
8474 var9 = "problem: ";
8475 var10 = 9;
8476 var11 = string__NativeString__to_s_with_length(var9, var10);
8477 var8 = var11;
8478 varonce = var8;
8479 }
8480 if (varonce12) {
8481 var13 = varonce12;
8482 } else {
8483 var14 = " was detected dead";
8484 var15 = 18;
8485 var16 = string__NativeString__to_s_with_length(var14, var15);
8486 var13 = var16;
8487 varonce12 = var13;
8488 }
8489 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
8490 { /* var17 = array_instance Array[Object] */
8491 var18 = 3;
8492 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
8493 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var8;
8494 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var_mtype;
8495 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var13;
8496 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
8497 CHECK_NEW_array__Array(var17);
8498 }
8499 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
8500 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var20) /* debug on <self:GlobalCompilerVisitor>*/;
8501 } else {
8502 }
8503 if (varonce21) {
8504 var22 = varonce21;
8505 } else {
8506 var23 = "NEW_";
8507 var24 = 4;
8508 var25 = string__NativeString__to_s_with_length(var23, var24);
8509 var22 = var25;
8510 varonce21 = var22;
8511 }
8512 var26 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
8513 if (varonce27) {
8514 var28 = varonce27;
8515 } else {
8516 var29 = "()";
8517 var30 = 2;
8518 var31 = string__NativeString__to_s_with_length(var29, var30);
8519 var28 = var31;
8520 varonce27 = var28;
8521 }
8522 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
8523 { /* var32 = array_instance Array[Object] */
8524 var33 = 3;
8525 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
8526 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var22;
8527 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var26;
8528 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var28;
8529 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
8530 CHECK_NEW_array__Array(var32);
8531 }
8532 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
8533 var36 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var35, var_mtype) /* new_expr on <self:GlobalCompilerVisitor>*/;
8534 var_res = var36;
8535 var37 = 1;
8536 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var37) /* is_exact= on <var_res:RuntimeVariable>*/;
8537 var = var_res;
8538 goto RET_LABEL;
8539 RET_LABEL:;
8540 return var;
8541 }
8542 /* method global_compiler#GlobalCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
8543 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__init_instance(val* self, val* p0) {
8544 val* var /* : RuntimeVariable */;
8545 val* var1 /* : RuntimeVariable */;
8546 var1 = global_compiler__GlobalCompilerVisitor__init_instance(self, p0);
8547 var = var1;
8548 RET_LABEL:;
8549 return var;
8550 }
8551 /* method global_compiler#GlobalCompilerVisitor#type_test for (self: GlobalCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
8552 val* global_compiler__GlobalCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
8553 val* var /* : RuntimeVariable */;
8554 val* var_value /* var value: RuntimeVariable */;
8555 val* var_mtype /* var mtype: MType */;
8556 val* var_tag /* var tag: String */;
8557 val* var1 /* : MType */;
8558 val* var_mclasstype /* var mclasstype: MType */;
8559 short int var2 /* : Bool */;
8560 int cltype;
8561 int idtype;
8562 val* var3 /* : MType */;
8563 short int var4 /* : Bool */;
8564 int cltype5;
8565 int idtype6;
8566 val* var7 /* : AbstractCompiler */;
8567 val* var8 /* : RapidTypeAnalysis */;
8568 val* var9 /* : HashSet[MClassType] */;
8569 short int var10 /* : Bool */;
8570 short int var11 /* : Bool */;
8571 static val* varonce;
8572 val* var12 /* : String */;
8573 char* var13 /* : NativeString */;
8574 long var14 /* : Int */;
8575 val* var15 /* : String */;
8576 static val* varonce16;
8577 val* var17 /* : String */;
8578 char* var18 /* : NativeString */;
8579 long var19 /* : Int */;
8580 val* var20 /* : String */;
8581 val* var21 /* : Array[Object] */;
8582 long var22 /* : Int */;
8583 val* var23 /* : NativeArray[Object] */;
8584 val* var24 /* : String */;
8585 val* var25 /* : Array[MClassType] */;
8586 val* var_types /* var types: Array[MClassType] */;
8587 val* var26 /* : MClassType */;
8588 val* var27 /* : RuntimeVariable */;
8589 val* var_res /* var res: RuntimeVariable */;
8590 static val* varonce28;
8591 val* var29 /* : String */;
8592 char* var30 /* : NativeString */;
8593 long var31 /* : Int */;
8594 val* var32 /* : String */;
8595 static val* varonce33;
8596 val* var34 /* : String */;
8597 char* var35 /* : NativeString */;
8598 long var36 /* : Int */;
8599 val* var37 /* : String */;
8600 val* var38 /* : String */;
8601 static val* varonce39;
8602 val* var40 /* : String */;
8603 char* var41 /* : NativeString */;
8604 long var42 /* : Int */;
8605 val* var43 /* : String */;
8606 val* var44 /* : Array[Object] */;
8607 long var45 /* : Int */;
8608 val* var46 /* : NativeArray[Object] */;
8609 val* var47 /* : String */;
8610 val* var48 /* : MType */;
8611 val* var49 /* : String */;
8612 static val* varonce50;
8613 val* var51 /* : String */;
8614 char* var52 /* : NativeString */;
8615 long var53 /* : Int */;
8616 val* var54 /* : String */;
8617 short int var55 /* : Bool */;
8618 val* var56 /* : MType */;
8619 val* var57 /* : AbstractCompiler */;
8620 val* var58 /* : MModule */;
8621 val* var59 /* : null */;
8622 short int var60 /* : Bool */;
8623 static val* varonce61;
8624 val* var62 /* : String */;
8625 char* var63 /* : NativeString */;
8626 long var64 /* : Int */;
8627 val* var65 /* : String */;
8628 val* var66 /* : Array[Object] */;
8629 long var67 /* : Int */;
8630 val* var68 /* : NativeArray[Object] */;
8631 val* var69 /* : String */;
8632 static val* varonce70;
8633 val* var71 /* : String */;
8634 char* var72 /* : NativeString */;
8635 long var73 /* : Int */;
8636 val* var74 /* : String */;
8637 val* var75 /* : Array[Object] */;
8638 long var76 /* : Int */;
8639 val* var77 /* : NativeArray[Object] */;
8640 val* var78 /* : String */;
8641 short int var79 /* : Bool */;
8642 val* var80 /* : MType */;
8643 short int var81 /* : Bool */;
8644 int cltype82;
8645 int idtype83;
8646 short int var_ /* var : Bool */;
8647 val* var84 /* : MType */;
8648 short int var85 /* : Bool */;
8649 int cltype86;
8650 int idtype87;
8651 static val* varonce88;
8652 val* var89 /* : String */;
8653 char* var90 /* : NativeString */;
8654 long var91 /* : Int */;
8655 val* var92 /* : String */;
8656 static val* varonce93;
8657 val* var94 /* : String */;
8658 char* var95 /* : NativeString */;
8659 long var96 /* : Int */;
8660 val* var97 /* : String */;
8661 val* var98 /* : Array[Object] */;
8662 long var99 /* : Int */;
8663 val* var100 /* : NativeArray[Object] */;
8664 val* var101 /* : String */;
8665 short int var102 /* : Bool */;
8666 int cltype103;
8667 int idtype104;
8668 static val* varonce105;
8669 val* var106 /* : String */;
8670 char* var107 /* : NativeString */;
8671 long var108 /* : Int */;
8672 val* var109 /* : String */;
8673 static val* varonce110;
8674 val* var111 /* : String */;
8675 char* var112 /* : NativeString */;
8676 long var113 /* : Int */;
8677 val* var114 /* : String */;
8678 val* var115 /* : Array[Object] */;
8679 long var116 /* : Int */;
8680 val* var117 /* : NativeArray[Object] */;
8681 val* var118 /* : String */;
8682 static val* varonce119;
8683 val* var120 /* : String */;
8684 char* var121 /* : NativeString */;
8685 long var122 /* : Int */;
8686 val* var123 /* : String */;
8687 static val* varonce124;
8688 val* var125 /* : String */;
8689 char* var126 /* : NativeString */;
8690 long var127 /* : Int */;
8691 val* var128 /* : String */;
8692 val* var129 /* : Array[Object] */;
8693 long var130 /* : Int */;
8694 val* var131 /* : NativeArray[Object] */;
8695 val* var132 /* : String */;
8696 static val* varonce133;
8697 val* var134 /* : String */;
8698 char* var135 /* : NativeString */;
8699 long var136 /* : Int */;
8700 val* var137 /* : String */;
8701 static val* varonce138;
8702 val* var139 /* : String */;
8703 char* var140 /* : NativeString */;
8704 long var141 /* : Int */;
8705 val* var142 /* : String */;
8706 static val* varonce143;
8707 val* var144 /* : String */;
8708 char* var145 /* : NativeString */;
8709 long var146 /* : Int */;
8710 val* var147 /* : String */;
8711 val* var148 /* : Array[Object] */;
8712 long var149 /* : Int */;
8713 val* var150 /* : NativeArray[Object] */;
8714 val* var151 /* : String */;
8715 val* var152 /* : Iterator[nullable Object] */;
8716 short int var153 /* : Bool */;
8717 val* var154 /* : nullable Object */;
8718 val* var_t /* var t: MClassType */;
8719 val* var155 /* : AbstractCompiler */;
8720 val* var156 /* : MModule */;
8721 val* var157 /* : null */;
8722 short int var158 /* : Bool */;
8723 static val* varonce159;
8724 val* var160 /* : String */;
8725 char* var161 /* : NativeString */;
8726 long var162 /* : Int */;
8727 val* var163 /* : String */;
8728 val* var164 /* : AbstractCompiler */;
8729 val* var165 /* : String */;
8730 static val* varonce166;
8731 val* var167 /* : String */;
8732 char* var168 /* : NativeString */;
8733 long var169 /* : Int */;
8734 val* var170 /* : String */;
8735 static val* varonce171;
8736 val* var172 /* : String */;
8737 char* var173 /* : NativeString */;
8738 long var174 /* : Int */;
8739 val* var175 /* : String */;
8740 val* var176 /* : Array[Object] */;
8741 long var177 /* : Int */;
8742 val* var178 /* : NativeArray[Object] */;
8743 val* var179 /* : String */;
8744 static val* varonce180;
8745 val* var181 /* : String */;
8746 char* var182 /* : NativeString */;
8747 long var183 /* : Int */;
8748 val* var184 /* : String */;
8749 val* var185 /* : Array[Object] */;
8750 long var186 /* : Int */;
8751 val* var187 /* : NativeArray[Object] */;
8752 val* var188 /* : String */;
8753 static val* varonce189;
8754 val* var190 /* : String */;
8755 char* var191 /* : NativeString */;
8756 long var192 /* : Int */;
8757 val* var193 /* : String */;
8758 static val* varonce194;
8759 val* var195 /* : String */;
8760 char* var196 /* : NativeString */;
8761 long var197 /* : Int */;
8762 val* var198 /* : String */;
8763 static val* varonce199;
8764 val* var200 /* : String */;
8765 char* var201 /* : NativeString */;
8766 long var202 /* : Int */;
8767 val* var203 /* : String */;
8768 val* var204 /* : Array[Object] */;
8769 long var205 /* : Int */;
8770 val* var206 /* : NativeArray[Object] */;
8771 val* var207 /* : String */;
8772 static val* varonce208;
8773 val* var209 /* : String */;
8774 char* var210 /* : NativeString */;
8775 long var211 /* : Int */;
8776 val* var212 /* : String */;
8777 var_value = p0;
8778 var_mtype = p1;
8779 var_tag = p2;
8780 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_mtype) /* anchor on <self:GlobalCompilerVisitor>*/;
8781 var_mtype = var1;
8782 var_mclasstype = var_mtype;
8783 /* <var_mtype:MType> isa MNullableType */
8784 cltype = type_model__MNullableType.color;
8785 idtype = type_model__MNullableType.id;
8786 if(cltype >= var_mtype->type->table_size) {
8787 var2 = 0;
8788 } else {
8789 var2 = var_mtype->type->type_table[cltype] == idtype;
8790 }
8791 if (var2){
8792 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
8793 var_mclasstype = var3;
8794 } else {
8795 }
8796 /* <var_mclasstype:MType> isa MClassType */
8797 cltype5 = type_model__MClassType.color;
8798 idtype6 = type_model__MClassType.id;
8799 if(cltype5 >= var_mclasstype->type->table_size) {
8800 var4 = 0;
8801 } else {
8802 var4 = var_mclasstype->type->type_table[cltype5] == idtype6;
8803 }
8804 if (!var4) {
8805 fprintf(stderr, "Runtime error: %s", "Assert failed");
8806 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 718);
8807 exit(1);
8808 }
8809 var7 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8810 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var7) /* runtime_type_analysis on <var7:AbstractCompiler(GlobalCompiler)>*/;
8811 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_cast_types]))(var8) /* live_cast_types on <var8:RapidTypeAnalysis>*/;
8812 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__Collection__has]))(var9, var_mclasstype) /* has on <var9:HashSet[MClassType]>*/;
8813 var11 = !var10;
8814 if (var11){
8815 if (varonce) {
8816 var12 = varonce;
8817 } else {
8818 var13 = "problem: ";
8819 var14 = 9;
8820 var15 = string__NativeString__to_s_with_length(var13, var14);
8821 var12 = var15;
8822 varonce = var12;
8823 }
8824 if (varonce16) {
8825 var17 = varonce16;
8826 } else {
8827 var18 = " was detected cast-dead";
8828 var19 = 23;
8829 var20 = string__NativeString__to_s_with_length(var18, var19);
8830 var17 = var20;
8831 varonce16 = var17;
8832 }
8833 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
8834 { /* var21 = array_instance Array[Object] */
8835 var22 = 3;
8836 var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
8837 ((struct instance_array__NativeArray*)var23)->values[0] = (val*) var12;
8838 ((struct instance_array__NativeArray*)var23)->values[1] = (val*) var_mtype;
8839 ((struct instance_array__NativeArray*)var23)->values[2] = (val*) var17;
8840 ((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
8841 CHECK_NEW_array__Array(var21);
8842 }
8843 var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
8844 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var24) /* debug on <self:GlobalCompilerVisitor>*/;
8845 fprintf(stderr, "Runtime error: %s", "Aborted");
8846 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 721);
8847 exit(1);
8848 } else {
8849 }
8850 var25 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_value) /* collect_types on <self:GlobalCompilerVisitor>*/;
8851 var_types = var25;
8852 var26 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
8853 var27 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var26) /* new_var on <self:GlobalCompilerVisitor>*/;
8854 var_res = var27;
8855 if (varonce28) {
8856 var29 = varonce28;
8857 } else {
8858 var30 = "/* isa ";
8859 var31 = 7;
8860 var32 = string__NativeString__to_s_with_length(var30, var31);
8861 var29 = var32;
8862 varonce28 = var29;
8863 }
8864 if (varonce33) {
8865 var34 = varonce33;
8866 } else {
8867 var35 = " on ";
8868 var36 = 4;
8869 var37 = string__NativeString__to_s_with_length(var35, var36);
8870 var34 = var37;
8871 varonce33 = var34;
8872 }
8873 var38 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
8874 if (varonce39) {
8875 var40 = varonce39;
8876 } else {
8877 var41 = " */";
8878 var42 = 3;
8879 var43 = string__NativeString__to_s_with_length(var41, var42);
8880 var40 = var43;
8881 varonce39 = var40;
8882 }
8883 var44 = NEW_array__Array(&type_array__Arraykernel__Object);
8884 { /* var44 = array_instance Array[Object] */
8885 var45 = 5;
8886 var46 = NEW_array__NativeArray(var45, &type_array__NativeArraykernel__Object);
8887 ((struct instance_array__NativeArray*)var46)->values[0] = (val*) var29;
8888 ((struct instance_array__NativeArray*)var46)->values[1] = (val*) var_mtype;
8889 ((struct instance_array__NativeArray*)var46)->values[2] = (val*) var34;
8890 ((struct instance_array__NativeArray*)var46)->values[3] = (val*) var38;
8891 ((struct instance_array__NativeArray*)var46)->values[4] = (val*) var40;
8892 ((void (*)(val*, val*, long))(var44->class->vft[COLOR_array__Array__with_native]))(var44, var46, var45) /* with_native on <var44:Array[Object]>*/;
8893 CHECK_NEW_array__Array(var44);
8894 }
8895 var47 = ((val* (*)(val*))(var44->class->vft[COLOR_string__Object__to_s]))(var44) /* to_s on <var44:Array[Object]>*/;
8896 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var47) /* add on <self:GlobalCompilerVisitor>*/;
8897 var48 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
8898 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_abstract_compiler__MType__ctype]))(var48) /* ctype on <var48:MType>*/;
8899 if (varonce50) {
8900 var51 = varonce50;
8901 } else {
8902 var52 = "val*";
8903 var53 = 4;
8904 var54 = string__NativeString__to_s_with_length(var52, var53);
8905 var51 = var54;
8906 varonce50 = var51;
8907 }
8908 var55 = ((short int (*)(val*, val*))(var49->class->vft[COLOR_kernel__Object___33d_61d]))(var49, var51) /* != on <var49:String>*/;
8909 if (var55){
8910 var56 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
8911 var57 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8912 var58 = ((val* (*)(val*))(var57->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var57) /* mainmodule on <var57:AbstractCompiler(GlobalCompiler)>*/;
8913 var59 = NULL;
8914 var60 = ((short int (*)(val*, val*, val*, val*))(var56->class->vft[COLOR_model__MType__is_subtype]))(var56, var58, var59, var_mtype) /* is_subtype on <var56:MType>*/;
8915 if (var60){
8916 if (varonce61) {
8917 var62 = varonce61;
8918 } else {
8919 var63 = " = 1;";
8920 var64 = 5;
8921 var65 = string__NativeString__to_s_with_length(var63, var64);
8922 var62 = var65;
8923 varonce61 = var62;
8924 }
8925 var66 = NEW_array__Array(&type_array__Arraykernel__Object);
8926 { /* var66 = array_instance Array[Object] */
8927 var67 = 2;
8928 var68 = NEW_array__NativeArray(var67, &type_array__NativeArraykernel__Object);
8929 ((struct instance_array__NativeArray*)var68)->values[0] = (val*) var_res;
8930 ((struct instance_array__NativeArray*)var68)->values[1] = (val*) var62;
8931 ((void (*)(val*, val*, long))(var66->class->vft[COLOR_array__Array__with_native]))(var66, var68, var67) /* with_native on <var66:Array[Object]>*/;
8932 CHECK_NEW_array__Array(var66);
8933 }
8934 var69 = ((val* (*)(val*))(var66->class->vft[COLOR_string__Object__to_s]))(var66) /* to_s on <var66:Array[Object]>*/;
8935 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var69) /* add on <self:GlobalCompilerVisitor>*/;
8936 } else {
8937 if (varonce70) {
8938 var71 = varonce70;
8939 } else {
8940 var72 = " = 0;";
8941 var73 = 5;
8942 var74 = string__NativeString__to_s_with_length(var72, var73);
8943 var71 = var74;
8944 varonce70 = var71;
8945 }
8946 var75 = NEW_array__Array(&type_array__Arraykernel__Object);
8947 { /* var75 = array_instance Array[Object] */
8948 var76 = 2;
8949 var77 = NEW_array__NativeArray(var76, &type_array__NativeArraykernel__Object);
8950 ((struct instance_array__NativeArray*)var77)->values[0] = (val*) var_res;
8951 ((struct instance_array__NativeArray*)var77)->values[1] = (val*) var71;
8952 ((void (*)(val*, val*, long))(var75->class->vft[COLOR_array__Array__with_native]))(var75, var77, var76) /* with_native on <var75:Array[Object]>*/;
8953 CHECK_NEW_array__Array(var75);
8954 }
8955 var78 = ((val* (*)(val*))(var75->class->vft[COLOR_string__Object__to_s]))(var75) /* to_s on <var75:Array[Object]>*/;
8956 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var78) /* add on <self:GlobalCompilerVisitor>*/;
8957 }
8958 var = var_res;
8959 goto RET_LABEL;
8960 } else {
8961 }
8962 var80 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
8963 /* <var80:MType> isa MNullableType */
8964 cltype82 = type_model__MNullableType.color;
8965 idtype83 = type_model__MNullableType.id;
8966 if(cltype82 >= var80->type->table_size) {
8967 var81 = 0;
8968 } else {
8969 var81 = var80->type->type_table[cltype82] == idtype83;
8970 }
8971 var_ = var81;
8972 if (var81){
8973 var79 = var_;
8974 } else {
8975 var84 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
8976 /* <var84:MType> isa MNullType */
8977 cltype86 = type_model__MNullType.color;
8978 idtype87 = type_model__MNullType.id;
8979 if(cltype86 >= var84->type->table_size) {
8980 var85 = 0;
8981 } else {
8982 var85 = var84->type->type_table[cltype86] == idtype87;
8983 }
8984 var79 = var85;
8985 }
8986 if (var79){
8987 if (varonce88) {
8988 var89 = varonce88;
8989 } else {
8990 var90 = "if (";
8991 var91 = 4;
8992 var92 = string__NativeString__to_s_with_length(var90, var91);
8993 var89 = var92;
8994 varonce88 = var89;
8995 }
8996 if (varonce93) {
8997 var94 = varonce93;
8998 } else {
8999 var95 = " == NULL) {";
9000 var96 = 11;
9001 var97 = string__NativeString__to_s_with_length(var95, var96);
9002 var94 = var97;
9003 varonce93 = var94;
9004 }
9005 var98 = NEW_array__Array(&type_array__Arraykernel__Object);
9006 { /* var98 = array_instance Array[Object] */
9007 var99 = 3;
9008 var100 = NEW_array__NativeArray(var99, &type_array__NativeArraykernel__Object);
9009 ((struct instance_array__NativeArray*)var100)->values[0] = (val*) var89;
9010 ((struct instance_array__NativeArray*)var100)->values[1] = (val*) var_value;
9011 ((struct instance_array__NativeArray*)var100)->values[2] = (val*) var94;
9012 ((void (*)(val*, val*, long))(var98->class->vft[COLOR_array__Array__with_native]))(var98, var100, var99) /* with_native on <var98:Array[Object]>*/;
9013 CHECK_NEW_array__Array(var98);
9014 }
9015 var101 = ((val* (*)(val*))(var98->class->vft[COLOR_string__Object__to_s]))(var98) /* to_s on <var98:Array[Object]>*/;
9016 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var101) /* add on <self:GlobalCompilerVisitor>*/;
9017 /* <var_mtype:MType> isa MNullableType */
9018 cltype103 = type_model__MNullableType.color;
9019 idtype104 = type_model__MNullableType.id;
9020 if(cltype103 >= var_mtype->type->table_size) {
9021 var102 = 0;
9022 } else {
9023 var102 = var_mtype->type->type_table[cltype103] == idtype104;
9024 }
9025 if (var102){
9026 if (varonce105) {
9027 var106 = varonce105;
9028 } else {
9029 var107 = " = 1; /* isa ";
9030 var108 = 13;
9031 var109 = string__NativeString__to_s_with_length(var107, var108);
9032 var106 = var109;
9033 varonce105 = var106;
9034 }
9035 if (varonce110) {
9036 var111 = varonce110;
9037 } else {
9038 var112 = " */";
9039 var113 = 3;
9040 var114 = string__NativeString__to_s_with_length(var112, var113);
9041 var111 = var114;
9042 varonce110 = var111;
9043 }
9044 var115 = NEW_array__Array(&type_array__Arraykernel__Object);
9045 { /* var115 = array_instance Array[Object] */
9046 var116 = 4;
9047 var117 = NEW_array__NativeArray(var116, &type_array__NativeArraykernel__Object);
9048 ((struct instance_array__NativeArray*)var117)->values[0] = (val*) var_res;
9049 ((struct instance_array__NativeArray*)var117)->values[1] = (val*) var106;
9050 ((struct instance_array__NativeArray*)var117)->values[2] = (val*) var_mtype;
9051 ((struct instance_array__NativeArray*)var117)->values[3] = (val*) var111;
9052 ((void (*)(val*, val*, long))(var115->class->vft[COLOR_array__Array__with_native]))(var115, var117, var116) /* with_native on <var115:Array[Object]>*/;
9053 CHECK_NEW_array__Array(var115);
9054 }
9055 var118 = ((val* (*)(val*))(var115->class->vft[COLOR_string__Object__to_s]))(var115) /* to_s on <var115:Array[Object]>*/;
9056 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var118) /* add on <self:GlobalCompilerVisitor>*/;
9057 } else {
9058 if (varonce119) {
9059 var120 = varonce119;
9060 } else {
9061 var121 = " = 0; /* not isa ";
9062 var122 = 17;
9063 var123 = string__NativeString__to_s_with_length(var121, var122);
9064 var120 = var123;
9065 varonce119 = var120;
9066 }
9067 if (varonce124) {
9068 var125 = varonce124;
9069 } else {
9070 var126 = " */";
9071 var127 = 3;
9072 var128 = string__NativeString__to_s_with_length(var126, var127);
9073 var125 = var128;
9074 varonce124 = var125;
9075 }
9076 var129 = NEW_array__Array(&type_array__Arraykernel__Object);
9077 { /* var129 = array_instance Array[Object] */
9078 var130 = 4;
9079 var131 = NEW_array__NativeArray(var130, &type_array__NativeArraykernel__Object);
9080 ((struct instance_array__NativeArray*)var131)->values[0] = (val*) var_res;
9081 ((struct instance_array__NativeArray*)var131)->values[1] = (val*) var120;
9082 ((struct instance_array__NativeArray*)var131)->values[2] = (val*) var_mtype;
9083 ((struct instance_array__NativeArray*)var131)->values[3] = (val*) var125;
9084 ((void (*)(val*, val*, long))(var129->class->vft[COLOR_array__Array__with_native]))(var129, var131, var130) /* with_native on <var129:Array[Object]>*/;
9085 CHECK_NEW_array__Array(var129);
9086 }
9087 var132 = ((val* (*)(val*))(var129->class->vft[COLOR_string__Object__to_s]))(var129) /* to_s on <var129:Array[Object]>*/;
9088 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var132) /* add on <self:GlobalCompilerVisitor>*/;
9089 }
9090 if (varonce133) {
9091 var134 = varonce133;
9092 } else {
9093 var135 = "} else ";
9094 var136 = 7;
9095 var137 = string__NativeString__to_s_with_length(var135, var136);
9096 var134 = var137;
9097 varonce133 = var134;
9098 }
9099 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
9100 } else {
9101 }
9102 if (varonce138) {
9103 var139 = varonce138;
9104 } else {
9105 var140 = "switch(";
9106 var141 = 7;
9107 var142 = string__NativeString__to_s_with_length(var140, var141);
9108 var139 = var142;
9109 varonce138 = var139;
9110 }
9111 if (varonce143) {
9112 var144 = varonce143;
9113 } else {
9114 var145 = "->classid) {";
9115 var146 = 12;
9116 var147 = string__NativeString__to_s_with_length(var145, var146);
9117 var144 = var147;
9118 varonce143 = var144;
9119 }
9120 var148 = NEW_array__Array(&type_array__Arraykernel__Object);
9121 { /* var148 = array_instance Array[Object] */
9122 var149 = 3;
9123 var150 = NEW_array__NativeArray(var149, &type_array__NativeArraykernel__Object);
9124 ((struct instance_array__NativeArray*)var150)->values[0] = (val*) var139;
9125 ((struct instance_array__NativeArray*)var150)->values[1] = (val*) var_value;
9126 ((struct instance_array__NativeArray*)var150)->values[2] = (val*) var144;
9127 ((void (*)(val*, val*, long))(var148->class->vft[COLOR_array__Array__with_native]))(var148, var150, var149) /* with_native on <var148:Array[Object]>*/;
9128 CHECK_NEW_array__Array(var148);
9129 }
9130 var151 = ((val* (*)(val*))(var148->class->vft[COLOR_string__Object__to_s]))(var148) /* to_s on <var148:Array[Object]>*/;
9131 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var151) /* add on <self:GlobalCompilerVisitor>*/;
9132 var152 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
9133 for(;;) {
9134 var153 = ((short int (*)(val*))(var152->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var152) /* is_ok on <var152:Iterator[nullable Object]>*/;
9135 if(!var153) break;
9136 var154 = ((val* (*)(val*))(var152->class->vft[COLOR_abstract_collection__Iterator__item]))(var152) /* item on <var152:Iterator[nullable Object]>*/;
9137 var_t = var154;
9138 var155 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9139 var156 = ((val* (*)(val*))(var155->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var155) /* mainmodule on <var155:AbstractCompiler(GlobalCompiler)>*/;
9140 var157 = NULL;
9141 var158 = ((short int (*)(val*, val*, val*, val*))(var_t->class->vft[COLOR_model__MType__is_subtype]))(var_t, var156, var157, var_mtype) /* is_subtype on <var_t:MClassType>*/;
9142 if (var158){
9143 if (varonce159) {
9144 var160 = varonce159;
9145 } else {
9146 var161 = "case ";
9147 var162 = 5;
9148 var163 = string__NativeString__to_s_with_length(var161, var162);
9149 var160 = var163;
9150 varonce159 = var160;
9151 }
9152 var164 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9153 var165 = ((val* (*)(val*, val*))(var164->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var164, var_t) /* classid on <var164:AbstractCompiler(GlobalCompiler)>*/;
9154 if (varonce166) {
9155 var167 = varonce166;
9156 } else {
9157 var168 = ": /* ";
9158 var169 = 5;
9159 var170 = string__NativeString__to_s_with_length(var168, var169);
9160 var167 = var170;
9161 varonce166 = var167;
9162 }
9163 if (varonce171) {
9164 var172 = varonce171;
9165 } else {
9166 var173 = " */";
9167 var174 = 3;
9168 var175 = string__NativeString__to_s_with_length(var173, var174);
9169 var172 = var175;
9170 varonce171 = var172;
9171 }
9172 var176 = NEW_array__Array(&type_array__Arraykernel__Object);
9173 { /* var176 = array_instance Array[Object] */
9174 var177 = 5;
9175 var178 = NEW_array__NativeArray(var177, &type_array__NativeArraykernel__Object);
9176 ((struct instance_array__NativeArray*)var178)->values[0] = (val*) var160;
9177 ((struct instance_array__NativeArray*)var178)->values[1] = (val*) var165;
9178 ((struct instance_array__NativeArray*)var178)->values[2] = (val*) var167;
9179 ((struct instance_array__NativeArray*)var178)->values[3] = (val*) var_t;
9180 ((struct instance_array__NativeArray*)var178)->values[4] = (val*) var172;
9181 ((void (*)(val*, val*, long))(var176->class->vft[COLOR_array__Array__with_native]))(var176, var178, var177) /* with_native on <var176:Array[Object]>*/;
9182 CHECK_NEW_array__Array(var176);
9183 }
9184 var179 = ((val* (*)(val*))(var176->class->vft[COLOR_string__Object__to_s]))(var176) /* to_s on <var176:Array[Object]>*/;
9185 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var179) /* add on <self:GlobalCompilerVisitor>*/;
9186 } else {
9187 }
9188 CONTINUE_label: (void)0;
9189 ((void (*)(val*))(var152->class->vft[COLOR_abstract_collection__Iterator__next]))(var152) /* next on <var152:Iterator[nullable Object]>*/;
9190 }
9191 BREAK_label: (void)0;
9192 if (varonce180) {
9193 var181 = varonce180;
9194 } else {
9195 var182 = " = 1;";
9196 var183 = 5;
9197 var184 = string__NativeString__to_s_with_length(var182, var183);
9198 var181 = var184;
9199 varonce180 = var181;
9200 }
9201 var185 = NEW_array__Array(&type_array__Arraykernel__Object);
9202 { /* var185 = array_instance Array[Object] */
9203 var186 = 2;
9204 var187 = NEW_array__NativeArray(var186, &type_array__NativeArraykernel__Object);
9205 ((struct instance_array__NativeArray*)var187)->values[0] = (val*) var_res;
9206 ((struct instance_array__NativeArray*)var187)->values[1] = (val*) var181;
9207 ((void (*)(val*, val*, long))(var185->class->vft[COLOR_array__Array__with_native]))(var185, var187, var186) /* with_native on <var185:Array[Object]>*/;
9208 CHECK_NEW_array__Array(var185);
9209 }
9210 var188 = ((val* (*)(val*))(var185->class->vft[COLOR_string__Object__to_s]))(var185) /* to_s on <var185:Array[Object]>*/;
9211 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
9212 if (varonce189) {
9213 var190 = varonce189;
9214 } else {
9215 var191 = "break;";
9216 var192 = 6;
9217 var193 = string__NativeString__to_s_with_length(var191, var192);
9218 var190 = var193;
9219 varonce189 = var190;
9220 }
9221 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var190) /* add on <self:GlobalCompilerVisitor>*/;
9222 if (varonce194) {
9223 var195 = varonce194;
9224 } else {
9225 var196 = "default:";
9226 var197 = 8;
9227 var198 = string__NativeString__to_s_with_length(var196, var197);
9228 var195 = var198;
9229 varonce194 = var195;
9230 }
9231 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var195) /* add on <self:GlobalCompilerVisitor>*/;
9232 if (varonce199) {
9233 var200 = varonce199;
9234 } else {
9235 var201 = " = 0;";
9236 var202 = 5;
9237 var203 = string__NativeString__to_s_with_length(var201, var202);
9238 var200 = var203;
9239 varonce199 = var200;
9240 }
9241 var204 = NEW_array__Array(&type_array__Arraykernel__Object);
9242 { /* var204 = array_instance Array[Object] */
9243 var205 = 2;
9244 var206 = NEW_array__NativeArray(var205, &type_array__NativeArraykernel__Object);
9245 ((struct instance_array__NativeArray*)var206)->values[0] = (val*) var_res;
9246 ((struct instance_array__NativeArray*)var206)->values[1] = (val*) var200;
9247 ((void (*)(val*, val*, long))(var204->class->vft[COLOR_array__Array__with_native]))(var204, var206, var205) /* with_native on <var204:Array[Object]>*/;
9248 CHECK_NEW_array__Array(var204);
9249 }
9250 var207 = ((val* (*)(val*))(var204->class->vft[COLOR_string__Object__to_s]))(var204) /* to_s on <var204:Array[Object]>*/;
9251 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var207) /* add on <self:GlobalCompilerVisitor>*/;
9252 if (varonce208) {
9253 var209 = varonce208;
9254 } else {
9255 var210 = "}";
9256 var211 = 1;
9257 var212 = string__NativeString__to_s_with_length(var210, var211);
9258 var209 = var212;
9259 varonce208 = var209;
9260 }
9261 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var209) /* add on <self:GlobalCompilerVisitor>*/;
9262 var = var_res;
9263 goto RET_LABEL;
9264 RET_LABEL:;
9265 return var;
9266 }
9267 /* method global_compiler#GlobalCompilerVisitor#type_test for (self: Object, RuntimeVariable, MType, String): RuntimeVariable */
9268 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
9269 val* var /* : RuntimeVariable */;
9270 val* var1 /* : RuntimeVariable */;
9271 var1 = global_compiler__GlobalCompilerVisitor__type_test(self, p0, p1, p2);
9272 var = var1;
9273 RET_LABEL:;
9274 return var;
9275 }
9276 /* method global_compiler#GlobalCompilerVisitor#is_same_type_test for (self: GlobalCompilerVisitor, RuntimeVariable, RuntimeVariable): RuntimeVariable */
9277 val* global_compiler__GlobalCompilerVisitor__is_same_type_test(val* self, val* p0, val* p1) {
9278 val* var /* : RuntimeVariable */;
9279 val* var_value1 /* var value1: RuntimeVariable */;
9280 val* var_value2 /* var value2: RuntimeVariable */;
9281 val* var1 /* : MClassType */;
9282 val* var2 /* : RuntimeVariable */;
9283 val* var_res /* var res: RuntimeVariable */;
9284 val* var3 /* : MType */;
9285 val* var4 /* : String */;
9286 static val* varonce;
9287 val* var5 /* : String */;
9288 char* var6 /* : NativeString */;
9289 long var7 /* : Int */;
9290 val* var8 /* : String */;
9291 short int var9 /* : Bool */;
9292 val* var10 /* : MType */;
9293 val* var11 /* : String */;
9294 static val* varonce12;
9295 val* var13 /* : String */;
9296 char* var14 /* : NativeString */;
9297 long var15 /* : Int */;
9298 val* var16 /* : String */;
9299 short int var17 /* : Bool */;
9300 static val* varonce18;
9301 val* var19 /* : String */;
9302 char* var20 /* : NativeString */;
9303 long var21 /* : Int */;
9304 val* var22 /* : String */;
9305 static val* varonce23;
9306 val* var24 /* : String */;
9307 char* var25 /* : NativeString */;
9308 long var26 /* : Int */;
9309 val* var27 /* : String */;
9310 static val* varonce28;
9311 val* var29 /* : String */;
9312 char* var30 /* : NativeString */;
9313 long var31 /* : Int */;
9314 val* var32 /* : String */;
9315 val* var33 /* : Array[Object] */;
9316 long var34 /* : Int */;
9317 val* var35 /* : NativeArray[Object] */;
9318 val* var36 /* : String */;
9319 static val* varonce37;
9320 val* var38 /* : String */;
9321 char* var39 /* : NativeString */;
9322 long var40 /* : Int */;
9323 val* var41 /* : String */;
9324 val* var42 /* : AbstractCompiler */;
9325 val* var43 /* : MType */;
9326 short int var44 /* : Bool */;
9327 int cltype;
9328 int idtype;
9329 const char* var_class_name;
9330 val* var45 /* : String */;
9331 static val* varonce46;
9332 val* var47 /* : String */;
9333 char* var48 /* : NativeString */;
9334 long var49 /* : Int */;
9335 val* var50 /* : String */;
9336 static val* varonce51;
9337 val* var52 /* : String */;
9338 char* var53 /* : NativeString */;
9339 long var54 /* : Int */;
9340 val* var55 /* : String */;
9341 val* var56 /* : Array[Object] */;
9342 long var57 /* : Int */;
9343 val* var58 /* : NativeArray[Object] */;
9344 val* var59 /* : String */;
9345 val* var60 /* : MType */;
9346 val* var61 /* : String */;
9347 static val* varonce62;
9348 val* var63 /* : String */;
9349 char* var64 /* : NativeString */;
9350 long var65 /* : Int */;
9351 val* var66 /* : String */;
9352 short int var67 /* : Bool */;
9353 static val* varonce68;
9354 val* var69 /* : String */;
9355 char* var70 /* : NativeString */;
9356 long var71 /* : Int */;
9357 val* var72 /* : String */;
9358 static val* varonce73;
9359 val* var74 /* : String */;
9360 char* var75 /* : NativeString */;
9361 long var76 /* : Int */;
9362 val* var77 /* : String */;
9363 val* var78 /* : AbstractCompiler */;
9364 val* var79 /* : MType */;
9365 short int var80 /* : Bool */;
9366 int cltype81;
9367 int idtype82;
9368 const char* var_class_name83;
9369 val* var84 /* : String */;
9370 static val* varonce85;
9371 val* var86 /* : String */;
9372 char* var87 /* : NativeString */;
9373 long var88 /* : Int */;
9374 val* var89 /* : String */;
9375 val* var90 /* : Array[Object] */;
9376 long var91 /* : Int */;
9377 val* var92 /* : NativeArray[Object] */;
9378 val* var93 /* : String */;
9379 val* var94 /* : MType */;
9380 val* var95 /* : MType */;
9381 short int var96 /* : Bool */;
9382 static val* varonce97;
9383 val* var98 /* : String */;
9384 char* var99 /* : NativeString */;
9385 long var100 /* : Int */;
9386 val* var101 /* : String */;
9387 val* var102 /* : Array[Object] */;
9388 long var103 /* : Int */;
9389 val* var104 /* : NativeArray[Object] */;
9390 val* var105 /* : String */;
9391 static val* varonce106;
9392 val* var107 /* : String */;
9393 char* var108 /* : NativeString */;
9394 long var109 /* : Int */;
9395 val* var110 /* : String */;
9396 val* var111 /* : Array[Object] */;
9397 long var112 /* : Int */;
9398 val* var113 /* : NativeArray[Object] */;
9399 val* var114 /* : String */;
9400 var_value1 = p0;
9401 var_value2 = p1;
9402 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
9403 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var1) /* new_var on <self:GlobalCompilerVisitor>*/;
9404 var_res = var2;
9405 var3 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value2) /* mtype on <var_value2:RuntimeVariable>*/;
9406 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_compiler__MType__ctype]))(var3) /* ctype on <var3:MType>*/;
9407 if (varonce) {
9408 var5 = varonce;
9409 } else {
9410 var6 = "val*";
9411 var7 = 4;
9412 var8 = string__NativeString__to_s_with_length(var6, var7);
9413 var5 = var8;
9414 varonce = var5;
9415 }
9416 var9 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_kernel__Object___61d_61d]))(var4, var5) /* == on <var4:String>*/;
9417 if (var9){
9418 var10 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9419 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__MType__ctype]))(var10) /* ctype on <var10:MType>*/;
9420 if (varonce12) {
9421 var13 = varonce12;
9422 } else {
9423 var14 = "val*";
9424 var15 = 4;
9425 var16 = string__NativeString__to_s_with_length(var14, var15);
9426 var13 = var16;
9427 varonce12 = var13;
9428 }
9429 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
9430 if (var17){
9431 if (varonce18) {
9432 var19 = varonce18;
9433 } else {
9434 var20 = " = ";
9435 var21 = 3;
9436 var22 = string__NativeString__to_s_with_length(var20, var21);
9437 var19 = var22;
9438 varonce18 = var19;
9439 }
9440 if (varonce23) {
9441 var24 = varonce23;
9442 } else {
9443 var25 = "->classid == ";
9444 var26 = 13;
9445 var27 = string__NativeString__to_s_with_length(var25, var26);
9446 var24 = var27;
9447 varonce23 = var24;
9448 }
9449 if (varonce28) {
9450 var29 = varonce28;
9451 } else {
9452 var30 = "->classid;";
9453 var31 = 10;
9454 var32 = string__NativeString__to_s_with_length(var30, var31);
9455 var29 = var32;
9456 varonce28 = var29;
9457 }
9458 var33 = NEW_array__Array(&type_array__Arraykernel__Object);
9459 { /* var33 = array_instance Array[Object] */
9460 var34 = 6;
9461 var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
9462 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var_res;
9463 ((struct instance_array__NativeArray*)var35)->values[1] = (val*) var19;
9464 ((struct instance_array__NativeArray*)var35)->values[2] = (val*) var_value1;
9465 ((struct instance_array__NativeArray*)var35)->values[3] = (val*) var24;
9466 ((struct instance_array__NativeArray*)var35)->values[4] = (val*) var_value2;
9467 ((struct instance_array__NativeArray*)var35)->values[5] = (val*) var29;
9468 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
9469 CHECK_NEW_array__Array(var33);
9470 }
9471 var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
9472 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var36) /* add on <self:GlobalCompilerVisitor>*/;
9473 } else {
9474 if (varonce37) {
9475 var38 = varonce37;
9476 } else {
9477 var39 = " = ";
9478 var40 = 3;
9479 var41 = string__NativeString__to_s_with_length(var39, var40);
9480 var38 = var41;
9481 varonce37 = var38;
9482 }
9483 var42 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9484 var43 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9485 /* <var43:MType> isa MClassType */
9486 cltype = type_model__MClassType.color;
9487 idtype = type_model__MClassType.id;
9488 if(cltype >= var43->type->table_size) {
9489 var44 = 0;
9490 } else {
9491 var44 = var43->type->type_table[cltype] == idtype;
9492 }
9493 if (!var44) {
9494 var_class_name = var43 == NULL ? "null" : var43->type->name;
9495 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
9496 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 767);
9497 exit(1);
9498 }
9499 var45 = ((val* (*)(val*, val*))(var42->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var42, var43) /* classid on <var42:AbstractCompiler(GlobalCompiler)>*/;
9500 if (varonce46) {
9501 var47 = varonce46;
9502 } else {
9503 var48 = " == ";
9504 var49 = 4;
9505 var50 = string__NativeString__to_s_with_length(var48, var49);
9506 var47 = var50;
9507 varonce46 = var47;
9508 }
9509 if (varonce51) {
9510 var52 = varonce51;
9511 } else {
9512 var53 = "->classid;";
9513 var54 = 10;
9514 var55 = string__NativeString__to_s_with_length(var53, var54);
9515 var52 = var55;
9516 varonce51 = var52;
9517 }
9518 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
9519 { /* var56 = array_instance Array[Object] */
9520 var57 = 6;
9521 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
9522 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var_res;
9523 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var38;
9524 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var45;
9525 ((struct instance_array__NativeArray*)var58)->values[3] = (val*) var47;
9526 ((struct instance_array__NativeArray*)var58)->values[4] = (val*) var_value2;
9527 ((struct instance_array__NativeArray*)var58)->values[5] = (val*) var52;
9528 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
9529 CHECK_NEW_array__Array(var56);
9530 }
9531 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
9532 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
9533 }
9534 } else {
9535 var60 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9536 var61 = ((val* (*)(val*))(var60->class->vft[COLOR_abstract_compiler__MType__ctype]))(var60) /* ctype on <var60:MType>*/;
9537 if (varonce62) {
9538 var63 = varonce62;
9539 } else {
9540 var64 = "val*";
9541 var65 = 4;
9542 var66 = string__NativeString__to_s_with_length(var64, var65);
9543 var63 = var66;
9544 varonce62 = var63;
9545 }
9546 var67 = ((short int (*)(val*, val*))(var61->class->vft[COLOR_kernel__Object___61d_61d]))(var61, var63) /* == on <var61:String>*/;
9547 if (var67){
9548 if (varonce68) {
9549 var69 = varonce68;
9550 } else {
9551 var70 = " = ";
9552 var71 = 3;
9553 var72 = string__NativeString__to_s_with_length(var70, var71);
9554 var69 = var72;
9555 varonce68 = var69;
9556 }
9557 if (varonce73) {
9558 var74 = varonce73;
9559 } else {
9560 var75 = "->classid == ";
9561 var76 = 13;
9562 var77 = string__NativeString__to_s_with_length(var75, var76);
9563 var74 = var77;
9564 varonce73 = var74;
9565 }
9566 var78 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9567 var79 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value2) /* mtype on <var_value2:RuntimeVariable>*/;
9568 /* <var79:MType> isa MClassType */
9569 cltype81 = type_model__MClassType.color;
9570 idtype82 = type_model__MClassType.id;
9571 if(cltype81 >= var79->type->table_size) {
9572 var80 = 0;
9573 } else {
9574 var80 = var79->type->type_table[cltype81] == idtype82;
9575 }
9576 if (!var80) {
9577 var_class_name83 = var79 == NULL ? "null" : var79->type->name;
9578 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name83);
9579 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 771);
9580 exit(1);
9581 }
9582 var84 = ((val* (*)(val*, val*))(var78->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var78, var79) /* classid on <var78:AbstractCompiler(GlobalCompiler)>*/;
9583 if (varonce85) {
9584 var86 = varonce85;
9585 } else {
9586 var87 = ";";
9587 var88 = 1;
9588 var89 = string__NativeString__to_s_with_length(var87, var88);
9589 var86 = var89;
9590 varonce85 = var86;
9591 }
9592 var90 = NEW_array__Array(&type_array__Arraykernel__Object);
9593 { /* var90 = array_instance Array[Object] */
9594 var91 = 6;
9595 var92 = NEW_array__NativeArray(var91, &type_array__NativeArraykernel__Object);
9596 ((struct instance_array__NativeArray*)var92)->values[0] = (val*) var_res;
9597 ((struct instance_array__NativeArray*)var92)->values[1] = (val*) var69;
9598 ((struct instance_array__NativeArray*)var92)->values[2] = (val*) var_value1;
9599 ((struct instance_array__NativeArray*)var92)->values[3] = (val*) var74;
9600 ((struct instance_array__NativeArray*)var92)->values[4] = (val*) var84;
9601 ((struct instance_array__NativeArray*)var92)->values[5] = (val*) var86;
9602 ((void (*)(val*, val*, long))(var90->class->vft[COLOR_array__Array__with_native]))(var90, var92, var91) /* with_native on <var90:Array[Object]>*/;
9603 CHECK_NEW_array__Array(var90);
9604 }
9605 var93 = ((val* (*)(val*))(var90->class->vft[COLOR_string__Object__to_s]))(var90) /* to_s on <var90:Array[Object]>*/;
9606 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var93) /* add on <self:GlobalCompilerVisitor>*/;
9607 } else {
9608 var94 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value1) /* mcasttype on <var_value1:RuntimeVariable>*/;
9609 var95 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value2) /* mcasttype on <var_value2:RuntimeVariable>*/;
9610 var96 = ((short int (*)(val*, val*))(var94->class->vft[COLOR_kernel__Object___61d_61d]))(var94, var95) /* == on <var94:MType>*/;
9611 if (var96){
9612 if (varonce97) {
9613 var98 = varonce97;
9614 } else {
9615 var99 = " = 1;";
9616 var100 = 5;
9617 var101 = string__NativeString__to_s_with_length(var99, var100);
9618 var98 = var101;
9619 varonce97 = var98;
9620 }
9621 var102 = NEW_array__Array(&type_array__Arraykernel__Object);
9622 { /* var102 = array_instance Array[Object] */
9623 var103 = 2;
9624 var104 = NEW_array__NativeArray(var103, &type_array__NativeArraykernel__Object);
9625 ((struct instance_array__NativeArray*)var104)->values[0] = (val*) var_res;
9626 ((struct instance_array__NativeArray*)var104)->values[1] = (val*) var98;
9627 ((void (*)(val*, val*, long))(var102->class->vft[COLOR_array__Array__with_native]))(var102, var104, var103) /* with_native on <var102:Array[Object]>*/;
9628 CHECK_NEW_array__Array(var102);
9629 }
9630 var105 = ((val* (*)(val*))(var102->class->vft[COLOR_string__Object__to_s]))(var102) /* to_s on <var102:Array[Object]>*/;
9631 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var105) /* add on <self:GlobalCompilerVisitor>*/;
9632 } else {
9633 if (varonce106) {
9634 var107 = varonce106;
9635 } else {
9636 var108 = " = 0;";
9637 var109 = 5;
9638 var110 = string__NativeString__to_s_with_length(var108, var109);
9639 var107 = var110;
9640 varonce106 = var107;
9641 }
9642 var111 = NEW_array__Array(&type_array__Arraykernel__Object);
9643 { /* var111 = array_instance Array[Object] */
9644 var112 = 2;
9645 var113 = NEW_array__NativeArray(var112, &type_array__NativeArraykernel__Object);
9646 ((struct instance_array__NativeArray*)var113)->values[0] = (val*) var_res;
9647 ((struct instance_array__NativeArray*)var113)->values[1] = (val*) var107;
9648 ((void (*)(val*, val*, long))(var111->class->vft[COLOR_array__Array__with_native]))(var111, var113, var112) /* with_native on <var111:Array[Object]>*/;
9649 CHECK_NEW_array__Array(var111);
9650 }
9651 var114 = ((val* (*)(val*))(var111->class->vft[COLOR_string__Object__to_s]))(var111) /* to_s on <var111:Array[Object]>*/;
9652 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var114) /* add on <self:GlobalCompilerVisitor>*/;
9653 }
9654 }
9655 }
9656 var = var_res;
9657 goto RET_LABEL;
9658 RET_LABEL:;
9659 return var;
9660 }
9661 /* method global_compiler#GlobalCompilerVisitor#is_same_type_test for (self: Object, RuntimeVariable, RuntimeVariable): RuntimeVariable */
9662 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__is_same_type_test(val* self, val* p0, val* p1) {
9663 val* var /* : RuntimeVariable */;
9664 val* var1 /* : RuntimeVariable */;
9665 var1 = global_compiler__GlobalCompilerVisitor__is_same_type_test(self, p0, p1);
9666 var = var1;
9667 RET_LABEL:;
9668 return var;
9669 }
9670 /* method global_compiler#GlobalCompilerVisitor#class_name_string for (self: GlobalCompilerVisitor, RuntimeVariable): String */
9671 val* global_compiler__GlobalCompilerVisitor__class_name_string(val* self, val* p0) {
9672 val* var /* : String */;
9673 val* var_value /* var value: RuntimeVariable */;
9674 static val* varonce;
9675 val* var1 /* : String */;
9676 char* var2 /* : NativeString */;
9677 long var3 /* : Int */;
9678 val* var4 /* : String */;
9679 val* var5 /* : String */;
9680 val* var_res /* var res: String */;
9681 static val* varonce6;
9682 val* var7 /* : String */;
9683 char* var8 /* : NativeString */;
9684 long var9 /* : Int */;
9685 val* var10 /* : String */;
9686 static val* varonce11;
9687 val* var12 /* : String */;
9688 char* var13 /* : NativeString */;
9689 long var14 /* : Int */;
9690 val* var15 /* : String */;
9691 val* var16 /* : Array[Object] */;
9692 long var17 /* : Int */;
9693 val* var18 /* : NativeArray[Object] */;
9694 val* var19 /* : String */;
9695 val* var20 /* : MType */;
9696 val* var21 /* : String */;
9697 static val* varonce22;
9698 val* var23 /* : String */;
9699 char* var24 /* : NativeString */;
9700 long var25 /* : Int */;
9701 val* var26 /* : String */;
9702 short int var27 /* : Bool */;
9703 static val* varonce28;
9704 val* var29 /* : String */;
9705 char* var30 /* : NativeString */;
9706 long var31 /* : Int */;
9707 val* var32 /* : String */;
9708 static val* varonce33;
9709 val* var34 /* : String */;
9710 char* var35 /* : NativeString */;
9711 long var36 /* : Int */;
9712 val* var37 /* : String */;
9713 val* var38 /* : Array[Object] */;
9714 long var39 /* : Int */;
9715 val* var40 /* : NativeArray[Object] */;
9716 val* var41 /* : String */;
9717 static val* varonce42;
9718 val* var43 /* : String */;
9719 char* var44 /* : NativeString */;
9720 long var45 /* : Int */;
9721 val* var46 /* : String */;
9722 val* var47 /* : AbstractCompiler */;
9723 val* var48 /* : MType */;
9724 short int var49 /* : Bool */;
9725 int cltype;
9726 int idtype;
9727 const char* var_class_name;
9728 val* var50 /* : String */;
9729 static val* varonce51;
9730 val* var52 /* : String */;
9731 char* var53 /* : NativeString */;
9732 long var54 /* : Int */;
9733 val* var55 /* : String */;
9734 val* var56 /* : Array[Object] */;
9735 long var57 /* : Int */;
9736 val* var58 /* : NativeArray[Object] */;
9737 val* var59 /* : String */;
9738 var_value = p0;
9739 if (varonce) {
9740 var1 = varonce;
9741 } else {
9742 var2 = "var_class_name";
9743 var3 = 14;
9744 var4 = string__NativeString__to_s_with_length(var2, var3);
9745 var1 = var4;
9746 varonce = var1;
9747 }
9748 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var1) /* get_name on <self:GlobalCompilerVisitor>*/;
9749 var_res = var5;
9750 if (varonce6) {
9751 var7 = varonce6;
9752 } else {
9753 var8 = "const char* ";
9754 var9 = 12;
9755 var10 = string__NativeString__to_s_with_length(var8, var9);
9756 var7 = var10;
9757 varonce6 = var7;
9758 }
9759 if (varonce11) {
9760 var12 = varonce11;
9761 } else {
9762 var13 = ";";
9763 var14 = 1;
9764 var15 = string__NativeString__to_s_with_length(var13, var14);
9765 var12 = var15;
9766 varonce11 = var12;
9767 }
9768 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
9769 { /* var16 = array_instance Array[Object] */
9770 var17 = 3;
9771 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
9772 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
9773 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_res;
9774 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
9775 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
9776 CHECK_NEW_array__Array(var16);
9777 }
9778 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
9779 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var19) /* add_decl on <self:GlobalCompilerVisitor>*/;
9780 var20 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
9781 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_compiler__MType__ctype]))(var20) /* ctype on <var20:MType>*/;
9782 if (varonce22) {
9783 var23 = varonce22;
9784 } else {
9785 var24 = "val*";
9786 var25 = 4;
9787 var26 = string__NativeString__to_s_with_length(var24, var25);
9788 var23 = var26;
9789 varonce22 = var23;
9790 }
9791 var27 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var23) /* == on <var21:String>*/;
9792 if (var27){
9793 if (varonce28) {
9794 var29 = varonce28;
9795 } else {
9796 var30 = " = class_names[";
9797 var31 = 15;
9798 var32 = string__NativeString__to_s_with_length(var30, var31);
9799 var29 = var32;
9800 varonce28 = var29;
9801 }
9802 if (varonce33) {
9803 var34 = varonce33;
9804 } else {
9805 var35 = "->classid];";
9806 var36 = 11;
9807 var37 = string__NativeString__to_s_with_length(var35, var36);
9808 var34 = var37;
9809 varonce33 = var34;
9810 }
9811 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
9812 { /* var38 = array_instance Array[Object] */
9813 var39 = 4;
9814 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
9815 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var_res;
9816 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var29;
9817 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var_value;
9818 ((struct instance_array__NativeArray*)var40)->values[3] = (val*) var34;
9819 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
9820 CHECK_NEW_array__Array(var38);
9821 }
9822 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
9823 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var41) /* add on <self:GlobalCompilerVisitor>*/;
9824 } else {
9825 if (varonce42) {
9826 var43 = varonce42;
9827 } else {
9828 var44 = " = class_names[";
9829 var45 = 15;
9830 var46 = string__NativeString__to_s_with_length(var44, var45);
9831 var43 = var46;
9832 varonce42 = var43;
9833 }
9834 var47 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9835 var48 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
9836 /* <var48:MType> isa MClassType */
9837 cltype = type_model__MClassType.color;
9838 idtype = type_model__MClassType.id;
9839 if(cltype >= var48->type->table_size) {
9840 var49 = 0;
9841 } else {
9842 var49 = var48->type->type_table[cltype] == idtype;
9843 }
9844 if (!var49) {
9845 var_class_name = var48 == NULL ? "null" : var48->type->name;
9846 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
9847 fprintf(stderr, " (%s:%d)\n", "src/global_compiler.nit", 788);
9848 exit(1);
9849 }
9850 var50 = ((val* (*)(val*, val*))(var47->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var47, var48) /* classid on <var47:AbstractCompiler(GlobalCompiler)>*/;
9851 if (varonce51) {
9852 var52 = varonce51;
9853 } else {
9854 var53 = "];";
9855 var54 = 2;
9856 var55 = string__NativeString__to_s_with_length(var53, var54);
9857 var52 = var55;
9858 varonce51 = var52;
9859 }
9860 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
9861 { /* var56 = array_instance Array[Object] */
9862 var57 = 4;
9863 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
9864 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var_res;
9865 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var43;
9866 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var50;
9867 ((struct instance_array__NativeArray*)var58)->values[3] = (val*) var52;
9868 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
9869 CHECK_NEW_array__Array(var56);
9870 }
9871 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
9872 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
9873 }
9874 var = var_res;
9875 goto RET_LABEL;
9876 RET_LABEL:;
9877 return var;
9878 }
9879 /* method global_compiler#GlobalCompilerVisitor#class_name_string for (self: Object, RuntimeVariable): String */
9880 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__class_name_string(val* self, val* p0) {
9881 val* var /* : String */;
9882 val* var1 /* : String */;
9883 var1 = global_compiler__GlobalCompilerVisitor__class_name_string(self, p0);
9884 var = var1;
9885 RET_LABEL:;
9886 return var;
9887 }