9395e8d216ca336a5f2c28845bb8cf2da11f862c
[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 (%s:%d)\n", "Uninitialized attribute @runtime_type_analysis", "src/global_compiler.nit", 85);
336 exit(1);
337 }
338 var = var1;
339 RET_LABEL:;
340 return var;
341 }
342 /* method global_compiler#GlobalCompiler#runtime_type_analysis for (self: Object): RapidTypeAnalysis */
343 val* VIRTUAL_global_compiler__GlobalCompiler__runtime_type_analysis(val* self) {
344 val* var /* : RapidTypeAnalysis */;
345 val* var1 /* : RapidTypeAnalysis */;
346 var1 = global_compiler__GlobalCompiler__runtime_type_analysis(self);
347 var = var1;
348 RET_LABEL:;
349 return var;
350 }
351 /* method global_compiler#GlobalCompiler#runtime_type_analysis= for (self: GlobalCompiler, RapidTypeAnalysis) */
352 void global_compiler__GlobalCompiler__runtime_type_analysis_61d(val* self, val* p0) {
353 self->attrs[COLOR_global_compiler__GlobalCompiler___64druntime_type_analysis].val = p0; /* @runtime_type_analysis on <self:GlobalCompiler> */
354 RET_LABEL:;
355 }
356 /* method global_compiler#GlobalCompiler#runtime_type_analysis= for (self: Object, RapidTypeAnalysis) */
357 void VIRTUAL_global_compiler__GlobalCompiler__runtime_type_analysis_61d(val* self, val* p0) {
358 global_compiler__GlobalCompiler__runtime_type_analysis_61d(self, p0);
359 RET_LABEL:;
360 }
361 /* method global_compiler#GlobalCompiler#init for (self: GlobalCompiler, MModule, ModelBuilder, RapidTypeAnalysis) */
362 void global_compiler__GlobalCompiler__init(val* self, val* p0, val* p1, val* p2) {
363 val* var_mainmodule /* var mainmodule: MModule */;
364 val* var_modelbuilder /* var modelbuilder: ModelBuilder */;
365 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
366 val* var /* : String */;
367 static val* varonce;
368 val* var1 /* : String */;
369 char* var2 /* : NativeString */;
370 long var3 /* : Int */;
371 val* var4 /* : String */;
372 val* var5 /* : Array[Object] */;
373 long var6 /* : Int */;
374 val* var7 /* : NativeArray[Object] */;
375 val* var8 /* : String */;
376 val* var9 /* : CodeFile */;
377 val* var_file /* var file: CodeFile */;
378 val* var10 /* : CodeWriter */;
379 val* var11 /* : Array[MClassType] */;
380 val* var12 /* : HashSet[MClassType] */;
381 val* var13 /* : Iterator[nullable Object] */;
382 short int var14 /* : Bool */;
383 val* var15 /* : nullable Object */;
384 val* var_t /* var t: MClassType */;
385 val* var16 /* : String */;
386 static val* varonce17;
387 val* var18 /* : String */;
388 char* var19 /* : NativeString */;
389 long var20 /* : Int */;
390 val* var21 /* : String */;
391 short int var22 /* : Bool */;
392 val* var23 /* : Array[MClassType] */;
393 var_mainmodule = p0;
394 var_modelbuilder = p1;
395 var_runtime_type_analysis = p2;
396 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__init]))(self, var_mainmodule, var_modelbuilder) /* init on <self:GlobalCompiler>*/;
397 var = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
398 if (varonce) {
399 var1 = varonce;
400 } else {
401 var2 = ".nitgg";
402 var3 = 6;
403 var4 = string__NativeString__to_s_with_length(var2, var3);
404 var1 = var4;
405 varonce = var1;
406 }
407 var5 = NEW_array__Array(&type_array__Arraykernel__Object);
408 { /* var5 = array_instance Array[Object] */
409 var6 = 2;
410 var7 = NEW_array__NativeArray(var6, &type_array__NativeArraykernel__Object);
411 ((struct instance_array__NativeArray*)var7)->values[0] = (val*) var;
412 ((struct instance_array__NativeArray*)var7)->values[1] = (val*) var1;
413 ((void (*)(val*, val*, long))(var5->class->vft[COLOR_array__Array__with_native]))(var5, var7, var6) /* with_native on <var5:Array[Object]>*/;
414 CHECK_NEW_array__Array(var5);
415 }
416 var8 = ((val* (*)(val*))(var5->class->vft[COLOR_string__Object__to_s]))(var5) /* to_s on <var5:Array[Object]>*/;
417 var9 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(self, var8) /* new_file on <self:GlobalCompiler>*/;
418 var_file = var9;
419 var10 = NEW_abstract_compiler__CodeWriter(&type_abstract_compiler__CodeWriter);
420 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_compiler__CodeWriter__init]))(var10, var_file) /* init on <var10:CodeWriter>*/;
421 CHECK_NEW_abstract_compiler__CodeWriter(var10);
422 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header_61d]))(self, var10) /* header= on <self:GlobalCompiler>*/;
423 ((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>*/;
424 var11 = NEW_array__Array(&type_array__Arraymodel__MClassType);
425 ((void (*)(val*))(var11->class->vft[COLOR_array__Array__init]))(var11) /* init on <var11:Array[MClassType]>*/;
426 CHECK_NEW_array__Array(var11);
427 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__live_primitive_types_61d]))(self, var11) /* live_primitive_types= on <self:GlobalCompiler>*/;
428 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>*/;
429 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:HashSet[MClassType]>*/;
430 for(;;) {
431 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
432 if(!var14) break;
433 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
434 var_t = var15;
435 var16 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MClassType>*/;
436 if (varonce17) {
437 var18 = varonce17;
438 } else {
439 var19 = "val*";
440 var20 = 4;
441 var21 = string__NativeString__to_s_with_length(var19, var20);
442 var18 = var21;
443 varonce17 = var18;
444 }
445 var22 = ((short int (*)(val*, val*))(var16->class->vft[COLOR_kernel__Object___33d_61d]))(var16, var18) /* != on <var16:String>*/;
446 if (var22){
447 var23 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__live_primitive_types]))(self) /* live_primitive_types on <self:GlobalCompiler>*/;
448 ((void (*)(val*, val*))(var23->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var23, var_t) /* add on <var23:Array[MClassType]>*/;
449 } else {
450 }
451 CONTINUE_label: (void)0;
452 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
453 }
454 BREAK_label: (void)0;
455 RET_LABEL:;
456 }
457 /* method global_compiler#GlobalCompiler#init for (self: Object, MModule, ModelBuilder, RapidTypeAnalysis) */
458 void VIRTUAL_global_compiler__GlobalCompiler__init(val* self, val* p0, val* p1, val* p2) {
459 global_compiler__GlobalCompiler__init(self, p0, p1, p2);
460 RET_LABEL:;
461 }
462 /* method global_compiler#GlobalCompiler#compile_class_names for (self: GlobalCompiler) */
463 void global_compiler__GlobalCompiler__compile_class_names(val* self) {
464 val* var /* : AbstractCompilerVisitor */;
465 val* var_v /* var v: GlobalCompilerVisitor */;
466 val* var1 /* : CodeWriter */;
467 static val* varonce;
468 val* var2 /* : String */;
469 char* var3 /* : NativeString */;
470 long var4 /* : Int */;
471 val* var5 /* : String */;
472 static val* varonce6;
473 val* var7 /* : String */;
474 char* var8 /* : NativeString */;
475 long var9 /* : Int */;
476 val* var10 /* : String */;
477 val* var11 /* : RapidTypeAnalysis */;
478 val* var12 /* : HashSet[MClassType] */;
479 val* var13 /* : Iterator[nullable Object] */;
480 short int var14 /* : Bool */;
481 val* var15 /* : nullable Object */;
482 val* var_t /* var t: MClassType */;
483 static val* varonce16;
484 val* var17 /* : String */;
485 char* var18 /* : NativeString */;
486 long var19 /* : Int */;
487 val* var20 /* : String */;
488 static val* varonce21;
489 val* var22 /* : String */;
490 char* var23 /* : NativeString */;
491 long var24 /* : Int */;
492 val* var25 /* : String */;
493 val* var26 /* : String */;
494 static val* varonce27;
495 val* var28 /* : String */;
496 char* var29 /* : NativeString */;
497 long var30 /* : Int */;
498 val* var31 /* : String */;
499 val* var32 /* : Array[Object] */;
500 long var33 /* : Int */;
501 val* var34 /* : NativeArray[Object] */;
502 val* var35 /* : String */;
503 static val* varonce36;
504 val* var37 /* : String */;
505 char* var38 /* : NativeString */;
506 long var39 /* : Int */;
507 val* var40 /* : String */;
508 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
509 var_v = var;
510 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
511 if (varonce) {
512 var2 = varonce;
513 } else {
514 var3 = "extern const char const * class_names[];";
515 var4 = 40;
516 var5 = string__NativeString__to_s_with_length(var3, var4);
517 var2 = var5;
518 varonce = var2;
519 }
520 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var1, var2) /* add_decl on <var1:CodeWriter>*/;
521 if (varonce6) {
522 var7 = varonce6;
523 } else {
524 var8 = "const char const * class_names[] = {";
525 var9 = 36;
526 var10 = string__NativeString__to_s_with_length(var8, var9);
527 var7 = var10;
528 varonce6 = var7;
529 }
530 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var7) /* add on <var_v:GlobalCompilerVisitor>*/;
531 var11 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
532 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var11) /* live_types on <var11:RapidTypeAnalysis>*/;
533 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:HashSet[MClassType]>*/;
534 for(;;) {
535 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
536 if(!var14) break;
537 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
538 var_t = var15;
539 if (varonce16) {
540 var17 = varonce16;
541 } else {
542 var18 = "\"";
543 var19 = 1;
544 var20 = string__NativeString__to_s_with_length(var18, var19);
545 var17 = var20;
546 varonce16 = var17;
547 }
548 if (varonce21) {
549 var22 = varonce21;
550 } else {
551 var23 = "\", /* ";
552 var24 = 6;
553 var25 = string__NativeString__to_s_with_length(var23, var24);
554 var22 = var25;
555 varonce21 = var22;
556 }
557 var26 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(self, var_t) /* classid on <self:GlobalCompiler>*/;
558 if (varonce27) {
559 var28 = varonce27;
560 } else {
561 var29 = " */";
562 var30 = 3;
563 var31 = string__NativeString__to_s_with_length(var29, var30);
564 var28 = var31;
565 varonce27 = var28;
566 }
567 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
568 { /* var32 = array_instance Array[Object] */
569 var33 = 5;
570 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
571 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var17;
572 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_t;
573 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var22;
574 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var26;
575 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
576 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
577 CHECK_NEW_array__Array(var32);
578 }
579 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
580 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var35) /* add on <var_v:GlobalCompilerVisitor>*/;
581 CONTINUE_label: (void)0;
582 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
583 }
584 BREAK_label: (void)0;
585 if (varonce36) {
586 var37 = varonce36;
587 } else {
588 var38 = "};";
589 var39 = 2;
590 var40 = string__NativeString__to_s_with_length(var38, var39);
591 var37 = var40;
592 varonce36 = var37;
593 }
594 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var37) /* add on <var_v:GlobalCompilerVisitor>*/;
595 RET_LABEL:;
596 }
597 /* method global_compiler#GlobalCompiler#compile_class_names for (self: Object) */
598 void VIRTUAL_global_compiler__GlobalCompiler__compile_class_names(val* self) {
599 global_compiler__GlobalCompiler__compile_class_names(self);
600 RET_LABEL:;
601 }
602 /* method global_compiler#GlobalCompiler#classid for (self: GlobalCompiler, MClassType): String */
603 val* global_compiler__GlobalCompiler__classid(val* self, val* p0) {
604 val* var /* : String */;
605 val* var_mtype /* var mtype: MClassType */;
606 val* var1 /* : HashMap[MClassType, String] */;
607 short int var2 /* : Bool */;
608 val* var3 /* : HashMap[MClassType, String] */;
609 val* var4 /* : nullable Object */;
610 static val* varonce;
611 val* var5 /* : String */;
612 char* var6 /* : NativeString */;
613 long var7 /* : Int */;
614 val* var8 /* : String */;
615 val* var9 /* : Array[Object] */;
616 long var10 /* : Int */;
617 val* var11 /* : NativeArray[Object] */;
618 val* var12 /* : String */;
619 var_mtype = p0;
620 var1 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
621 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var1, var_mtype) /* has_key on <var1:HashMap[MClassType, String]>*/;
622 if (var2){
623 var3 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
624 var4 = ((val* (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var3, var_mtype) /* [] on <var3:HashMap[MClassType, String]>*/;
625 var = var4;
626 goto RET_LABEL;
627 } else {
628 }
629 if (varonce) {
630 var5 = varonce;
631 } else {
632 var6 = "No classid for ";
633 var7 = 15;
634 var8 = string__NativeString__to_s_with_length(var6, var7);
635 var5 = var8;
636 varonce = var5;
637 }
638 var9 = NEW_array__Array(&type_array__Arraykernel__Object);
639 { /* var9 = array_instance Array[Object] */
640 var10 = 2;
641 var11 = NEW_array__NativeArray(var10, &type_array__NativeArraykernel__Object);
642 ((struct instance_array__NativeArray*)var11)->values[0] = (val*) var5;
643 ((struct instance_array__NativeArray*)var11)->values[1] = (val*) var_mtype;
644 ((void (*)(val*, val*, long))(var9->class->vft[COLOR_array__Array__with_native]))(var9, var11, var10) /* with_native on <var9:Array[Object]>*/;
645 CHECK_NEW_array__Array(var9);
646 }
647 var12 = ((val* (*)(val*))(var9->class->vft[COLOR_string__Object__to_s]))(var9) /* to_s on <var9:Array[Object]>*/;
648 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var12) /* print on <self:GlobalCompiler>*/;
649 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "src/global_compiler.nit", 121);
650 exit(1);
651 RET_LABEL:;
652 return var;
653 }
654 /* method global_compiler#GlobalCompiler#classid for (self: Object, MClassType): String */
655 val* VIRTUAL_global_compiler__GlobalCompiler__classid(val* self, val* p0) {
656 val* var /* : String */;
657 val* var1 /* : String */;
658 var1 = global_compiler__GlobalCompiler__classid(self, p0);
659 var = var1;
660 RET_LABEL:;
661 return var;
662 }
663 /* method global_compiler#GlobalCompiler#classids for (self: GlobalCompiler): HashMap[MClassType, String] */
664 val* global_compiler__GlobalCompiler__classids(val* self) {
665 val* var /* : HashMap[MClassType, String] */;
666 val* var1 /* : HashMap[MClassType, String] */;
667 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dclassids].val; /* @classids on <self:GlobalCompiler> */
668 if (var1 == NULL) {
669 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @classids", "src/global_compiler.nit", 124);
670 exit(1);
671 }
672 var = var1;
673 RET_LABEL:;
674 return var;
675 }
676 /* method global_compiler#GlobalCompiler#classids for (self: Object): HashMap[MClassType, String] */
677 val* VIRTUAL_global_compiler__GlobalCompiler__classids(val* self) {
678 val* var /* : HashMap[MClassType, String] */;
679 val* var1 /* : HashMap[MClassType, String] */;
680 var1 = global_compiler__GlobalCompiler__classids(self);
681 var = var1;
682 RET_LABEL:;
683 return var;
684 }
685 /* method global_compiler#GlobalCompiler#classids= for (self: GlobalCompiler, HashMap[MClassType, String]) */
686 void global_compiler__GlobalCompiler__classids_61d(val* self, val* p0) {
687 self->attrs[COLOR_global_compiler__GlobalCompiler___64dclassids].val = p0; /* @classids on <self:GlobalCompiler> */
688 RET_LABEL:;
689 }
690 /* method global_compiler#GlobalCompiler#classids= for (self: Object, HashMap[MClassType, String]) */
691 void VIRTUAL_global_compiler__GlobalCompiler__classids_61d(val* self, val* p0) {
692 global_compiler__GlobalCompiler__classids_61d(self, p0);
693 RET_LABEL:;
694 }
695 /* method global_compiler#GlobalCompiler#compile_header_structs for (self: GlobalCompiler) */
696 void global_compiler__GlobalCompiler__compile_header_structs(val* self) {
697 val* var /* : CodeWriter */;
698 static val* varonce;
699 val* var1 /* : String */;
700 char* var2 /* : NativeString */;
701 long var3 /* : Int */;
702 val* var4 /* : String */;
703 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
704 if (varonce) {
705 var1 = varonce;
706 } else {
707 var2 = "typedef struct {int classid;} val; /* general C type representing a Nit instance. */";
708 var3 = 84;
709 var4 = string__NativeString__to_s_with_length(var2, var3);
710 var1 = var4;
711 varonce = var1;
712 }
713 ((void (*)(val*, val*))(var->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var, var1) /* add_decl on <var:CodeWriter>*/;
714 RET_LABEL:;
715 }
716 /* method global_compiler#GlobalCompiler#compile_header_structs for (self: Object) */
717 void VIRTUAL_global_compiler__GlobalCompiler__compile_header_structs(val* self) {
718 global_compiler__GlobalCompiler__compile_header_structs(self);
719 RET_LABEL:;
720 }
721 /* method global_compiler#GlobalCompiler#live_primitive_types for (self: GlobalCompiler): Array[MClassType] */
722 val* global_compiler__GlobalCompiler__live_primitive_types(val* self) {
723 val* var /* : Array[MClassType] */;
724 val* var1 /* : Array[MClassType] */;
725 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dlive_primitive_types].val; /* @live_primitive_types on <self:GlobalCompiler> */
726 if (var1 == NULL) {
727 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @live_primitive_types", "src/global_compiler.nit", 135);
728 exit(1);
729 }
730 var = var1;
731 RET_LABEL:;
732 return var;
733 }
734 /* method global_compiler#GlobalCompiler#live_primitive_types for (self: Object): Array[MClassType] */
735 val* VIRTUAL_global_compiler__GlobalCompiler__live_primitive_types(val* self) {
736 val* var /* : Array[MClassType] */;
737 val* var1 /* : Array[MClassType] */;
738 var1 = global_compiler__GlobalCompiler__live_primitive_types(self);
739 var = var1;
740 RET_LABEL:;
741 return var;
742 }
743 /* method global_compiler#GlobalCompiler#live_primitive_types= for (self: GlobalCompiler, Array[MClassType]) */
744 void global_compiler__GlobalCompiler__live_primitive_types_61d(val* self, val* p0) {
745 self->attrs[COLOR_global_compiler__GlobalCompiler___64dlive_primitive_types].val = p0; /* @live_primitive_types on <self:GlobalCompiler> */
746 RET_LABEL:;
747 }
748 /* method global_compiler#GlobalCompiler#live_primitive_types= for (self: Object, Array[MClassType]) */
749 void VIRTUAL_global_compiler__GlobalCompiler__live_primitive_types_61d(val* self, val* p0) {
750 global_compiler__GlobalCompiler__live_primitive_types_61d(self, p0);
751 RET_LABEL:;
752 }
753 /* method global_compiler#GlobalCompiler#todo for (self: GlobalCompiler, AbstractRuntimeFunction) */
754 void global_compiler__GlobalCompiler__todo(val* self, val* p0) {
755 val* var_m /* var m: AbstractRuntimeFunction */;
756 val* var /* : HashSet[AbstractRuntimeFunction] */;
757 short int var1 /* : Bool */;
758 val* var2 /* : List[AbstractRuntimeFunction] */;
759 val* var3 /* : HashSet[AbstractRuntimeFunction] */;
760 var_m = p0;
761 var = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(self) /* seen on <self:GlobalCompiler>*/;
762 var1 = ((short int (*)(val*, val*))(var->class->vft[COLOR_abstract_collection__Collection__has]))(var, var_m) /* has on <var:HashSet[AbstractRuntimeFunction]>*/;
763 if (var1){
764 goto RET_LABEL;
765 } else {
766 }
767 var2 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__todos]))(self) /* todos on <self:GlobalCompiler>*/;
768 ((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_m) /* add on <var2:List[AbstractRuntimeFunction]>*/;
769 var3 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__seen]))(self) /* seen on <self:GlobalCompiler>*/;
770 ((void (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var3, var_m) /* add on <var3:HashSet[AbstractRuntimeFunction]>*/;
771 RET_LABEL:;
772 }
773 /* method global_compiler#GlobalCompiler#todo for (self: Object, AbstractRuntimeFunction) */
774 void VIRTUAL_global_compiler__GlobalCompiler__todo(val* self, val* p0) {
775 global_compiler__GlobalCompiler__todo(self, p0);
776 RET_LABEL:;
777 }
778 /* method global_compiler#GlobalCompiler#todos for (self: GlobalCompiler): List[AbstractRuntimeFunction] */
779 val* global_compiler__GlobalCompiler__todos(val* self) {
780 val* var /* : List[AbstractRuntimeFunction] */;
781 val* var1 /* : List[AbstractRuntimeFunction] */;
782 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dtodos].val; /* @todos on <self:GlobalCompiler> */
783 if (var1 == NULL) {
784 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @todos", "src/global_compiler.nit", 147);
785 exit(1);
786 }
787 var = var1;
788 RET_LABEL:;
789 return var;
790 }
791 /* method global_compiler#GlobalCompiler#todos for (self: Object): List[AbstractRuntimeFunction] */
792 val* VIRTUAL_global_compiler__GlobalCompiler__todos(val* self) {
793 val* var /* : List[AbstractRuntimeFunction] */;
794 val* var1 /* : List[AbstractRuntimeFunction] */;
795 var1 = global_compiler__GlobalCompiler__todos(self);
796 var = var1;
797 RET_LABEL:;
798 return var;
799 }
800 /* method global_compiler#GlobalCompiler#todos= for (self: GlobalCompiler, List[AbstractRuntimeFunction]) */
801 void global_compiler__GlobalCompiler__todos_61d(val* self, val* p0) {
802 self->attrs[COLOR_global_compiler__GlobalCompiler___64dtodos].val = p0; /* @todos on <self:GlobalCompiler> */
803 RET_LABEL:;
804 }
805 /* method global_compiler#GlobalCompiler#todos= for (self: Object, List[AbstractRuntimeFunction]) */
806 void VIRTUAL_global_compiler__GlobalCompiler__todos_61d(val* self, val* p0) {
807 global_compiler__GlobalCompiler__todos_61d(self, p0);
808 RET_LABEL:;
809 }
810 /* method global_compiler#GlobalCompiler#seen for (self: GlobalCompiler): HashSet[AbstractRuntimeFunction] */
811 val* global_compiler__GlobalCompiler__seen(val* self) {
812 val* var /* : HashSet[AbstractRuntimeFunction] */;
813 val* var1 /* : HashSet[AbstractRuntimeFunction] */;
814 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dseen].val; /* @seen on <self:GlobalCompiler> */
815 if (var1 == NULL) {
816 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @seen", "src/global_compiler.nit", 150);
817 exit(1);
818 }
819 var = var1;
820 RET_LABEL:;
821 return var;
822 }
823 /* method global_compiler#GlobalCompiler#seen for (self: Object): HashSet[AbstractRuntimeFunction] */
824 val* VIRTUAL_global_compiler__GlobalCompiler__seen(val* self) {
825 val* var /* : HashSet[AbstractRuntimeFunction] */;
826 val* var1 /* : HashSet[AbstractRuntimeFunction] */;
827 var1 = global_compiler__GlobalCompiler__seen(self);
828 var = var1;
829 RET_LABEL:;
830 return var;
831 }
832 /* method global_compiler#GlobalCompiler#seen= for (self: GlobalCompiler, HashSet[AbstractRuntimeFunction]) */
833 void global_compiler__GlobalCompiler__seen_61d(val* self, val* p0) {
834 self->attrs[COLOR_global_compiler__GlobalCompiler___64dseen].val = p0; /* @seen on <self:GlobalCompiler> */
835 RET_LABEL:;
836 }
837 /* method global_compiler#GlobalCompiler#seen= for (self: Object, HashSet[AbstractRuntimeFunction]) */
838 void VIRTUAL_global_compiler__GlobalCompiler__seen_61d(val* self, val* p0) {
839 global_compiler__GlobalCompiler__seen_61d(self, p0);
840 RET_LABEL:;
841 }
842 /* method global_compiler#GlobalCompiler#declare_runtimeclass for (self: GlobalCompiler, MClassType) */
843 void global_compiler__GlobalCompiler__declare_runtimeclass(val* self, val* p0) {
844 val* var_mtype /* var mtype: MClassType */;
845 val* var /* : CodeWriter */;
846 val* var_v /* var v: CodeWriter */;
847 val* var1 /* : RapidTypeAnalysis */;
848 val* var2 /* : HashSet[MClassType] */;
849 short int var3 /* : Bool */;
850 static val* varonce;
851 val* var4 /* : String */;
852 char* var5 /* : NativeString */;
853 long var6 /* : Int */;
854 val* var7 /* : String */;
855 static val* varonce8;
856 val* var9 /* : String */;
857 char* var10 /* : NativeString */;
858 long var11 /* : Int */;
859 val* var12 /* : String */;
860 val* var13 /* : Array[Object] */;
861 long var14 /* : Int */;
862 val* var15 /* : NativeArray[Object] */;
863 val* var16 /* : String */;
864 val* var17 /* : HashMap[MClassType, String] */;
865 long var18 /* : Int */;
866 long var_idnum /* var idnum: Int */;
867 static val* varonce19;
868 val* var20 /* : String */;
869 char* var21 /* : NativeString */;
870 long var22 /* : Int */;
871 val* var23 /* : String */;
872 val* var24 /* : String */;
873 val* var25 /* : String */;
874 val* var_idname /* var idname: String */;
875 val* var26 /* : HashMap[MClassType, String] */;
876 static val* varonce27;
877 val* var28 /* : String */;
878 char* var29 /* : NativeString */;
879 long var30 /* : Int */;
880 val* var31 /* : String */;
881 static val* varonce32;
882 val* var33 /* : String */;
883 char* var34 /* : NativeString */;
884 long var35 /* : Int */;
885 val* var36 /* : String */;
886 static val* varonce37;
887 val* var38 /* : String */;
888 char* var39 /* : NativeString */;
889 long var40 /* : Int */;
890 val* var41 /* : String */;
891 static val* varonce42;
892 val* var43 /* : String */;
893 char* var44 /* : NativeString */;
894 long var45 /* : Int */;
895 val* var46 /* : String */;
896 val* var47 /* : Array[Object] */;
897 long var48 /* : Int */;
898 val* var49 /* : NativeArray[Object] */;
899 val* var50 /* : Object */;
900 val* var51 /* : String */;
901 static val* varonce52;
902 val* var53 /* : String */;
903 char* var54 /* : NativeString */;
904 long var55 /* : Int */;
905 val* var56 /* : String */;
906 val* var57 /* : String */;
907 static val* varonce58;
908 val* var59 /* : String */;
909 char* var60 /* : NativeString */;
910 long var61 /* : Int */;
911 val* var62 /* : String */;
912 val* var63 /* : Array[Object] */;
913 long var64 /* : Int */;
914 val* var65 /* : NativeArray[Object] */;
915 val* var66 /* : String */;
916 static val* varonce67;
917 val* var68 /* : String */;
918 char* var69 /* : NativeString */;
919 long var70 /* : Int */;
920 val* var71 /* : String */;
921 static val* varonce72;
922 val* var73 /* : String */;
923 char* var74 /* : NativeString */;
924 long var75 /* : Int */;
925 val* var76 /* : String */;
926 val* var77 /* : Array[Object] */;
927 long var78 /* : Int */;
928 val* var79 /* : NativeArray[Object] */;
929 val* var80 /* : String */;
930 val* var81 /* : MClass */;
931 val* var82 /* : String */;
932 static val* varonce83;
933 val* var84 /* : String */;
934 char* var85 /* : NativeString */;
935 long var86 /* : Int */;
936 val* var87 /* : String */;
937 short int var88 /* : Bool */;
938 val* var89 /* : Array[MType] */;
939 val* var90 /* : nullable Object */;
940 val* var91 /* : String */;
941 static val* varonce92;
942 val* var93 /* : String */;
943 char* var94 /* : NativeString */;
944 long var95 /* : Int */;
945 val* var96 /* : String */;
946 val* var97 /* : Array[Object] */;
947 long var98 /* : Int */;
948 val* var99 /* : NativeArray[Object] */;
949 val* var100 /* : String */;
950 val* var101 /* : String */;
951 static val* varonce102;
952 val* var103 /* : String */;
953 char* var104 /* : NativeString */;
954 long var105 /* : Int */;
955 val* var106 /* : String */;
956 short int var107 /* : Bool */;
957 val* var108 /* : String */;
958 static val* varonce109;
959 val* var110 /* : String */;
960 char* var111 /* : NativeString */;
961 long var112 /* : Int */;
962 val* var113 /* : String */;
963 val* var114 /* : Array[Object] */;
964 long var115 /* : Int */;
965 val* var116 /* : NativeArray[Object] */;
966 val* var117 /* : String */;
967 val* var118 /* : MModule */;
968 val* var119 /* : Set[MClassDef] */;
969 val* var120 /* : Iterator[nullable Object] */;
970 short int var121 /* : Bool */;
971 val* var122 /* : nullable Object */;
972 val* var_cd /* var cd: MClassDef */;
973 val* var123 /* : Array[MProperty] */;
974 val* var124 /* : Iterator[nullable Object] */;
975 short int var125 /* : Bool */;
976 val* var126 /* : nullable Object */;
977 val* var_p /* var p: MProperty */;
978 short int var127 /* : Bool */;
979 int cltype;
980 int idtype;
981 short int var128 /* : Bool */;
982 val* var129 /* : MPropDef */;
983 val* var130 /* : nullable MType */;
984 val* var_t /* var t: MType */;
985 val* var131 /* : MModule */;
986 val* var132 /* : MType */;
987 val* var133 /* : String */;
988 static val* varonce134;
989 val* var135 /* : String */;
990 char* var136 /* : NativeString */;
991 long var137 /* : Int */;
992 val* var138 /* : String */;
993 val* var139 /* : MPropDef */;
994 val* var140 /* : String */;
995 static val* varonce141;
996 val* var142 /* : String */;
997 char* var143 /* : NativeString */;
998 long var144 /* : Int */;
999 val* var145 /* : String */;
1000 static val* varonce146;
1001 val* var147 /* : String */;
1002 char* var148 /* : NativeString */;
1003 long var149 /* : Int */;
1004 val* var150 /* : String */;
1005 static val* varonce151;
1006 val* var152 /* : String */;
1007 char* var153 /* : NativeString */;
1008 long var154 /* : Int */;
1009 val* var155 /* : String */;
1010 val* var156 /* : Array[Object] */;
1011 long var157 /* : Int */;
1012 val* var158 /* : NativeArray[Object] */;
1013 val* var159 /* : String */;
1014 static val* varonce161;
1015 val* var162 /* : String */;
1016 char* var163 /* : NativeString */;
1017 long var164 /* : Int */;
1018 val* var165 /* : String */;
1019 var_mtype = p0;
1020 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
1021 var_v = var;
1022 var1 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
1023 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var1) /* live_types on <var1:RapidTypeAnalysis>*/;
1024 var3 = ((short int (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__Collection__has]))(var2, var_mtype) /* has on <var2:HashSet[MClassType]>*/;
1025 if (!var3) {
1026 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 157);
1027 exit(1);
1028 }
1029 if (varonce) {
1030 var4 = varonce;
1031 } else {
1032 var5 = "/* runtime class ";
1033 var6 = 17;
1034 var7 = string__NativeString__to_s_with_length(var5, var6);
1035 var4 = var7;
1036 varonce = var4;
1037 }
1038 if (varonce8) {
1039 var9 = varonce8;
1040 } else {
1041 var10 = " */";
1042 var11 = 3;
1043 var12 = string__NativeString__to_s_with_length(var10, var11);
1044 var9 = var12;
1045 varonce8 = var9;
1046 }
1047 var13 = NEW_array__Array(&type_array__Arraykernel__Object);
1048 { /* var13 = array_instance Array[Object] */
1049 var14 = 3;
1050 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraykernel__Object);
1051 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var4;
1052 ((struct instance_array__NativeArray*)var15)->values[1] = (val*) var_mtype;
1053 ((struct instance_array__NativeArray*)var15)->values[2] = (val*) var9;
1054 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[Object]>*/;
1055 CHECK_NEW_array__Array(var13);
1056 }
1057 var16 = ((val* (*)(val*))(var13->class->vft[COLOR_string__Object__to_s]))(var13) /* to_s on <var13:Array[Object]>*/;
1058 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var16) /* add_decl on <var_v:CodeWriter>*/;
1059 var17 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
1060 var18 = ((long (*)(val*))(var17->class->vft[COLOR_abstract_collection__MapRead__length]))(var17) /* length on <var17:HashMap[MClassType, String]>*/;
1061 var_idnum = var18;
1062 if (varonce19) {
1063 var20 = varonce19;
1064 } else {
1065 var21 = "ID_";
1066 var22 = 3;
1067 var23 = string__NativeString__to_s_with_length(var21, var22);
1068 var20 = var23;
1069 varonce19 = var20;
1070 }
1071 var24 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1072 var25 = ((val* (*)(val*, val*))(var20->class->vft[COLOR_string__String___43d]))(var20, var24) /* + on <var20:String>*/;
1073 var_idname = var25;
1074 var26 = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classids]))(self) /* classids on <self:GlobalCompiler>*/;
1075 ((void (*)(val*, val*, val*))(var26->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var26, var_mtype, var_idname) /* []= on <var26:HashMap[MClassType, String]>*/;
1076 if (varonce27) {
1077 var28 = varonce27;
1078 } else {
1079 var29 = "#define ";
1080 var30 = 8;
1081 var31 = string__NativeString__to_s_with_length(var29, var30);
1082 var28 = var31;
1083 varonce27 = var28;
1084 }
1085 if (varonce32) {
1086 var33 = varonce32;
1087 } else {
1088 var34 = " ";
1089 var35 = 1;
1090 var36 = string__NativeString__to_s_with_length(var34, var35);
1091 var33 = var36;
1092 varonce32 = var33;
1093 }
1094 if (varonce37) {
1095 var38 = varonce37;
1096 } else {
1097 var39 = " /* ";
1098 var40 = 4;
1099 var41 = string__NativeString__to_s_with_length(var39, var40);
1100 var38 = var41;
1101 varonce37 = var38;
1102 }
1103 if (varonce42) {
1104 var43 = varonce42;
1105 } else {
1106 var44 = " */";
1107 var45 = 3;
1108 var46 = string__NativeString__to_s_with_length(var44, var45);
1109 var43 = var46;
1110 varonce42 = var43;
1111 }
1112 var47 = NEW_array__Array(&type_array__Arraykernel__Object);
1113 { /* var47 = array_instance Array[Object] */
1114 var48 = 7;
1115 var49 = NEW_array__NativeArray(var48, &type_array__NativeArraykernel__Object);
1116 ((struct instance_array__NativeArray*)var49)->values[0] = (val*) var28;
1117 ((struct instance_array__NativeArray*)var49)->values[1] = (val*) var_idname;
1118 ((struct instance_array__NativeArray*)var49)->values[2] = (val*) var33;
1119 var50 = BOX_kernel__Int(var_idnum); /* autobox from Int to Object */
1120 ((struct instance_array__NativeArray*)var49)->values[3] = (val*) var50;
1121 ((struct instance_array__NativeArray*)var49)->values[4] = (val*) var38;
1122 ((struct instance_array__NativeArray*)var49)->values[5] = (val*) var_mtype;
1123 ((struct instance_array__NativeArray*)var49)->values[6] = (val*) var43;
1124 ((void (*)(val*, val*, long))(var47->class->vft[COLOR_array__Array__with_native]))(var47, var49, var48) /* with_native on <var47:Array[Object]>*/;
1125 CHECK_NEW_array__Array(var47);
1126 }
1127 var51 = ((val* (*)(val*))(var47->class->vft[COLOR_string__Object__to_s]))(var47) /* to_s on <var47:Array[Object]>*/;
1128 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var51) /* add_decl on <var_v:CodeWriter>*/;
1129 if (varonce52) {
1130 var53 = varonce52;
1131 } else {
1132 var54 = "struct ";
1133 var55 = 7;
1134 var56 = string__NativeString__to_s_with_length(var54, var55);
1135 var53 = var56;
1136 varonce52 = var53;
1137 }
1138 var57 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1139 if (varonce58) {
1140 var59 = varonce58;
1141 } else {
1142 var60 = " {";
1143 var61 = 2;
1144 var62 = string__NativeString__to_s_with_length(var60, var61);
1145 var59 = var62;
1146 varonce58 = var59;
1147 }
1148 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
1149 { /* var63 = array_instance Array[Object] */
1150 var64 = 3;
1151 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
1152 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var53;
1153 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var57;
1154 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var59;
1155 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
1156 CHECK_NEW_array__Array(var63);
1157 }
1158 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
1159 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var66) /* add_decl on <var_v:CodeWriter>*/;
1160 if (varonce67) {
1161 var68 = varonce67;
1162 } else {
1163 var69 = "int classid; /* must be ";
1164 var70 = 24;
1165 var71 = string__NativeString__to_s_with_length(var69, var70);
1166 var68 = var71;
1167 varonce67 = var68;
1168 }
1169 if (varonce72) {
1170 var73 = varonce72;
1171 } else {
1172 var74 = " */";
1173 var75 = 3;
1174 var76 = string__NativeString__to_s_with_length(var74, var75);
1175 var73 = var76;
1176 varonce72 = var73;
1177 }
1178 var77 = NEW_array__Array(&type_array__Arraykernel__Object);
1179 { /* var77 = array_instance Array[Object] */
1180 var78 = 3;
1181 var79 = NEW_array__NativeArray(var78, &type_array__NativeArraykernel__Object);
1182 ((struct instance_array__NativeArray*)var79)->values[0] = (val*) var68;
1183 ((struct instance_array__NativeArray*)var79)->values[1] = (val*) var_idname;
1184 ((struct instance_array__NativeArray*)var79)->values[2] = (val*) var73;
1185 ((void (*)(val*, val*, long))(var77->class->vft[COLOR_array__Array__with_native]))(var77, var79, var78) /* with_native on <var77:Array[Object]>*/;
1186 CHECK_NEW_array__Array(var77);
1187 }
1188 var80 = ((val* (*)(val*))(var77->class->vft[COLOR_string__Object__to_s]))(var77) /* to_s on <var77:Array[Object]>*/;
1189 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var80) /* add_decl on <var_v:CodeWriter>*/;
1190 var81 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
1191 var82 = ((val* (*)(val*))(var81->class->vft[COLOR_model__MClass__name]))(var81) /* name on <var81:MClass>*/;
1192 if (varonce83) {
1193 var84 = varonce83;
1194 } else {
1195 var85 = "NativeArray";
1196 var86 = 11;
1197 var87 = string__NativeString__to_s_with_length(var85, var86);
1198 var84 = var87;
1199 varonce83 = var84;
1200 }
1201 var88 = ((short int (*)(val*, val*))(var82->class->vft[COLOR_kernel__Object___61d_61d]))(var82, var84) /* == on <var82:String>*/;
1202 if (var88){
1203 var89 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
1204 var90 = ((val* (*)(val*))(var89->class->vft[COLOR_abstract_collection__Collection__first]))(var89) /* first on <var89:Array[MType]>*/;
1205 var91 = ((val* (*)(val*))(var90->class->vft[COLOR_abstract_compiler__MType__ctype]))(var90) /* ctype on <var90:nullable Object(MType)>*/;
1206 if (varonce92) {
1207 var93 = varonce92;
1208 } else {
1209 var94 = " values[1];";
1210 var95 = 11;
1211 var96 = string__NativeString__to_s_with_length(var94, var95);
1212 var93 = var96;
1213 varonce92 = var93;
1214 }
1215 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
1216 { /* var97 = array_instance Array[Object] */
1217 var98 = 2;
1218 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
1219 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var91;
1220 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var93;
1221 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
1222 CHECK_NEW_array__Array(var97);
1223 }
1224 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
1225 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var100) /* add_decl on <var_v:CodeWriter>*/;
1226 } else {
1227 }
1228 var101 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1229 if (varonce102) {
1230 var103 = varonce102;
1231 } else {
1232 var104 = "val*";
1233 var105 = 4;
1234 var106 = string__NativeString__to_s_with_length(var104, var105);
1235 var103 = var106;
1236 varonce102 = var103;
1237 }
1238 var107 = ((short int (*)(val*, val*))(var101->class->vft[COLOR_kernel__Object___33d_61d]))(var101, var103) /* != on <var101:String>*/;
1239 if (var107){
1240 var108 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1241 if (varonce109) {
1242 var110 = varonce109;
1243 } else {
1244 var111 = " value;";
1245 var112 = 7;
1246 var113 = string__NativeString__to_s_with_length(var111, var112);
1247 var110 = var113;
1248 varonce109 = var110;
1249 }
1250 var114 = NEW_array__Array(&type_array__Arraykernel__Object);
1251 { /* var114 = array_instance Array[Object] */
1252 var115 = 2;
1253 var116 = NEW_array__NativeArray(var115, &type_array__NativeArraykernel__Object);
1254 ((struct instance_array__NativeArray*)var116)->values[0] = (val*) var108;
1255 ((struct instance_array__NativeArray*)var116)->values[1] = (val*) var110;
1256 ((void (*)(val*, val*, long))(var114->class->vft[COLOR_array__Array__with_native]))(var114, var116, var115) /* with_native on <var114:Array[Object]>*/;
1257 CHECK_NEW_array__Array(var114);
1258 }
1259 var117 = ((val* (*)(val*))(var114->class->vft[COLOR_string__Object__to_s]))(var114) /* to_s on <var114:Array[Object]>*/;
1260 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var117) /* add_decl on <var_v:CodeWriter>*/;
1261 } else {
1262 }
1263 var118 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:GlobalCompiler>*/;
1264 var119 = ((val* (*)(val*, val*))(var_mtype->class->vft[COLOR_model__MType__collect_mclassdefs]))(var_mtype, var118) /* collect_mclassdefs on <var_mtype:MClassType>*/;
1265 var120 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_collection__Collection__iterator]))(var119) /* iterator on <var119:Set[MClassDef]>*/;
1266 for(;;) {
1267 var121 = ((short int (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var120) /* is_ok on <var120:Iterator[nullable Object]>*/;
1268 if(!var121) break;
1269 var122 = ((val* (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__item]))(var120) /* item on <var120:Iterator[nullable Object]>*/;
1270 var_cd = var122;
1271 var123 = ((val* (*)(val*))(var_cd->class->vft[COLOR_model__MClassDef__intro_mproperties]))(var_cd) /* intro_mproperties on <var_cd:MClassDef>*/;
1272 var124 = ((val* (*)(val*))(var123->class->vft[COLOR_abstract_collection__Collection__iterator]))(var123) /* iterator on <var123:Array[MProperty]>*/;
1273 for(;;) {
1274 var125 = ((short int (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var124) /* is_ok on <var124:Iterator[nullable Object]>*/;
1275 if(!var125) break;
1276 var126 = ((val* (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__item]))(var124) /* item on <var124:Iterator[nullable Object]>*/;
1277 var_p = var126;
1278 /* <var_p:MProperty> isa MAttribute */
1279 cltype = type_model__MAttribute.color;
1280 idtype = type_model__MAttribute.id;
1281 if(cltype >= var_p->type->table_size) {
1282 var127 = 0;
1283 } else {
1284 var127 = var_p->type->type_table[cltype] == idtype;
1285 }
1286 var128 = !var127;
1287 if (var128){
1288 goto CONTINUE_label;
1289 } else {
1290 }
1291 var129 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MProperty__intro]))(var_p) /* intro on <var_p:MProperty(MAttribute)>*/;
1292 var130 = ((val* (*)(val*))(var129->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var129) /* static_mtype on <var129:MPropDef(MAttributeDef)>*/;
1293 if (var130 == NULL) {
1294 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 184);
1295 exit(1);
1296 }
1297 var_t = var130;
1298 var131 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:GlobalCompiler>*/;
1299 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>*/;
1300 var_t = var132;
1301 var133 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MType>*/;
1302 if (varonce134) {
1303 var135 = varonce134;
1304 } else {
1305 var136 = " ";
1306 var137 = 1;
1307 var138 = string__NativeString__to_s_with_length(var136, var137);
1308 var135 = var138;
1309 varonce134 = var135;
1310 }
1311 var139 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MProperty__intro]))(var_p) /* intro on <var_p:MProperty(MAttribute)>*/;
1312 var140 = ((val* (*)(val*))(var139->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var139) /* c_name on <var139:MPropDef(MAttributeDef)>*/;
1313 if (varonce141) {
1314 var142 = varonce141;
1315 } else {
1316 var143 = "; /* ";
1317 var144 = 5;
1318 var145 = string__NativeString__to_s_with_length(var143, var144);
1319 var142 = var145;
1320 varonce141 = var142;
1321 }
1322 if (varonce146) {
1323 var147 = varonce146;
1324 } else {
1325 var148 = ": ";
1326 var149 = 2;
1327 var150 = string__NativeString__to_s_with_length(var148, var149);
1328 var147 = var150;
1329 varonce146 = var147;
1330 }
1331 if (varonce151) {
1332 var152 = varonce151;
1333 } else {
1334 var153 = " */";
1335 var154 = 3;
1336 var155 = string__NativeString__to_s_with_length(var153, var154);
1337 var152 = var155;
1338 varonce151 = var152;
1339 }
1340 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
1341 { /* var156 = array_instance Array[Object] */
1342 var157 = 8;
1343 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
1344 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var133;
1345 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var135;
1346 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var140;
1347 ((struct instance_array__NativeArray*)var158)->values[3] = (val*) var142;
1348 ((struct instance_array__NativeArray*)var158)->values[4] = (val*) var_p;
1349 ((struct instance_array__NativeArray*)var158)->values[5] = (val*) var147;
1350 ((struct instance_array__NativeArray*)var158)->values[6] = (val*) var_t;
1351 ((struct instance_array__NativeArray*)var158)->values[7] = (val*) var152;
1352 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
1353 CHECK_NEW_array__Array(var156);
1354 }
1355 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
1356 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var159) /* add_decl on <var_v:CodeWriter>*/;
1357 CONTINUE_label: (void)0;
1358 ((void (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__next]))(var124) /* next on <var124:Iterator[nullable Object]>*/;
1359 }
1360 BREAK_label: (void)0;
1361 CONTINUE_label160: (void)0;
1362 ((void (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__next]))(var120) /* next on <var120:Iterator[nullable Object]>*/;
1363 }
1364 BREAK_label160: (void)0;
1365 if (varonce161) {
1366 var162 = varonce161;
1367 } else {
1368 var163 = "};";
1369 var164 = 2;
1370 var165 = string__NativeString__to_s_with_length(var163, var164);
1371 var162 = var165;
1372 varonce161 = var162;
1373 }
1374 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var_v, var162) /* add_decl on <var_v:CodeWriter>*/;
1375 RET_LABEL:;
1376 }
1377 /* method global_compiler#GlobalCompiler#declare_runtimeclass for (self: Object, MClassType) */
1378 void VIRTUAL_global_compiler__GlobalCompiler__declare_runtimeclass(val* self, val* p0) {
1379 global_compiler__GlobalCompiler__declare_runtimeclass(self, p0);
1380 RET_LABEL:;
1381 }
1382 /* method global_compiler#GlobalCompiler#generate_init_instance for (self: GlobalCompiler, MClassType) */
1383 void global_compiler__GlobalCompiler__generate_init_instance(val* self, val* p0) {
1384 val* var_mtype /* var mtype: MClassType */;
1385 val* var /* : RapidTypeAnalysis */;
1386 val* var1 /* : HashSet[MClassType] */;
1387 short int var2 /* : Bool */;
1388 val* var3 /* : String */;
1389 static val* varonce;
1390 val* var4 /* : String */;
1391 char* var5 /* : NativeString */;
1392 long var6 /* : Int */;
1393 val* var7 /* : String */;
1394 short int var8 /* : Bool */;
1395 val* var9 /* : AbstractCompilerVisitor */;
1396 val* var_v /* var v: GlobalCompilerVisitor */;
1397 val* var10 /* : MClass */;
1398 val* var11 /* : String */;
1399 static val* varonce12;
1400 val* var13 /* : String */;
1401 char* var14 /* : NativeString */;
1402 long var15 /* : Int */;
1403 val* var16 /* : String */;
1404 short int var17 /* : Bool */;
1405 short int var_is_native_array /* var is_native_array: Bool */;
1406 static val* varonce18;
1407 val* var19 /* : String */;
1408 char* var20 /* : NativeString */;
1409 long var21 /* : Int */;
1410 val* var22 /* : String */;
1411 val* var_sig /* var sig: nullable Object */;
1412 static val* varonce23;
1413 val* var24 /* : String */;
1414 char* var25 /* : NativeString */;
1415 long var26 /* : Int */;
1416 val* var27 /* : String */;
1417 val* var28 /* : CodeWriter */;
1418 val* var29 /* : String */;
1419 static val* varonce30;
1420 val* var31 /* : String */;
1421 char* var32 /* : NativeString */;
1422 long var33 /* : Int */;
1423 val* var34 /* : String */;
1424 val* var35 /* : String */;
1425 static val* varonce36;
1426 val* var37 /* : String */;
1427 char* var38 /* : NativeString */;
1428 long var39 /* : Int */;
1429 val* var40 /* : String */;
1430 static val* varonce41;
1431 val* var42 /* : String */;
1432 char* var43 /* : NativeString */;
1433 long var44 /* : Int */;
1434 val* var45 /* : String */;
1435 val* var46 /* : Array[Object] */;
1436 long var47 /* : Int */;
1437 val* var48 /* : NativeArray[Object] */;
1438 val* var49 /* : String */;
1439 static val* varonce50;
1440 val* var51 /* : String */;
1441 char* var52 /* : NativeString */;
1442 long var53 /* : Int */;
1443 val* var54 /* : String */;
1444 static val* varonce55;
1445 val* var56 /* : String */;
1446 char* var57 /* : NativeString */;
1447 long var58 /* : Int */;
1448 val* var59 /* : String */;
1449 val* var60 /* : Array[Object] */;
1450 long var61 /* : Int */;
1451 val* var62 /* : NativeArray[Object] */;
1452 val* var63 /* : String */;
1453 val* var64 /* : String */;
1454 static val* varonce65;
1455 val* var66 /* : String */;
1456 char* var67 /* : NativeString */;
1457 long var68 /* : Int */;
1458 val* var69 /* : String */;
1459 val* var70 /* : String */;
1460 static val* varonce71;
1461 val* var72 /* : String */;
1462 char* var73 /* : NativeString */;
1463 long var74 /* : Int */;
1464 val* var75 /* : String */;
1465 static val* varonce76;
1466 val* var77 /* : String */;
1467 char* var78 /* : NativeString */;
1468 long var79 /* : Int */;
1469 val* var80 /* : String */;
1470 val* var81 /* : Array[Object] */;
1471 long var82 /* : Int */;
1472 val* var83 /* : NativeArray[Object] */;
1473 val* var84 /* : String */;
1474 val* var85 /* : RuntimeVariable */;
1475 val* var_res /* var res: RuntimeVariable */;
1476 short int var86 /* : Bool */;
1477 val* var87 /* : Array[MType] */;
1478 val* var88 /* : nullable Object */;
1479 val* var_mtype_elt /* var mtype_elt: MType */;
1480 static val* varonce89;
1481 val* var90 /* : String */;
1482 char* var91 /* : NativeString */;
1483 long var92 /* : Int */;
1484 val* var93 /* : String */;
1485 val* var94 /* : String */;
1486 static val* varonce95;
1487 val* var96 /* : String */;
1488 char* var97 /* : NativeString */;
1489 long var98 /* : Int */;
1490 val* var99 /* : String */;
1491 val* var100 /* : String */;
1492 static val* varonce101;
1493 val* var102 /* : String */;
1494 char* var103 /* : NativeString */;
1495 long var104 /* : Int */;
1496 val* var105 /* : String */;
1497 val* var106 /* : Array[Object] */;
1498 long var107 /* : Int */;
1499 val* var108 /* : NativeArray[Object] */;
1500 val* var109 /* : String */;
1501 static val* varonce110;
1502 val* var111 /* : String */;
1503 char* var112 /* : NativeString */;
1504 long var113 /* : Int */;
1505 val* var114 /* : String */;
1506 val* var115 /* : String */;
1507 static val* varonce116;
1508 val* var117 /* : String */;
1509 char* var118 /* : NativeString */;
1510 long var119 /* : Int */;
1511 val* var120 /* : String */;
1512 val* var121 /* : Array[Object] */;
1513 long var122 /* : Int */;
1514 val* var123 /* : NativeArray[Object] */;
1515 val* var124 /* : String */;
1516 static val* varonce125;
1517 val* var126 /* : String */;
1518 char* var127 /* : NativeString */;
1519 long var128 /* : Int */;
1520 val* var129 /* : String */;
1521 val* var130 /* : String */;
1522 static val* varonce131;
1523 val* var132 /* : String */;
1524 char* var133 /* : NativeString */;
1525 long var134 /* : Int */;
1526 val* var135 /* : String */;
1527 val* var136 /* : Array[Object] */;
1528 long var137 /* : Int */;
1529 val* var138 /* : NativeArray[Object] */;
1530 val* var139 /* : String */;
1531 static val* varonce140;
1532 val* var141 /* : String */;
1533 char* var142 /* : NativeString */;
1534 long var143 /* : Int */;
1535 val* var144 /* : String */;
1536 static val* varonce145;
1537 val* var146 /* : String */;
1538 char* var147 /* : NativeString */;
1539 long var148 /* : Int */;
1540 val* var149 /* : String */;
1541 val* var150 /* : Array[Object] */;
1542 long var151 /* : Int */;
1543 val* var152 /* : NativeArray[Object] */;
1544 val* var153 /* : String */;
1545 static val* varonce154;
1546 val* var155 /* : String */;
1547 char* var156 /* : NativeString */;
1548 long var157 /* : Int */;
1549 val* var158 /* : String */;
1550 var_mtype = p0;
1551 var = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
1552 var1 = ((val* (*)(val*))(var->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var) /* live_types on <var:RapidTypeAnalysis>*/;
1553 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__Collection__has]))(var1, var_mtype) /* has on <var1:HashSet[MClassType]>*/;
1554 if (!var2) {
1555 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 195);
1556 exit(1);
1557 }
1558 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1559 if (varonce) {
1560 var4 = varonce;
1561 } else {
1562 var5 = "val*";
1563 var6 = 4;
1564 var7 = string__NativeString__to_s_with_length(var5, var6);
1565 var4 = var7;
1566 varonce = var4;
1567 }
1568 var8 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_kernel__Object___61d_61d]))(var3, var4) /* == on <var3:String>*/;
1569 if (!var8) {
1570 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 196);
1571 exit(1);
1572 }
1573 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
1574 var_v = var9;
1575 var10 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
1576 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_model__MClass__name]))(var10) /* name on <var10:MClass>*/;
1577 if (varonce12) {
1578 var13 = varonce12;
1579 } else {
1580 var14 = "NativeArray";
1581 var15 = 11;
1582 var16 = string__NativeString__to_s_with_length(var14, var15);
1583 var13 = var16;
1584 varonce12 = var13;
1585 }
1586 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
1587 var_is_native_array = var17;
1588 if (var_is_native_array){
1589 if (varonce18) {
1590 var19 = varonce18;
1591 } else {
1592 var20 = "int length";
1593 var21 = 10;
1594 var22 = string__NativeString__to_s_with_length(var20, var21);
1595 var19 = var22;
1596 varonce18 = var19;
1597 }
1598 var_sig = var19;
1599 } else {
1600 if (varonce23) {
1601 var24 = varonce23;
1602 } else {
1603 var25 = "void";
1604 var26 = 4;
1605 var27 = string__NativeString__to_s_with_length(var25, var26);
1606 var24 = var27;
1607 varonce23 = var24;
1608 }
1609 var_sig = var24;
1610 }
1611 var28 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
1612 var29 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1613 if (varonce30) {
1614 var31 = varonce30;
1615 } else {
1616 var32 = " NEW_";
1617 var33 = 5;
1618 var34 = string__NativeString__to_s_with_length(var32, var33);
1619 var31 = var34;
1620 varonce30 = var31;
1621 }
1622 var35 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1623 if (varonce36) {
1624 var37 = varonce36;
1625 } else {
1626 var38 = "(";
1627 var39 = 1;
1628 var40 = string__NativeString__to_s_with_length(var38, var39);
1629 var37 = var40;
1630 varonce36 = var37;
1631 }
1632 if (varonce41) {
1633 var42 = varonce41;
1634 } else {
1635 var43 = ");";
1636 var44 = 2;
1637 var45 = string__NativeString__to_s_with_length(var43, var44);
1638 var42 = var45;
1639 varonce41 = var42;
1640 }
1641 var46 = NEW_array__Array(&type_array__Arraykernel__Object);
1642 { /* var46 = array_instance Array[Object] */
1643 var47 = 6;
1644 var48 = NEW_array__NativeArray(var47, &type_array__NativeArraykernel__Object);
1645 ((struct instance_array__NativeArray*)var48)->values[0] = (val*) var29;
1646 ((struct instance_array__NativeArray*)var48)->values[1] = (val*) var31;
1647 ((struct instance_array__NativeArray*)var48)->values[2] = (val*) var35;
1648 ((struct instance_array__NativeArray*)var48)->values[3] = (val*) var37;
1649 ((struct instance_array__NativeArray*)var48)->values[4] = (val*) var_sig;
1650 ((struct instance_array__NativeArray*)var48)->values[5] = (val*) var42;
1651 ((void (*)(val*, val*, long))(var46->class->vft[COLOR_array__Array__with_native]))(var46, var48, var47) /* with_native on <var46:Array[Object]>*/;
1652 CHECK_NEW_array__Array(var46);
1653 }
1654 var49 = ((val* (*)(val*))(var46->class->vft[COLOR_string__Object__to_s]))(var46) /* to_s on <var46:Array[Object]>*/;
1655 ((void (*)(val*, val*))(var28->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var28, var49) /* add_decl on <var28:CodeWriter>*/;
1656 if (varonce50) {
1657 var51 = varonce50;
1658 } else {
1659 var52 = "/* allocate ";
1660 var53 = 12;
1661 var54 = string__NativeString__to_s_with_length(var52, var53);
1662 var51 = var54;
1663 varonce50 = var51;
1664 }
1665 if (varonce55) {
1666 var56 = varonce55;
1667 } else {
1668 var57 = " */";
1669 var58 = 3;
1670 var59 = string__NativeString__to_s_with_length(var57, var58);
1671 var56 = var59;
1672 varonce55 = var56;
1673 }
1674 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
1675 { /* var60 = array_instance Array[Object] */
1676 var61 = 3;
1677 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
1678 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var51;
1679 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_mtype;
1680 ((struct instance_array__NativeArray*)var62)->values[2] = (val*) var56;
1681 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
1682 CHECK_NEW_array__Array(var60);
1683 }
1684 var63 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
1685 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var63) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
1686 var64 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
1687 if (varonce65) {
1688 var66 = varonce65;
1689 } else {
1690 var67 = " NEW_";
1691 var68 = 5;
1692 var69 = string__NativeString__to_s_with_length(var67, var68);
1693 var66 = var69;
1694 varonce65 = var66;
1695 }
1696 var70 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1697 if (varonce71) {
1698 var72 = varonce71;
1699 } else {
1700 var73 = "(";
1701 var74 = 1;
1702 var75 = string__NativeString__to_s_with_length(var73, var74);
1703 var72 = var75;
1704 varonce71 = var72;
1705 }
1706 if (varonce76) {
1707 var77 = varonce76;
1708 } else {
1709 var78 = ") {";
1710 var79 = 3;
1711 var80 = string__NativeString__to_s_with_length(var78, var79);
1712 var77 = var80;
1713 varonce76 = var77;
1714 }
1715 var81 = NEW_array__Array(&type_array__Arraykernel__Object);
1716 { /* var81 = array_instance Array[Object] */
1717 var82 = 6;
1718 var83 = NEW_array__NativeArray(var82, &type_array__NativeArraykernel__Object);
1719 ((struct instance_array__NativeArray*)var83)->values[0] = (val*) var64;
1720 ((struct instance_array__NativeArray*)var83)->values[1] = (val*) var66;
1721 ((struct instance_array__NativeArray*)var83)->values[2] = (val*) var70;
1722 ((struct instance_array__NativeArray*)var83)->values[3] = (val*) var72;
1723 ((struct instance_array__NativeArray*)var83)->values[4] = (val*) var_sig;
1724 ((struct instance_array__NativeArray*)var83)->values[5] = (val*) var77;
1725 ((void (*)(val*, val*, long))(var81->class->vft[COLOR_array__Array__with_native]))(var81, var83, var82) /* with_native on <var81:Array[Object]>*/;
1726 CHECK_NEW_array__Array(var81);
1727 }
1728 var84 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__to_s]))(var81) /* to_s on <var81:Array[Object]>*/;
1729 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var84) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
1730 var85 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(var_v, var_mtype) /* new_var on <var_v:GlobalCompilerVisitor>*/;
1731 var_res = var85;
1732 var86 = 1;
1733 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var86) /* is_exact= on <var_res:RuntimeVariable>*/;
1734 if (var_is_native_array){
1735 var87 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
1736 var88 = ((val* (*)(val*))(var87->class->vft[COLOR_abstract_collection__Collection__first]))(var87) /* first on <var87:Array[MType]>*/;
1737 var_mtype_elt = var88;
1738 if (varonce89) {
1739 var90 = varonce89;
1740 } else {
1741 var91 = " = nit_alloc(sizeof(struct ";
1742 var92 = 27;
1743 var93 = string__NativeString__to_s_with_length(var91, var92);
1744 var90 = var93;
1745 varonce89 = var90;
1746 }
1747 var94 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1748 if (varonce95) {
1749 var96 = varonce95;
1750 } else {
1751 var97 = ") + length*sizeof(";
1752 var98 = 18;
1753 var99 = string__NativeString__to_s_with_length(var97, var98);
1754 var96 = var99;
1755 varonce95 = var96;
1756 }
1757 var100 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
1758 if (varonce101) {
1759 var102 = varonce101;
1760 } else {
1761 var103 = "));";
1762 var104 = 3;
1763 var105 = string__NativeString__to_s_with_length(var103, var104);
1764 var102 = var105;
1765 varonce101 = var102;
1766 }
1767 var106 = NEW_array__Array(&type_array__Arraykernel__Object);
1768 { /* var106 = array_instance Array[Object] */
1769 var107 = 6;
1770 var108 = NEW_array__NativeArray(var107, &type_array__NativeArraykernel__Object);
1771 ((struct instance_array__NativeArray*)var108)->values[0] = (val*) var_res;
1772 ((struct instance_array__NativeArray*)var108)->values[1] = (val*) var90;
1773 ((struct instance_array__NativeArray*)var108)->values[2] = (val*) var94;
1774 ((struct instance_array__NativeArray*)var108)->values[3] = (val*) var96;
1775 ((struct instance_array__NativeArray*)var108)->values[4] = (val*) var100;
1776 ((struct instance_array__NativeArray*)var108)->values[5] = (val*) var102;
1777 ((void (*)(val*, val*, long))(var106->class->vft[COLOR_array__Array__with_native]))(var106, var108, var107) /* with_native on <var106:Array[Object]>*/;
1778 CHECK_NEW_array__Array(var106);
1779 }
1780 var109 = ((val* (*)(val*))(var106->class->vft[COLOR_string__Object__to_s]))(var106) /* to_s on <var106:Array[Object]>*/;
1781 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var109) /* add on <var_v:GlobalCompilerVisitor>*/;
1782 } else {
1783 if (varonce110) {
1784 var111 = varonce110;
1785 } else {
1786 var112 = " = nit_alloc(sizeof(struct ";
1787 var113 = 27;
1788 var114 = string__NativeString__to_s_with_length(var112, var113);
1789 var111 = var114;
1790 varonce110 = var111;
1791 }
1792 var115 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
1793 if (varonce116) {
1794 var117 = varonce116;
1795 } else {
1796 var118 = "));";
1797 var119 = 3;
1798 var120 = string__NativeString__to_s_with_length(var118, var119);
1799 var117 = var120;
1800 varonce116 = var117;
1801 }
1802 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
1803 { /* var121 = array_instance Array[Object] */
1804 var122 = 4;
1805 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
1806 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var_res;
1807 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var111;
1808 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var115;
1809 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var117;
1810 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
1811 CHECK_NEW_array__Array(var121);
1812 }
1813 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
1814 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var124) /* add on <var_v:GlobalCompilerVisitor>*/;
1815 }
1816 if (varonce125) {
1817 var126 = varonce125;
1818 } else {
1819 var127 = "->classid = ";
1820 var128 = 12;
1821 var129 = string__NativeString__to_s_with_length(var127, var128);
1822 var126 = var129;
1823 varonce125 = var126;
1824 }
1825 var130 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(self, var_mtype) /* classid on <self:GlobalCompiler>*/;
1826 if (varonce131) {
1827 var132 = varonce131;
1828 } else {
1829 var133 = ";";
1830 var134 = 1;
1831 var135 = string__NativeString__to_s_with_length(var133, var134);
1832 var132 = var135;
1833 varonce131 = var132;
1834 }
1835 var136 = NEW_array__Array(&type_array__Arraykernel__Object);
1836 { /* var136 = array_instance Array[Object] */
1837 var137 = 4;
1838 var138 = NEW_array__NativeArray(var137, &type_array__NativeArraykernel__Object);
1839 ((struct instance_array__NativeArray*)var138)->values[0] = (val*) var_res;
1840 ((struct instance_array__NativeArray*)var138)->values[1] = (val*) var126;
1841 ((struct instance_array__NativeArray*)var138)->values[2] = (val*) var130;
1842 ((struct instance_array__NativeArray*)var138)->values[3] = (val*) var132;
1843 ((void (*)(val*, val*, long))(var136->class->vft[COLOR_array__Array__with_native]))(var136, var138, var137) /* with_native on <var136:Array[Object]>*/;
1844 CHECK_NEW_array__Array(var136);
1845 }
1846 var139 = ((val* (*)(val*))(var136->class->vft[COLOR_string__Object__to_s]))(var136) /* to_s on <var136:Array[Object]>*/;
1847 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var139) /* add on <var_v:GlobalCompilerVisitor>*/;
1848 ((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>*/;
1849 if (varonce140) {
1850 var141 = varonce140;
1851 } else {
1852 var142 = "return ";
1853 var143 = 7;
1854 var144 = string__NativeString__to_s_with_length(var142, var143);
1855 var141 = var144;
1856 varonce140 = var141;
1857 }
1858 if (varonce145) {
1859 var146 = varonce145;
1860 } else {
1861 var147 = ";";
1862 var148 = 1;
1863 var149 = string__NativeString__to_s_with_length(var147, var148);
1864 var146 = var149;
1865 varonce145 = var146;
1866 }
1867 var150 = NEW_array__Array(&type_array__Arraykernel__Object);
1868 { /* var150 = array_instance Array[Object] */
1869 var151 = 3;
1870 var152 = NEW_array__NativeArray(var151, &type_array__NativeArraykernel__Object);
1871 ((struct instance_array__NativeArray*)var152)->values[0] = (val*) var141;
1872 ((struct instance_array__NativeArray*)var152)->values[1] = (val*) var_res;
1873 ((struct instance_array__NativeArray*)var152)->values[2] = (val*) var146;
1874 ((void (*)(val*, val*, long))(var150->class->vft[COLOR_array__Array__with_native]))(var150, var152, var151) /* with_native on <var150:Array[Object]>*/;
1875 CHECK_NEW_array__Array(var150);
1876 }
1877 var153 = ((val* (*)(val*))(var150->class->vft[COLOR_string__Object__to_s]))(var150) /* to_s on <var150:Array[Object]>*/;
1878 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var153) /* add on <var_v:GlobalCompilerVisitor>*/;
1879 if (varonce154) {
1880 var155 = varonce154;
1881 } else {
1882 var156 = "}";
1883 var157 = 1;
1884 var158 = string__NativeString__to_s_with_length(var156, var157);
1885 var155 = var158;
1886 varonce154 = var155;
1887 }
1888 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var155) /* add on <var_v:GlobalCompilerVisitor>*/;
1889 RET_LABEL:;
1890 }
1891 /* method global_compiler#GlobalCompiler#generate_init_instance for (self: Object, MClassType) */
1892 void VIRTUAL_global_compiler__GlobalCompiler__generate_init_instance(val* self, val* p0) {
1893 global_compiler__GlobalCompiler__generate_init_instance(self, p0);
1894 RET_LABEL:;
1895 }
1896 /* method global_compiler#GlobalCompiler#generate_check_init_instance for (self: GlobalCompiler, MClassType) */
1897 void global_compiler__GlobalCompiler__generate_check_init_instance(val* self, val* p0) {
1898 val* var_mtype /* var mtype: MClassType */;
1899 val* var /* : ModelBuilder */;
1900 val* var1 /* : ToolContext */;
1901 val* var2 /* : OptionBool */;
1902 val* var3 /* : nullable Object */;
1903 short int var4 /* : Bool */;
1904 val* var5 /* : AbstractCompilerVisitor */;
1905 val* var_v /* var v: GlobalCompilerVisitor */;
1906 val* var6 /* : RuntimeVariable */;
1907 static val* varonce;
1908 val* var7 /* : String */;
1909 char* var8 /* : NativeString */;
1910 long var9 /* : Int */;
1911 val* var10 /* : String */;
1912 val* var_res /* var res: RuntimeVariable */;
1913 val* var11 /* : CodeWriter */;
1914 static val* varonce12;
1915 val* var13 /* : String */;
1916 char* var14 /* : NativeString */;
1917 long var15 /* : Int */;
1918 val* var16 /* : String */;
1919 val* var17 /* : String */;
1920 static val* varonce18;
1921 val* var19 /* : String */;
1922 char* var20 /* : NativeString */;
1923 long var21 /* : Int */;
1924 val* var22 /* : String */;
1925 val* var23 /* : String */;
1926 static val* varonce24;
1927 val* var25 /* : String */;
1928 char* var26 /* : NativeString */;
1929 long var27 /* : Int */;
1930 val* var28 /* : String */;
1931 val* var29 /* : Array[Object] */;
1932 long var30 /* : Int */;
1933 val* var31 /* : NativeArray[Object] */;
1934 val* var32 /* : String */;
1935 static val* varonce33;
1936 val* var34 /* : String */;
1937 char* var35 /* : NativeString */;
1938 long var36 /* : Int */;
1939 val* var37 /* : String */;
1940 static val* varonce38;
1941 val* var39 /* : String */;
1942 char* var40 /* : NativeString */;
1943 long var41 /* : Int */;
1944 val* var42 /* : String */;
1945 val* var43 /* : Array[Object] */;
1946 long var44 /* : Int */;
1947 val* var45 /* : NativeArray[Object] */;
1948 val* var46 /* : String */;
1949 static val* varonce47;
1950 val* var48 /* : String */;
1951 char* var49 /* : NativeString */;
1952 long var50 /* : Int */;
1953 val* var51 /* : String */;
1954 val* var52 /* : String */;
1955 static val* varonce53;
1956 val* var54 /* : String */;
1957 char* var55 /* : NativeString */;
1958 long var56 /* : Int */;
1959 val* var57 /* : String */;
1960 val* var58 /* : String */;
1961 static val* varonce59;
1962 val* var60 /* : String */;
1963 char* var61 /* : NativeString */;
1964 long var62 /* : Int */;
1965 val* var63 /* : String */;
1966 static val* varonce64;
1967 val* var65 /* : String */;
1968 char* var66 /* : NativeString */;
1969 long var67 /* : Int */;
1970 val* var68 /* : String */;
1971 val* var69 /* : Array[Object] */;
1972 long var70 /* : Int */;
1973 val* var71 /* : NativeArray[Object] */;
1974 val* var72 /* : String */;
1975 static val* varonce73;
1976 val* var74 /* : String */;
1977 char* var75 /* : NativeString */;
1978 long var76 /* : Int */;
1979 val* var77 /* : String */;
1980 var_mtype = p0;
1981 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:GlobalCompiler>*/;
1982 var1 = ((val* (*)(val*))(var->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var) /* toolcontext on <var:ModelBuilder>*/;
1983 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_initialization]))(var1) /* opt_no_check_initialization on <var1:ToolContext>*/;
1984 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_opts__Option__value]))(var2) /* value on <var2:OptionBool>*/;
1985 var4 = ((struct instance_kernel__Bool*)var3)->value; /* autounbox from nullable Object to Bool */;
1986 if (var4){
1987 goto RET_LABEL;
1988 } else {
1989 }
1990 var5 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
1991 var_v = var5;
1992 var6 = NEW_abstract_compiler__RuntimeVariable(&type_abstract_compiler__RuntimeVariable);
1993 if (varonce) {
1994 var7 = varonce;
1995 } else {
1996 var8 = "self";
1997 var9 = 4;
1998 var10 = string__NativeString__to_s_with_length(var8, var9);
1999 var7 = var10;
2000 varonce = var7;
2001 }
2002 ((void (*)(val*, val*, val*, val*))(var6->class->vft[COLOR_abstract_compiler__RuntimeVariable__init]))(var6, var7, var_mtype, var_mtype) /* init on <var6:RuntimeVariable>*/;
2003 CHECK_NEW_abstract_compiler__RuntimeVariable(var6);
2004 var_res = var6;
2005 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
2006 if (varonce12) {
2007 var13 = varonce12;
2008 } else {
2009 var14 = "void CHECK_NEW_";
2010 var15 = 15;
2011 var16 = string__NativeString__to_s_with_length(var14, var15);
2012 var13 = var16;
2013 varonce12 = var13;
2014 }
2015 var17 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2016 if (varonce18) {
2017 var19 = varonce18;
2018 } else {
2019 var20 = "(";
2020 var21 = 1;
2021 var22 = string__NativeString__to_s_with_length(var20, var21);
2022 var19 = var22;
2023 varonce18 = var19;
2024 }
2025 var23 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2026 if (varonce24) {
2027 var25 = varonce24;
2028 } else {
2029 var26 = ");";
2030 var27 = 2;
2031 var28 = string__NativeString__to_s_with_length(var26, var27);
2032 var25 = var28;
2033 varonce24 = var25;
2034 }
2035 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
2036 { /* var29 = array_instance Array[Object] */
2037 var30 = 5;
2038 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
2039 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var13;
2040 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var17;
2041 ((struct instance_array__NativeArray*)var31)->values[2] = (val*) var19;
2042 ((struct instance_array__NativeArray*)var31)->values[3] = (val*) var23;
2043 ((struct instance_array__NativeArray*)var31)->values[4] = (val*) var25;
2044 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
2045 CHECK_NEW_array__Array(var29);
2046 }
2047 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
2048 ((void (*)(val*, val*))(var11->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var11, var32) /* add_decl on <var11:CodeWriter>*/;
2049 if (varonce33) {
2050 var34 = varonce33;
2051 } else {
2052 var35 = "/* allocate ";
2053 var36 = 12;
2054 var37 = string__NativeString__to_s_with_length(var35, var36);
2055 var34 = var37;
2056 varonce33 = var34;
2057 }
2058 if (varonce38) {
2059 var39 = varonce38;
2060 } else {
2061 var40 = " */";
2062 var41 = 3;
2063 var42 = string__NativeString__to_s_with_length(var40, var41);
2064 var39 = var42;
2065 varonce38 = var39;
2066 }
2067 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
2068 { /* var43 = array_instance Array[Object] */
2069 var44 = 3;
2070 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
2071 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var34;
2072 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var_mtype;
2073 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var39;
2074 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
2075 CHECK_NEW_array__Array(var43);
2076 }
2077 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
2078 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var46) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2079 if (varonce47) {
2080 var48 = varonce47;
2081 } else {
2082 var49 = "void CHECK_NEW_";
2083 var50 = 15;
2084 var51 = string__NativeString__to_s_with_length(var49, var50);
2085 var48 = var51;
2086 varonce47 = var48;
2087 }
2088 var52 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2089 if (varonce53) {
2090 var54 = varonce53;
2091 } else {
2092 var55 = "(";
2093 var56 = 1;
2094 var57 = string__NativeString__to_s_with_length(var55, var56);
2095 var54 = var57;
2096 varonce53 = var54;
2097 }
2098 var58 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2099 if (varonce59) {
2100 var60 = varonce59;
2101 } else {
2102 var61 = " ";
2103 var62 = 1;
2104 var63 = string__NativeString__to_s_with_length(var61, var62);
2105 var60 = var63;
2106 varonce59 = var60;
2107 }
2108 if (varonce64) {
2109 var65 = varonce64;
2110 } else {
2111 var66 = ") {";
2112 var67 = 3;
2113 var68 = string__NativeString__to_s_with_length(var66, var67);
2114 var65 = var68;
2115 varonce64 = var65;
2116 }
2117 var69 = NEW_array__Array(&type_array__Arraykernel__Object);
2118 { /* var69 = array_instance Array[Object] */
2119 var70 = 7;
2120 var71 = NEW_array__NativeArray(var70, &type_array__NativeArraykernel__Object);
2121 ((struct instance_array__NativeArray*)var71)->values[0] = (val*) var48;
2122 ((struct instance_array__NativeArray*)var71)->values[1] = (val*) var52;
2123 ((struct instance_array__NativeArray*)var71)->values[2] = (val*) var54;
2124 ((struct instance_array__NativeArray*)var71)->values[3] = (val*) var58;
2125 ((struct instance_array__NativeArray*)var71)->values[4] = (val*) var60;
2126 ((struct instance_array__NativeArray*)var71)->values[5] = (val*) var_res;
2127 ((struct instance_array__NativeArray*)var71)->values[6] = (val*) var65;
2128 ((void (*)(val*, val*, long))(var69->class->vft[COLOR_array__Array__with_native]))(var69, var71, var70) /* with_native on <var69:Array[Object]>*/;
2129 CHECK_NEW_array__Array(var69);
2130 }
2131 var72 = ((val* (*)(val*))(var69->class->vft[COLOR_string__Object__to_s]))(var69) /* to_s on <var69:Array[Object]>*/;
2132 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var72) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2133 ((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>*/;
2134 if (varonce73) {
2135 var74 = varonce73;
2136 } else {
2137 var75 = "}";
2138 var76 = 1;
2139 var77 = string__NativeString__to_s_with_length(var75, var76);
2140 var74 = var77;
2141 varonce73 = var74;
2142 }
2143 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var74) /* add on <var_v:GlobalCompilerVisitor>*/;
2144 RET_LABEL:;
2145 }
2146 /* method global_compiler#GlobalCompiler#generate_check_init_instance for (self: Object, MClassType) */
2147 void VIRTUAL_global_compiler__GlobalCompiler__generate_check_init_instance(val* self, val* p0) {
2148 global_compiler__GlobalCompiler__generate_check_init_instance(self, p0);
2149 RET_LABEL:;
2150 }
2151 /* method global_compiler#GlobalCompiler#generate_box_instance for (self: GlobalCompiler, MClassType) */
2152 void global_compiler__GlobalCompiler__generate_box_instance(val* self, val* p0) {
2153 val* var_mtype /* var mtype: MClassType */;
2154 val* var /* : RapidTypeAnalysis */;
2155 val* var1 /* : HashSet[MClassType] */;
2156 short int var2 /* : Bool */;
2157 val* var3 /* : String */;
2158 static val* varonce;
2159 val* var4 /* : String */;
2160 char* var5 /* : NativeString */;
2161 long var6 /* : Int */;
2162 val* var7 /* : String */;
2163 short int var8 /* : Bool */;
2164 val* var9 /* : AbstractCompilerVisitor */;
2165 val* var_v /* var v: GlobalCompilerVisitor */;
2166 val* var10 /* : CodeWriter */;
2167 static val* varonce11;
2168 val* var12 /* : String */;
2169 char* var13 /* : NativeString */;
2170 long var14 /* : Int */;
2171 val* var15 /* : String */;
2172 val* var16 /* : String */;
2173 static val* varonce17;
2174 val* var18 /* : String */;
2175 char* var19 /* : NativeString */;
2176 long var20 /* : Int */;
2177 val* var21 /* : String */;
2178 val* var22 /* : String */;
2179 static val* varonce23;
2180 val* var24 /* : String */;
2181 char* var25 /* : NativeString */;
2182 long var26 /* : Int */;
2183 val* var27 /* : String */;
2184 val* var28 /* : Array[Object] */;
2185 long var29 /* : Int */;
2186 val* var30 /* : NativeArray[Object] */;
2187 val* var31 /* : String */;
2188 static val* varonce32;
2189 val* var33 /* : String */;
2190 char* var34 /* : NativeString */;
2191 long var35 /* : Int */;
2192 val* var36 /* : String */;
2193 static val* varonce37;
2194 val* var38 /* : String */;
2195 char* var39 /* : NativeString */;
2196 long var40 /* : Int */;
2197 val* var41 /* : String */;
2198 val* var42 /* : Array[Object] */;
2199 long var43 /* : Int */;
2200 val* var44 /* : NativeArray[Object] */;
2201 val* var45 /* : String */;
2202 static val* varonce46;
2203 val* var47 /* : String */;
2204 char* var48 /* : NativeString */;
2205 long var49 /* : Int */;
2206 val* var50 /* : String */;
2207 val* var51 /* : String */;
2208 static val* varonce52;
2209 val* var53 /* : String */;
2210 char* var54 /* : NativeString */;
2211 long var55 /* : Int */;
2212 val* var56 /* : String */;
2213 val* var57 /* : String */;
2214 static val* varonce58;
2215 val* var59 /* : String */;
2216 char* var60 /* : NativeString */;
2217 long var61 /* : Int */;
2218 val* var62 /* : String */;
2219 val* var63 /* : Array[Object] */;
2220 long var64 /* : Int */;
2221 val* var65 /* : NativeArray[Object] */;
2222 val* var66 /* : String */;
2223 static val* varonce67;
2224 val* var68 /* : String */;
2225 char* var69 /* : NativeString */;
2226 long var70 /* : Int */;
2227 val* var71 /* : String */;
2228 val* var72 /* : String */;
2229 static val* varonce73;
2230 val* var74 /* : String */;
2231 char* var75 /* : NativeString */;
2232 long var76 /* : Int */;
2233 val* var77 /* : String */;
2234 val* var78 /* : String */;
2235 static val* varonce79;
2236 val* var80 /* : String */;
2237 char* var81 /* : NativeString */;
2238 long var82 /* : Int */;
2239 val* var83 /* : String */;
2240 val* var84 /* : Array[Object] */;
2241 long var85 /* : Int */;
2242 val* var86 /* : NativeArray[Object] */;
2243 val* var87 /* : String */;
2244 static val* varonce88;
2245 val* var89 /* : String */;
2246 char* var90 /* : NativeString */;
2247 long var91 /* : Int */;
2248 val* var92 /* : String */;
2249 val* var93 /* : String */;
2250 static val* varonce94;
2251 val* var95 /* : String */;
2252 char* var96 /* : NativeString */;
2253 long var97 /* : Int */;
2254 val* var98 /* : String */;
2255 val* var99 /* : Array[Object] */;
2256 long var100 /* : Int */;
2257 val* var101 /* : NativeArray[Object] */;
2258 val* var102 /* : String */;
2259 static val* varonce103;
2260 val* var104 /* : String */;
2261 char* var105 /* : NativeString */;
2262 long var106 /* : Int */;
2263 val* var107 /* : String */;
2264 static val* varonce108;
2265 val* var109 /* : String */;
2266 char* var110 /* : NativeString */;
2267 long var111 /* : Int */;
2268 val* var112 /* : String */;
2269 static val* varonce113;
2270 val* var114 /* : String */;
2271 char* var115 /* : NativeString */;
2272 long var116 /* : Int */;
2273 val* var117 /* : String */;
2274 var_mtype = p0;
2275 var = ((val* (*)(val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:GlobalCompiler>*/;
2276 var1 = ((val* (*)(val*))(var->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var) /* live_types on <var:RapidTypeAnalysis>*/;
2277 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__Collection__has]))(var1, var_mtype) /* has on <var1:HashSet[MClassType]>*/;
2278 if (!var2) {
2279 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 241);
2280 exit(1);
2281 }
2282 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2283 if (varonce) {
2284 var4 = varonce;
2285 } else {
2286 var5 = "val*";
2287 var6 = 4;
2288 var7 = string__NativeString__to_s_with_length(var5, var6);
2289 var4 = var7;
2290 varonce = var4;
2291 }
2292 var8 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_kernel__Object___33d_61d]))(var3, var4) /* != on <var3:String>*/;
2293 if (!var8) {
2294 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 242);
2295 exit(1);
2296 }
2297 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:GlobalCompiler>*/;
2298 var_v = var9;
2299 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:GlobalCompiler>*/;
2300 if (varonce11) {
2301 var12 = varonce11;
2302 } else {
2303 var13 = "val* BOX_";
2304 var14 = 9;
2305 var15 = string__NativeString__to_s_with_length(var13, var14);
2306 var12 = var15;
2307 varonce11 = var12;
2308 }
2309 var16 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2310 if (varonce17) {
2311 var18 = varonce17;
2312 } else {
2313 var19 = "(";
2314 var20 = 1;
2315 var21 = string__NativeString__to_s_with_length(var19, var20);
2316 var18 = var21;
2317 varonce17 = var18;
2318 }
2319 var22 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2320 if (varonce23) {
2321 var24 = varonce23;
2322 } else {
2323 var25 = ");";
2324 var26 = 2;
2325 var27 = string__NativeString__to_s_with_length(var25, var26);
2326 var24 = var27;
2327 varonce23 = var24;
2328 }
2329 var28 = NEW_array__Array(&type_array__Arraykernel__Object);
2330 { /* var28 = array_instance Array[Object] */
2331 var29 = 5;
2332 var30 = NEW_array__NativeArray(var29, &type_array__NativeArraykernel__Object);
2333 ((struct instance_array__NativeArray*)var30)->values[0] = (val*) var12;
2334 ((struct instance_array__NativeArray*)var30)->values[1] = (val*) var16;
2335 ((struct instance_array__NativeArray*)var30)->values[2] = (val*) var18;
2336 ((struct instance_array__NativeArray*)var30)->values[3] = (val*) var22;
2337 ((struct instance_array__NativeArray*)var30)->values[4] = (val*) var24;
2338 ((void (*)(val*, val*, long))(var28->class->vft[COLOR_array__Array__with_native]))(var28, var30, var29) /* with_native on <var28:Array[Object]>*/;
2339 CHECK_NEW_array__Array(var28);
2340 }
2341 var31 = ((val* (*)(val*))(var28->class->vft[COLOR_string__Object__to_s]))(var28) /* to_s on <var28:Array[Object]>*/;
2342 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var10, var31) /* add_decl on <var10:CodeWriter>*/;
2343 if (varonce32) {
2344 var33 = varonce32;
2345 } else {
2346 var34 = "/* allocate ";
2347 var35 = 12;
2348 var36 = string__NativeString__to_s_with_length(var34, var35);
2349 var33 = var36;
2350 varonce32 = var33;
2351 }
2352 if (varonce37) {
2353 var38 = varonce37;
2354 } else {
2355 var39 = " */";
2356 var40 = 3;
2357 var41 = string__NativeString__to_s_with_length(var39, var40);
2358 var38 = var41;
2359 varonce37 = var38;
2360 }
2361 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
2362 { /* var42 = array_instance Array[Object] */
2363 var43 = 3;
2364 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
2365 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var33;
2366 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_mtype;
2367 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var38;
2368 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
2369 CHECK_NEW_array__Array(var42);
2370 }
2371 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
2372 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var45) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2373 if (varonce46) {
2374 var47 = varonce46;
2375 } else {
2376 var48 = "val* BOX_";
2377 var49 = 9;
2378 var50 = string__NativeString__to_s_with_length(var48, var49);
2379 var47 = var50;
2380 varonce46 = var47;
2381 }
2382 var51 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2383 if (varonce52) {
2384 var53 = varonce52;
2385 } else {
2386 var54 = "(";
2387 var55 = 1;
2388 var56 = string__NativeString__to_s_with_length(var54, var55);
2389 var53 = var56;
2390 varonce52 = var53;
2391 }
2392 var57 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2393 if (varonce58) {
2394 var59 = varonce58;
2395 } else {
2396 var60 = " value) {";
2397 var61 = 9;
2398 var62 = string__NativeString__to_s_with_length(var60, var61);
2399 var59 = var62;
2400 varonce58 = var59;
2401 }
2402 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
2403 { /* var63 = array_instance Array[Object] */
2404 var64 = 5;
2405 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
2406 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var47;
2407 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var51;
2408 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var53;
2409 ((struct instance_array__NativeArray*)var65)->values[3] = (val*) var57;
2410 ((struct instance_array__NativeArray*)var65)->values[4] = (val*) var59;
2411 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
2412 CHECK_NEW_array__Array(var63);
2413 }
2414 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
2415 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var66) /* add_decl on <var_v:GlobalCompilerVisitor>*/;
2416 if (varonce67) {
2417 var68 = varonce67;
2418 } else {
2419 var69 = "struct ";
2420 var70 = 7;
2421 var71 = string__NativeString__to_s_with_length(var69, var70);
2422 var68 = var71;
2423 varonce67 = var68;
2424 }
2425 var72 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2426 if (varonce73) {
2427 var74 = varonce73;
2428 } else {
2429 var75 = "*res = nit_alloc(sizeof(struct ";
2430 var76 = 31;
2431 var77 = string__NativeString__to_s_with_length(var75, var76);
2432 var74 = var77;
2433 varonce73 = var74;
2434 }
2435 var78 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
2436 if (varonce79) {
2437 var80 = varonce79;
2438 } else {
2439 var81 = "));";
2440 var82 = 3;
2441 var83 = string__NativeString__to_s_with_length(var81, var82);
2442 var80 = var83;
2443 varonce79 = var80;
2444 }
2445 var84 = NEW_array__Array(&type_array__Arraykernel__Object);
2446 { /* var84 = array_instance Array[Object] */
2447 var85 = 5;
2448 var86 = NEW_array__NativeArray(var85, &type_array__NativeArraykernel__Object);
2449 ((struct instance_array__NativeArray*)var86)->values[0] = (val*) var68;
2450 ((struct instance_array__NativeArray*)var86)->values[1] = (val*) var72;
2451 ((struct instance_array__NativeArray*)var86)->values[2] = (val*) var74;
2452 ((struct instance_array__NativeArray*)var86)->values[3] = (val*) var78;
2453 ((struct instance_array__NativeArray*)var86)->values[4] = (val*) var80;
2454 ((void (*)(val*, val*, long))(var84->class->vft[COLOR_array__Array__with_native]))(var84, var86, var85) /* with_native on <var84:Array[Object]>*/;
2455 CHECK_NEW_array__Array(var84);
2456 }
2457 var87 = ((val* (*)(val*))(var84->class->vft[COLOR_string__Object__to_s]))(var84) /* to_s on <var84:Array[Object]>*/;
2458 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var87) /* add on <var_v:GlobalCompilerVisitor>*/;
2459 if (varonce88) {
2460 var89 = varonce88;
2461 } else {
2462 var90 = "res->classid = ";
2463 var91 = 15;
2464 var92 = string__NativeString__to_s_with_length(var90, var91);
2465 var89 = var92;
2466 varonce88 = var89;
2467 }
2468 var93 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(self, var_mtype) /* classid on <self:GlobalCompiler>*/;
2469 if (varonce94) {
2470 var95 = varonce94;
2471 } else {
2472 var96 = ";";
2473 var97 = 1;
2474 var98 = string__NativeString__to_s_with_length(var96, var97);
2475 var95 = var98;
2476 varonce94 = var95;
2477 }
2478 var99 = NEW_array__Array(&type_array__Arraykernel__Object);
2479 { /* var99 = array_instance Array[Object] */
2480 var100 = 3;
2481 var101 = NEW_array__NativeArray(var100, &type_array__NativeArraykernel__Object);
2482 ((struct instance_array__NativeArray*)var101)->values[0] = (val*) var89;
2483 ((struct instance_array__NativeArray*)var101)->values[1] = (val*) var93;
2484 ((struct instance_array__NativeArray*)var101)->values[2] = (val*) var95;
2485 ((void (*)(val*, val*, long))(var99->class->vft[COLOR_array__Array__with_native]))(var99, var101, var100) /* with_native on <var99:Array[Object]>*/;
2486 CHECK_NEW_array__Array(var99);
2487 }
2488 var102 = ((val* (*)(val*))(var99->class->vft[COLOR_string__Object__to_s]))(var99) /* to_s on <var99:Array[Object]>*/;
2489 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var102) /* add on <var_v:GlobalCompilerVisitor>*/;
2490 if (varonce103) {
2491 var104 = varonce103;
2492 } else {
2493 var105 = "res->value = value;";
2494 var106 = 19;
2495 var107 = string__NativeString__to_s_with_length(var105, var106);
2496 var104 = var107;
2497 varonce103 = var104;
2498 }
2499 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var104) /* add on <var_v:GlobalCompilerVisitor>*/;
2500 if (varonce108) {
2501 var109 = varonce108;
2502 } else {
2503 var110 = "return (val*)res;";
2504 var111 = 17;
2505 var112 = string__NativeString__to_s_with_length(var110, var111);
2506 var109 = var112;
2507 varonce108 = var109;
2508 }
2509 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var109) /* add on <var_v:GlobalCompilerVisitor>*/;
2510 if (varonce113) {
2511 var114 = varonce113;
2512 } else {
2513 var115 = "}";
2514 var116 = 1;
2515 var117 = string__NativeString__to_s_with_length(var115, var116);
2516 var114 = var117;
2517 varonce113 = var114;
2518 }
2519 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var114) /* add on <var_v:GlobalCompilerVisitor>*/;
2520 RET_LABEL:;
2521 }
2522 /* method global_compiler#GlobalCompiler#generate_box_instance for (self: Object, MClassType) */
2523 void VIRTUAL_global_compiler__GlobalCompiler__generate_box_instance(val* self, val* p0) {
2524 global_compiler__GlobalCompiler__generate_box_instance(self, p0);
2525 RET_LABEL:;
2526 }
2527 /* method global_compiler#GlobalCompiler#new_visitor for (self: GlobalCompiler): GlobalCompilerVisitor */
2528 val* global_compiler__GlobalCompiler__new_visitor(val* self) {
2529 val* var /* : GlobalCompilerVisitor */;
2530 val* var1 /* : GlobalCompilerVisitor */;
2531 short int var2 /* : Bool */;
2532 int cltype;
2533 int idtype;
2534 const struct type* type_struct;
2535 var1 = NEW_global_compiler__GlobalCompilerVisitor(&type_global_compiler__GlobalCompilerVisitor);
2536 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init]))(var1, self) /* init on <var1:GlobalCompilerVisitor>*/;
2537 CHECK_NEW_global_compiler__GlobalCompilerVisitor(var1);
2538 /* <var1:GlobalCompilerVisitor> isa VISITOR */
2539 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
2540 cltype = type_struct->color;
2541 idtype = type_struct->id;
2542 if(cltype >= var1->type->table_size) {
2543 var2 = 0;
2544 } else {
2545 var2 = var1->type->type_table[cltype] == idtype;
2546 }
2547 if (!var2) {
2548 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 256);
2549 exit(1);
2550 }
2551 var = var1;
2552 goto RET_LABEL;
2553 RET_LABEL:;
2554 return var;
2555 }
2556 /* method global_compiler#GlobalCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
2557 val* VIRTUAL_global_compiler__GlobalCompiler__new_visitor(val* self) {
2558 val* var /* : AbstractCompilerVisitor */;
2559 val* var1 /* : GlobalCompilerVisitor */;
2560 var1 = global_compiler__GlobalCompiler__new_visitor(self);
2561 var = var1;
2562 RET_LABEL:;
2563 return var;
2564 }
2565 /* method global_compiler#GlobalCompiler#collect_types_cache for (self: GlobalCompiler): HashMap[MType, Array[MClassType]] */
2566 val* global_compiler__GlobalCompiler__collect_types_cache(val* self) {
2567 val* var /* : HashMap[MType, Array[MClassType]] */;
2568 val* var1 /* : HashMap[MType, Array[MClassType]] */;
2569 var1 = self->attrs[COLOR_global_compiler__GlobalCompiler___64dcollect_types_cache].val; /* @collect_types_cache on <self:GlobalCompiler> */
2570 if (var1 == NULL) {
2571 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @collect_types_cache", "src/global_compiler.nit", 258);
2572 exit(1);
2573 }
2574 var = var1;
2575 RET_LABEL:;
2576 return var;
2577 }
2578 /* method global_compiler#GlobalCompiler#collect_types_cache for (self: Object): HashMap[MType, Array[MClassType]] */
2579 val* VIRTUAL_global_compiler__GlobalCompiler__collect_types_cache(val* self) {
2580 val* var /* : HashMap[MType, Array[MClassType]] */;
2581 val* var1 /* : HashMap[MType, Array[MClassType]] */;
2582 var1 = global_compiler__GlobalCompiler__collect_types_cache(self);
2583 var = var1;
2584 RET_LABEL:;
2585 return var;
2586 }
2587 /* method global_compiler#GlobalCompiler#collect_types_cache= for (self: GlobalCompiler, HashMap[MType, Array[MClassType]]) */
2588 void global_compiler__GlobalCompiler__collect_types_cache_61d(val* self, val* p0) {
2589 self->attrs[COLOR_global_compiler__GlobalCompiler___64dcollect_types_cache].val = p0; /* @collect_types_cache on <self:GlobalCompiler> */
2590 RET_LABEL:;
2591 }
2592 /* method global_compiler#GlobalCompiler#collect_types_cache= for (self: Object, HashMap[MType, Array[MClassType]]) */
2593 void VIRTUAL_global_compiler__GlobalCompiler__collect_types_cache_61d(val* self, val* p0) {
2594 global_compiler__GlobalCompiler__collect_types_cache_61d(self, p0);
2595 RET_LABEL:;
2596 }
2597 /* method global_compiler#GlobalCompilerVisitor#autobox for (self: GlobalCompilerVisitor, RuntimeVariable, MType): RuntimeVariable */
2598 val* global_compiler__GlobalCompilerVisitor__autobox(val* self, val* p0, val* p1) {
2599 val* var /* : RuntimeVariable */;
2600 val* var_value /* var value: RuntimeVariable */;
2601 val* var_mtype /* var mtype: MType */;
2602 val* var1 /* : MType */;
2603 short int var2 /* : Bool */;
2604 short int var3 /* : Bool */;
2605 val* var4 /* : MType */;
2606 val* var5 /* : String */;
2607 static val* varonce;
2608 val* var6 /* : String */;
2609 char* var7 /* : NativeString */;
2610 long var8 /* : Int */;
2611 val* var9 /* : String */;
2612 short int var10 /* : Bool */;
2613 short int var_ /* var : Bool */;
2614 val* var11 /* : String */;
2615 static val* varonce12;
2616 val* var13 /* : String */;
2617 char* var14 /* : NativeString */;
2618 long var15 /* : Int */;
2619 val* var16 /* : String */;
2620 short int var17 /* : Bool */;
2621 val* var18 /* : MType */;
2622 val* var19 /* : String */;
2623 static val* varonce20;
2624 val* var21 /* : String */;
2625 char* var22 /* : NativeString */;
2626 long var23 /* : Int */;
2627 val* var24 /* : String */;
2628 short int var25 /* : Bool */;
2629 static val* varonce26;
2630 val* var27 /* : String */;
2631 char* var28 /* : NativeString */;
2632 long var29 /* : Int */;
2633 val* var30 /* : String */;
2634 val* var31 /* : String */;
2635 static val* varonce32;
2636 val* var33 /* : String */;
2637 char* var34 /* : NativeString */;
2638 long var35 /* : Int */;
2639 val* var36 /* : String */;
2640 static val* varonce37;
2641 val* var38 /* : String */;
2642 char* var39 /* : NativeString */;
2643 long var40 /* : Int */;
2644 val* var41 /* : String */;
2645 val* var42 /* : MType */;
2646 static val* varonce43;
2647 val* var44 /* : String */;
2648 char* var45 /* : NativeString */;
2649 long var46 /* : Int */;
2650 val* var47 /* : String */;
2651 static val* varonce48;
2652 val* var49 /* : String */;
2653 char* var50 /* : NativeString */;
2654 long var51 /* : Int */;
2655 val* var52 /* : String */;
2656 val* var53 /* : Array[Object] */;
2657 long var54 /* : Int */;
2658 val* var55 /* : NativeArray[Object] */;
2659 val* var56 /* : String */;
2660 val* var57 /* : RuntimeVariable */;
2661 val* var58 /* : String */;
2662 static val* varonce59;
2663 val* var60 /* : String */;
2664 char* var61 /* : NativeString */;
2665 long var62 /* : Int */;
2666 val* var63 /* : String */;
2667 short int var64 /* : Bool */;
2668 val* var65 /* : MType */;
2669 short int var66 /* : Bool */;
2670 int cltype;
2671 int idtype;
2672 val* var_valtype /* var valtype: MClassType */;
2673 val* var67 /* : RuntimeVariable */;
2674 val* var_res /* var res: RuntimeVariable */;
2675 val* var68 /* : AbstractCompiler */;
2676 val* var69 /* : RapidTypeAnalysis */;
2677 val* var70 /* : HashSet[MClassType] */;
2678 short int var71 /* : Bool */;
2679 short int var72 /* : Bool */;
2680 static val* varonce73;
2681 val* var74 /* : String */;
2682 char* var75 /* : NativeString */;
2683 long var76 /* : Int */;
2684 val* var77 /* : String */;
2685 val* var78 /* : MType */;
2686 static val* varonce79;
2687 val* var80 /* : String */;
2688 char* var81 /* : NativeString */;
2689 long var82 /* : Int */;
2690 val* var83 /* : String */;
2691 static val* varonce84;
2692 val* var85 /* : String */;
2693 char* var86 /* : NativeString */;
2694 long var87 /* : Int */;
2695 val* var88 /* : String */;
2696 val* var89 /* : MType */;
2697 static val* varonce90;
2698 val* var91 /* : String */;
2699 char* var92 /* : NativeString */;
2700 long var93 /* : Int */;
2701 val* var94 /* : String */;
2702 val* var95 /* : Array[Object] */;
2703 long var96 /* : Int */;
2704 val* var97 /* : NativeArray[Object] */;
2705 val* var98 /* : String */;
2706 static val* varonce99;
2707 val* var100 /* : String */;
2708 char* var101 /* : NativeString */;
2709 long var102 /* : Int */;
2710 val* var103 /* : String */;
2711 static val* varonce104;
2712 val* var105 /* : String */;
2713 char* var106 /* : NativeString */;
2714 long var107 /* : Int */;
2715 val* var108 /* : String */;
2716 val* var109 /* : String */;
2717 static val* varonce110;
2718 val* var111 /* : String */;
2719 char* var112 /* : NativeString */;
2720 long var113 /* : Int */;
2721 val* var114 /* : String */;
2722 static val* varonce115;
2723 val* var116 /* : String */;
2724 char* var117 /* : NativeString */;
2725 long var118 /* : Int */;
2726 val* var119 /* : String */;
2727 val* var120 /* : MType */;
2728 static val* varonce121;
2729 val* var122 /* : String */;
2730 char* var123 /* : NativeString */;
2731 long var124 /* : Int */;
2732 val* var125 /* : String */;
2733 static val* varonce126;
2734 val* var127 /* : String */;
2735 char* var128 /* : NativeString */;
2736 long var129 /* : Int */;
2737 val* var130 /* : String */;
2738 val* var131 /* : Array[Object] */;
2739 long var132 /* : Int */;
2740 val* var133 /* : NativeArray[Object] */;
2741 val* var134 /* : String */;
2742 val* var135 /* : RuntimeVariable */;
2743 val* var_res136 /* var res: RuntimeVariable */;
2744 static val* varonce137;
2745 val* var138 /* : String */;
2746 char* var139 /* : NativeString */;
2747 long var140 /* : Int */;
2748 val* var141 /* : String */;
2749 static val* varonce142;
2750 val* var143 /* : String */;
2751 char* var144 /* : NativeString */;
2752 long var145 /* : Int */;
2753 val* var146 /* : String */;
2754 val* var147 /* : MType */;
2755 static val* varonce148;
2756 val* var149 /* : String */;
2757 char* var150 /* : NativeString */;
2758 long var151 /* : Int */;
2759 val* var152 /* : String */;
2760 static val* varonce153;
2761 val* var154 /* : String */;
2762 char* var155 /* : NativeString */;
2763 long var156 /* : Int */;
2764 val* var157 /* : String */;
2765 val* var158 /* : Array[Object] */;
2766 long var159 /* : Int */;
2767 val* var160 /* : NativeArray[Object] */;
2768 val* var161 /* : String */;
2769 static val* varonce162;
2770 val* var163 /* : String */;
2771 char* var164 /* : NativeString */;
2772 long var165 /* : Int */;
2773 val* var166 /* : String */;
2774 val* var167 /* : MType */;
2775 static val* varonce168;
2776 val* var169 /* : String */;
2777 char* var170 /* : NativeString */;
2778 long var171 /* : Int */;
2779 val* var172 /* : String */;
2780 static val* varonce173;
2781 val* var174 /* : String */;
2782 char* var175 /* : NativeString */;
2783 long var176 /* : Int */;
2784 val* var177 /* : String */;
2785 val* var178 /* : Array[Object] */;
2786 long var179 /* : Int */;
2787 val* var180 /* : NativeArray[Object] */;
2788 val* var181 /* : String */;
2789 var_value = p0;
2790 var_mtype = p1;
2791 var1 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2792 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___61d_61d]))(var1, var_mtype) /* == on <var1:MType>*/;
2793 if (var2){
2794 var = var_value;
2795 goto RET_LABEL;
2796 } else {
2797 var4 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2798 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_compiler__MType__ctype]))(var4) /* ctype on <var4:MType>*/;
2799 if (varonce) {
2800 var6 = varonce;
2801 } else {
2802 var7 = "val*";
2803 var8 = 4;
2804 var9 = string__NativeString__to_s_with_length(var7, var8);
2805 var6 = var9;
2806 varonce = var6;
2807 }
2808 var10 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_kernel__Object___61d_61d]))(var5, var6) /* == on <var5:String>*/;
2809 var_ = var10;
2810 if (var10){
2811 var11 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MType>*/;
2812 if (varonce12) {
2813 var13 = varonce12;
2814 } else {
2815 var14 = "val*";
2816 var15 = 4;
2817 var16 = string__NativeString__to_s_with_length(var14, var15);
2818 var13 = var16;
2819 varonce12 = var13;
2820 }
2821 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
2822 var3 = var17;
2823 } else {
2824 var3 = var_;
2825 }
2826 if (var3){
2827 var = var_value;
2828 goto RET_LABEL;
2829 } else {
2830 var18 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2831 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_abstract_compiler__MType__ctype]))(var18) /* ctype on <var18:MType>*/;
2832 if (varonce20) {
2833 var21 = varonce20;
2834 } else {
2835 var22 = "val*";
2836 var23 = 4;
2837 var24 = string__NativeString__to_s_with_length(var22, var23);
2838 var21 = var24;
2839 varonce20 = var21;
2840 }
2841 var25 = ((short int (*)(val*, val*))(var19->class->vft[COLOR_kernel__Object___61d_61d]))(var19, var21) /* == on <var19:String>*/;
2842 if (var25){
2843 if (varonce26) {
2844 var27 = varonce26;
2845 } else {
2846 var28 = "((struct ";
2847 var29 = 9;
2848 var30 = string__NativeString__to_s_with_length(var28, var29);
2849 var27 = var30;
2850 varonce26 = var27;
2851 }
2852 var31 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
2853 if (varonce32) {
2854 var33 = varonce32;
2855 } else {
2856 var34 = "*)";
2857 var35 = 2;
2858 var36 = string__NativeString__to_s_with_length(var34, var35);
2859 var33 = var36;
2860 varonce32 = var33;
2861 }
2862 if (varonce37) {
2863 var38 = varonce37;
2864 } else {
2865 var39 = ")->value; /* autounbox from ";
2866 var40 = 28;
2867 var41 = string__NativeString__to_s_with_length(var39, var40);
2868 var38 = var41;
2869 varonce37 = var38;
2870 }
2871 var42 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2872 if (varonce43) {
2873 var44 = varonce43;
2874 } else {
2875 var45 = " to ";
2876 var46 = 4;
2877 var47 = string__NativeString__to_s_with_length(var45, var46);
2878 var44 = var47;
2879 varonce43 = var44;
2880 }
2881 if (varonce48) {
2882 var49 = varonce48;
2883 } else {
2884 var50 = " */";
2885 var51 = 3;
2886 var52 = string__NativeString__to_s_with_length(var50, var51);
2887 var49 = var52;
2888 varonce48 = var49;
2889 }
2890 var53 = NEW_array__Array(&type_array__Arraykernel__Object);
2891 { /* var53 = array_instance Array[Object] */
2892 var54 = 9;
2893 var55 = NEW_array__NativeArray(var54, &type_array__NativeArraykernel__Object);
2894 ((struct instance_array__NativeArray*)var55)->values[0] = (val*) var27;
2895 ((struct instance_array__NativeArray*)var55)->values[1] = (val*) var31;
2896 ((struct instance_array__NativeArray*)var55)->values[2] = (val*) var33;
2897 ((struct instance_array__NativeArray*)var55)->values[3] = (val*) var_value;
2898 ((struct instance_array__NativeArray*)var55)->values[4] = (val*) var38;
2899 ((struct instance_array__NativeArray*)var55)->values[5] = (val*) var42;
2900 ((struct instance_array__NativeArray*)var55)->values[6] = (val*) var44;
2901 ((struct instance_array__NativeArray*)var55)->values[7] = (val*) var_mtype;
2902 ((struct instance_array__NativeArray*)var55)->values[8] = (val*) var49;
2903 ((void (*)(val*, val*, long))(var53->class->vft[COLOR_array__Array__with_native]))(var53, var55, var54) /* with_native on <var53:Array[Object]>*/;
2904 CHECK_NEW_array__Array(var53);
2905 }
2906 var56 = ((val* (*)(val*))(var53->class->vft[COLOR_string__Object__to_s]))(var53) /* to_s on <var53:Array[Object]>*/;
2907 var57 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var56, var_mtype) /* new_expr on <self:GlobalCompilerVisitor>*/;
2908 var = var57;
2909 goto RET_LABEL;
2910 } else {
2911 var58 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MType>*/;
2912 if (varonce59) {
2913 var60 = varonce59;
2914 } else {
2915 var61 = "val*";
2916 var62 = 4;
2917 var63 = string__NativeString__to_s_with_length(var61, var62);
2918 var60 = var63;
2919 varonce59 = var60;
2920 }
2921 var64 = ((short int (*)(val*, val*))(var58->class->vft[COLOR_kernel__Object___61d_61d]))(var58, var60) /* == on <var58:String>*/;
2922 if (var64){
2923 var65 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2924 /* <var65:MType> isa MClassType */
2925 cltype = type_model__MClassType.color;
2926 idtype = type_model__MClassType.id;
2927 if(cltype >= var65->type->table_size) {
2928 var66 = 0;
2929 } else {
2930 var66 = var65->type->type_table[cltype] == idtype;
2931 }
2932 if (!var66) {
2933 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 277);
2934 exit(1);
2935 }
2936 var_valtype = var65;
2937 var67 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_mtype) /* new_var on <self:GlobalCompilerVisitor>*/;
2938 var_res = var67;
2939 var68 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
2940 var69 = ((val* (*)(val*))(var68->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var68) /* runtime_type_analysis on <var68:AbstractCompiler(GlobalCompiler)>*/;
2941 var70 = ((val* (*)(val*))(var69->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var69) /* live_types on <var69:RapidTypeAnalysis>*/;
2942 var71 = ((short int (*)(val*, val*))(var70->class->vft[COLOR_abstract_collection__Collection__has]))(var70, var_valtype) /* has on <var70:HashSet[MClassType]>*/;
2943 var72 = !var71;
2944 if (var72){
2945 if (varonce73) {
2946 var74 = varonce73;
2947 } else {
2948 var75 = "/*no autobox from ";
2949 var76 = 18;
2950 var77 = string__NativeString__to_s_with_length(var75, var76);
2951 var74 = var77;
2952 varonce73 = var74;
2953 }
2954 var78 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2955 if (varonce79) {
2956 var80 = varonce79;
2957 } else {
2958 var81 = " to ";
2959 var82 = 4;
2960 var83 = string__NativeString__to_s_with_length(var81, var82);
2961 var80 = var83;
2962 varonce79 = var80;
2963 }
2964 if (varonce84) {
2965 var85 = varonce84;
2966 } else {
2967 var86 = ": ";
2968 var87 = 2;
2969 var88 = string__NativeString__to_s_with_length(var86, var87);
2970 var85 = var88;
2971 varonce84 = var85;
2972 }
2973 var89 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
2974 if (varonce90) {
2975 var91 = varonce90;
2976 } else {
2977 var92 = " is not live! */";
2978 var93 = 16;
2979 var94 = string__NativeString__to_s_with_length(var92, var93);
2980 var91 = var94;
2981 varonce90 = var91;
2982 }
2983 var95 = NEW_array__Array(&type_array__Arraykernel__Object);
2984 { /* var95 = array_instance Array[Object] */
2985 var96 = 7;
2986 var97 = NEW_array__NativeArray(var96, &type_array__NativeArraykernel__Object);
2987 ((struct instance_array__NativeArray*)var97)->values[0] = (val*) var74;
2988 ((struct instance_array__NativeArray*)var97)->values[1] = (val*) var78;
2989 ((struct instance_array__NativeArray*)var97)->values[2] = (val*) var80;
2990 ((struct instance_array__NativeArray*)var97)->values[3] = (val*) var_mtype;
2991 ((struct instance_array__NativeArray*)var97)->values[4] = (val*) var85;
2992 ((struct instance_array__NativeArray*)var97)->values[5] = (val*) var89;
2993 ((struct instance_array__NativeArray*)var97)->values[6] = (val*) var91;
2994 ((void (*)(val*, val*, long))(var95->class->vft[COLOR_array__Array__with_native]))(var95, var97, var96) /* with_native on <var95:Array[Object]>*/;
2995 CHECK_NEW_array__Array(var95);
2996 }
2997 var98 = ((val* (*)(val*))(var95->class->vft[COLOR_string__Object__to_s]))(var95) /* to_s on <var95:Array[Object]>*/;
2998 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var98) /* add on <self:GlobalCompilerVisitor>*/;
2999 if (varonce99) {
3000 var100 = varonce99;
3001 } else {
3002 var101 = "printf(\"Dead code executed!\\n\"); exit(1);";
3003 var102 = 41;
3004 var103 = string__NativeString__to_s_with_length(var101, var102);
3005 var100 = var103;
3006 varonce99 = var100;
3007 }
3008 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var100) /* add on <self:GlobalCompilerVisitor>*/;
3009 var = var_res;
3010 goto RET_LABEL;
3011 } else {
3012 }
3013 if (varonce104) {
3014 var105 = varonce104;
3015 } else {
3016 var106 = " = BOX_";
3017 var107 = 7;
3018 var108 = string__NativeString__to_s_with_length(var106, var107);
3019 var105 = var108;
3020 varonce104 = var105;
3021 }
3022 var109 = ((val* (*)(val*))(var_valtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_valtype) /* c_name on <var_valtype:MClassType>*/;
3023 if (varonce110) {
3024 var111 = varonce110;
3025 } else {
3026 var112 = "(";
3027 var113 = 1;
3028 var114 = string__NativeString__to_s_with_length(var112, var113);
3029 var111 = var114;
3030 varonce110 = var111;
3031 }
3032 if (varonce115) {
3033 var116 = varonce115;
3034 } else {
3035 var117 = "); /* autobox from ";
3036 var118 = 19;
3037 var119 = string__NativeString__to_s_with_length(var117, var118);
3038 var116 = var119;
3039 varonce115 = var116;
3040 }
3041 var120 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
3042 if (varonce121) {
3043 var122 = varonce121;
3044 } else {
3045 var123 = " to ";
3046 var124 = 4;
3047 var125 = string__NativeString__to_s_with_length(var123, var124);
3048 var122 = var125;
3049 varonce121 = var122;
3050 }
3051 if (varonce126) {
3052 var127 = varonce126;
3053 } else {
3054 var128 = " */";
3055 var129 = 3;
3056 var130 = string__NativeString__to_s_with_length(var128, var129);
3057 var127 = var130;
3058 varonce126 = var127;
3059 }
3060 var131 = NEW_array__Array(&type_array__Arraykernel__Object);
3061 { /* var131 = array_instance Array[Object] */
3062 var132 = 10;
3063 var133 = NEW_array__NativeArray(var132, &type_array__NativeArraykernel__Object);
3064 ((struct instance_array__NativeArray*)var133)->values[0] = (val*) var_res;
3065 ((struct instance_array__NativeArray*)var133)->values[1] = (val*) var105;
3066 ((struct instance_array__NativeArray*)var133)->values[2] = (val*) var109;
3067 ((struct instance_array__NativeArray*)var133)->values[3] = (val*) var111;
3068 ((struct instance_array__NativeArray*)var133)->values[4] = (val*) var_value;
3069 ((struct instance_array__NativeArray*)var133)->values[5] = (val*) var116;
3070 ((struct instance_array__NativeArray*)var133)->values[6] = (val*) var120;
3071 ((struct instance_array__NativeArray*)var133)->values[7] = (val*) var122;
3072 ((struct instance_array__NativeArray*)var133)->values[8] = (val*) var_mtype;
3073 ((struct instance_array__NativeArray*)var133)->values[9] = (val*) var127;
3074 ((void (*)(val*, val*, long))(var131->class->vft[COLOR_array__Array__with_native]))(var131, var133, var132) /* with_native on <var131:Array[Object]>*/;
3075 CHECK_NEW_array__Array(var131);
3076 }
3077 var134 = ((val* (*)(val*))(var131->class->vft[COLOR_string__Object__to_s]))(var131) /* to_s on <var131:Array[Object]>*/;
3078 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
3079 var = var_res;
3080 goto RET_LABEL;
3081 } else {
3082 var135 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_mtype) /* new_var on <self:GlobalCompilerVisitor>*/;
3083 var_res136 = var135;
3084 if (varonce137) {
3085 var138 = varonce137;
3086 } else {
3087 var139 = "/* ";
3088 var140 = 3;
3089 var141 = string__NativeString__to_s_with_length(var139, var140);
3090 var138 = var141;
3091 varonce137 = var138;
3092 }
3093 if (varonce142) {
3094 var143 = varonce142;
3095 } else {
3096 var144 = " left unintialized (cannot convert ";
3097 var145 = 35;
3098 var146 = string__NativeString__to_s_with_length(var144, var145);
3099 var143 = var146;
3100 varonce142 = var143;
3101 }
3102 var147 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
3103 if (varonce148) {
3104 var149 = varonce148;
3105 } else {
3106 var150 = " to ";
3107 var151 = 4;
3108 var152 = string__NativeString__to_s_with_length(var150, var151);
3109 var149 = var152;
3110 varonce148 = var149;
3111 }
3112 if (varonce153) {
3113 var154 = varonce153;
3114 } else {
3115 var155 = ") */";
3116 var156 = 4;
3117 var157 = string__NativeString__to_s_with_length(var155, var156);
3118 var154 = var157;
3119 varonce153 = var154;
3120 }
3121 var158 = NEW_array__Array(&type_array__Arraykernel__Object);
3122 { /* var158 = array_instance Array[Object] */
3123 var159 = 7;
3124 var160 = NEW_array__NativeArray(var159, &type_array__NativeArraykernel__Object);
3125 ((struct instance_array__NativeArray*)var160)->values[0] = (val*) var138;
3126 ((struct instance_array__NativeArray*)var160)->values[1] = (val*) var_res136;
3127 ((struct instance_array__NativeArray*)var160)->values[2] = (val*) var143;
3128 ((struct instance_array__NativeArray*)var160)->values[3] = (val*) var147;
3129 ((struct instance_array__NativeArray*)var160)->values[4] = (val*) var149;
3130 ((struct instance_array__NativeArray*)var160)->values[5] = (val*) var_mtype;
3131 ((struct instance_array__NativeArray*)var160)->values[6] = (val*) var154;
3132 ((void (*)(val*, val*, long))(var158->class->vft[COLOR_array__Array__with_native]))(var158, var160, var159) /* with_native on <var158:Array[Object]>*/;
3133 CHECK_NEW_array__Array(var158);
3134 }
3135 var161 = ((val* (*)(val*))(var158->class->vft[COLOR_string__Object__to_s]))(var158) /* to_s on <var158:Array[Object]>*/;
3136 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var161) /* add on <self:GlobalCompilerVisitor>*/;
3137 if (varonce162) {
3138 var163 = varonce162;
3139 } else {
3140 var164 = "printf(\"Cast error: Cannot cast %s to %s.\\n\", \"";
3141 var165 = 47;
3142 var166 = string__NativeString__to_s_with_length(var164, var165);
3143 var163 = var166;
3144 varonce162 = var163;
3145 }
3146 var167 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
3147 if (varonce168) {
3148 var169 = varonce168;
3149 } else {
3150 var170 = "\", \"";
3151 var171 = 4;
3152 var172 = string__NativeString__to_s_with_length(var170, var171);
3153 var169 = var172;
3154 varonce168 = var169;
3155 }
3156 if (varonce173) {
3157 var174 = varonce173;
3158 } else {
3159 var175 = "\"); exit(1);";
3160 var176 = 12;
3161 var177 = string__NativeString__to_s_with_length(var175, var176);
3162 var174 = var177;
3163 varonce173 = var174;
3164 }
3165 var178 = NEW_array__Array(&type_array__Arraykernel__Object);
3166 { /* var178 = array_instance Array[Object] */
3167 var179 = 5;
3168 var180 = NEW_array__NativeArray(var179, &type_array__NativeArraykernel__Object);
3169 ((struct instance_array__NativeArray*)var180)->values[0] = (val*) var163;
3170 ((struct instance_array__NativeArray*)var180)->values[1] = (val*) var167;
3171 ((struct instance_array__NativeArray*)var180)->values[2] = (val*) var169;
3172 ((struct instance_array__NativeArray*)var180)->values[3] = (val*) var_mtype;
3173 ((struct instance_array__NativeArray*)var180)->values[4] = (val*) var174;
3174 ((void (*)(val*, val*, long))(var178->class->vft[COLOR_array__Array__with_native]))(var178, var180, var179) /* with_native on <var178:Array[Object]>*/;
3175 CHECK_NEW_array__Array(var178);
3176 }
3177 var181 = ((val* (*)(val*))(var178->class->vft[COLOR_string__Object__to_s]))(var178) /* to_s on <var178:Array[Object]>*/;
3178 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var181) /* add on <self:GlobalCompilerVisitor>*/;
3179 var = var_res136;
3180 goto RET_LABEL;
3181 }
3182 }
3183 }
3184 }
3185 RET_LABEL:;
3186 return var;
3187 }
3188 /* method global_compiler#GlobalCompilerVisitor#autobox for (self: Object, RuntimeVariable, MType): RuntimeVariable */
3189 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__autobox(val* self, val* p0, val* p1) {
3190 val* var /* : RuntimeVariable */;
3191 val* var1 /* : RuntimeVariable */;
3192 var1 = global_compiler__GlobalCompilerVisitor__autobox(self, p0, p1);
3193 var = var1;
3194 RET_LABEL:;
3195 return var;
3196 }
3197 /* method global_compiler#GlobalCompilerVisitor#collect_types for (self: GlobalCompilerVisitor, RuntimeVariable): Array[MClassType] */
3198 val* global_compiler__GlobalCompilerVisitor__collect_types(val* self, val* p0) {
3199 val* var /* : Array[MClassType] */;
3200 val* var_recv /* var recv: RuntimeVariable */;
3201 val* var1 /* : MType */;
3202 val* var_mtype /* var mtype: MType */;
3203 short int var2 /* : Bool */;
3204 short int var3 /* : Bool */;
3205 int cltype;
3206 int idtype;
3207 val* var4 /* : AbstractCompiler */;
3208 val* var5 /* : RapidTypeAnalysis */;
3209 val* var6 /* : HashSet[MClassType] */;
3210 short int var7 /* : Bool */;
3211 val* var8 /* : Array[MClassType] */;
3212 long var9 /* : Int */;
3213 val* var_ /* var : Array[MClassType] */;
3214 val* var_types /* var types: Array[MClassType] */;
3215 val* var10 /* : AbstractCompiler */;
3216 val* var11 /* : HashMap[MType, Array[MClassType]] */;
3217 val* var_cache /* var cache: HashMap[MType, Array[MClassType]] */;
3218 short int var12 /* : Bool */;
3219 val* var13 /* : nullable Object */;
3220 val* var14 /* : Array[MClassType] */;
3221 val* var_types15 /* var types: Array[MClassType] */;
3222 val* var16 /* : AbstractCompiler */;
3223 val* var17 /* : MModule */;
3224 val* var_mainmodule /* var mainmodule: MModule */;
3225 val* var18 /* : AbstractCompiler */;
3226 val* var19 /* : RapidTypeAnalysis */;
3227 val* var20 /* : HashSet[MClassType] */;
3228 val* var21 /* : Iterator[nullable Object] */;
3229 short int var22 /* : Bool */;
3230 val* var23 /* : nullable Object */;
3231 val* var_t /* var t: MClassType */;
3232 val* var24 /* : null */;
3233 short int var25 /* : Bool */;
3234 short int var26 /* : Bool */;
3235 var_recv = p0;
3236 var1 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_recv) /* mcasttype on <var_recv:RuntimeVariable>*/;
3237 var_mtype = var1;
3238 var2 = ((short int (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact]))(var_recv) /* is_exact on <var_recv:RuntimeVariable>*/;
3239 if (var2){
3240 /* <var_mtype:MType> isa MClassType */
3241 cltype = type_model__MClassType.color;
3242 idtype = type_model__MClassType.id;
3243 if(cltype >= var_mtype->type->table_size) {
3244 var3 = 0;
3245 } else {
3246 var3 = var_mtype->type->type_table[cltype] == idtype;
3247 }
3248 if (!var3) {
3249 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 300);
3250 exit(1);
3251 }
3252 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3253 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var4) /* runtime_type_analysis on <var4:AbstractCompiler(GlobalCompiler)>*/;
3254 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var5) /* live_types on <var5:RapidTypeAnalysis>*/;
3255 var7 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__Collection__has]))(var6, var_mtype) /* has on <var6:HashSet[MClassType]>*/;
3256 if (!var7) {
3257 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 301);
3258 exit(1);
3259 }
3260 var8 = NEW_array__Array(&type_array__Arraymodel__MClassType);
3261 var9 = 1;
3262 ((void (*)(val*, long))(var8->class->vft[COLOR_array__Array__with_capacity]))(var8, var9) /* with_capacity on <var8:Array[MClassType]>*/;
3263 CHECK_NEW_array__Array(var8);
3264 var_ = var8;
3265 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var_mtype) /* push on <var_:Array[MClassType]>*/;
3266 var_types = var_;
3267 var = var_types;
3268 goto RET_LABEL;
3269 } else {
3270 }
3271 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3272 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_global_compiler__GlobalCompiler__collect_types_cache]))(var10) /* collect_types_cache on <var10:AbstractCompiler(GlobalCompiler)>*/;
3273 var_cache = var11;
3274 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]]>*/;
3275 if (var12){
3276 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]]>*/;
3277 var = var13;
3278 goto RET_LABEL;
3279 } else {
3280 }
3281 var14 = NEW_array__Array(&type_array__Arraymodel__MClassType);
3282 ((void (*)(val*))(var14->class->vft[COLOR_array__Array__init]))(var14) /* init on <var14:Array[MClassType]>*/;
3283 CHECK_NEW_array__Array(var14);
3284 var_types15 = var14;
3285 var16 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3286 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var16) /* mainmodule on <var16:AbstractCompiler(GlobalCompiler)>*/;
3287 var_mainmodule = var17;
3288 var18 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
3289 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var18) /* runtime_type_analysis on <var18:AbstractCompiler(GlobalCompiler)>*/;
3290 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var19) /* live_types on <var19:RapidTypeAnalysis>*/;
3291 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Collection__iterator]))(var20) /* iterator on <var20:HashSet[MClassType]>*/;
3292 for(;;) {
3293 var22 = ((short int (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var21) /* is_ok on <var21:Iterator[nullable Object]>*/;
3294 if(!var22) break;
3295 var23 = ((val* (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__item]))(var21) /* item on <var21:Iterator[nullable Object]>*/;
3296 var_t = var23;
3297 var24 = NULL;
3298 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>*/;
3299 var26 = !var25;
3300 if (var26){
3301 goto CONTINUE_label;
3302 } else {
3303 }
3304 ((void (*)(val*, val*))(var_types15->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_types15, var_t) /* add on <var_types15:Array[MClassType]>*/;
3305 CONTINUE_label: (void)0;
3306 ((void (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__next]))(var21) /* next on <var21:Iterator[nullable Object]>*/;
3307 }
3308 BREAK_label: (void)0;
3309 ((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]]>*/;
3310 var = var_types15;
3311 goto RET_LABEL;
3312 RET_LABEL:;
3313 return var;
3314 }
3315 /* method global_compiler#GlobalCompilerVisitor#collect_types for (self: Object, RuntimeVariable): Array[MClassType] */
3316 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__collect_types(val* self, val* p0) {
3317 val* var /* : Array[MClassType] */;
3318 val* var1 /* : Array[MClassType] */;
3319 var1 = global_compiler__GlobalCompilerVisitor__collect_types(self, p0);
3320 var = var1;
3321 RET_LABEL:;
3322 return var;
3323 }
3324 /* method global_compiler#GlobalCompilerVisitor#native_array_def for (self: GlobalCompilerVisitor, String, nullable MType, Array[RuntimeVariable]) */
3325 void global_compiler__GlobalCompilerVisitor__native_array_def(val* self, val* p0, val* p1, val* p2) {
3326 val* var_pname /* var pname: String */;
3327 val* var_ret_type /* var ret_type: nullable MType */;
3328 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
3329 val* var /* : nullable Object */;
3330 val* var1 /* : MType */;
3331 val* var_elttype /* var elttype: MType */;
3332 val* var2 /* : Array[Object] */;
3333 long var3 /* : Int */;
3334 val* var_ /* var : Array[Object] */;
3335 static val* varonce;
3336 val* var4 /* : String */;
3337 char* var5 /* : NativeString */;
3338 long var6 /* : Int */;
3339 val* var7 /* : String */;
3340 long var8 /* : Int */;
3341 val* var9 /* : nullable Object */;
3342 val* var10 /* : MType */;
3343 val* var11 /* : String */;
3344 static val* varonce12;
3345 val* var13 /* : String */;
3346 char* var14 /* : NativeString */;
3347 long var15 /* : Int */;
3348 val* var16 /* : String */;
3349 long var17 /* : Int */;
3350 val* var18 /* : nullable Object */;
3351 static val* varonce19;
3352 val* var20 /* : String */;
3353 char* var21 /* : NativeString */;
3354 long var22 /* : Int */;
3355 val* var23 /* : String */;
3356 val* var24 /* : String */;
3357 val* var_recv /* var recv: String */;
3358 static val* varonce25;
3359 val* var26 /* : String */;
3360 char* var27 /* : NativeString */;
3361 long var28 /* : Int */;
3362 val* var29 /* : String */;
3363 short int var30 /* : Bool */;
3364 static val* varonce31;
3365 val* var32 /* : String */;
3366 char* var33 /* : NativeString */;
3367 long var34 /* : Int */;
3368 val* var35 /* : String */;
3369 long var36 /* : Int */;
3370 val* var37 /* : nullable Object */;
3371 static val* varonce38;
3372 val* var39 /* : String */;
3373 char* var40 /* : NativeString */;
3374 long var41 /* : Int */;
3375 val* var42 /* : String */;
3376 val* var43 /* : Array[Object] */;
3377 long var44 /* : Int */;
3378 val* var45 /* : NativeArray[Object] */;
3379 val* var46 /* : String */;
3380 val* var47 /* : RuntimeVariable */;
3381 static val* varonce48;
3382 val* var49 /* : String */;
3383 char* var50 /* : NativeString */;
3384 long var51 /* : Int */;
3385 val* var52 /* : String */;
3386 short int var53 /* : Bool */;
3387 static val* varonce54;
3388 val* var55 /* : String */;
3389 char* var56 /* : NativeString */;
3390 long var57 /* : Int */;
3391 val* var58 /* : String */;
3392 long var59 /* : Int */;
3393 val* var60 /* : nullable Object */;
3394 static val* varonce61;
3395 val* var62 /* : String */;
3396 char* var63 /* : NativeString */;
3397 long var64 /* : Int */;
3398 val* var65 /* : String */;
3399 long var66 /* : Int */;
3400 val* var67 /* : nullable Object */;
3401 static val* varonce68;
3402 val* var69 /* : String */;
3403 char* var70 /* : NativeString */;
3404 long var71 /* : Int */;
3405 val* var72 /* : String */;
3406 val* var73 /* : Array[Object] */;
3407 long var74 /* : Int */;
3408 val* var75 /* : NativeArray[Object] */;
3409 val* var76 /* : String */;
3410 static val* varonce77;
3411 val* var78 /* : String */;
3412 char* var79 /* : NativeString */;
3413 long var80 /* : Int */;
3414 val* var81 /* : String */;
3415 short int var82 /* : Bool */;
3416 val* var83 /* : Array[Object] */;
3417 long var84 /* : Int */;
3418 val* var_85 /* var : Array[Object] */;
3419 static val* varonce86;
3420 val* var87 /* : String */;
3421 char* var88 /* : NativeString */;
3422 long var89 /* : Int */;
3423 val* var90 /* : String */;
3424 long var91 /* : Int */;
3425 val* var92 /* : nullable Object */;
3426 val* var93 /* : MType */;
3427 val* var94 /* : String */;
3428 static val* varonce95;
3429 val* var96 /* : String */;
3430 char* var97 /* : NativeString */;
3431 long var98 /* : Int */;
3432 val* var99 /* : String */;
3433 long var100 /* : Int */;
3434 val* var101 /* : nullable Object */;
3435 static val* varonce102;
3436 val* var103 /* : String */;
3437 char* var104 /* : NativeString */;
3438 long var105 /* : Int */;
3439 val* var106 /* : String */;
3440 val* var107 /* : String */;
3441 val* var_recv1 /* var recv1: String */;
3442 static val* varonce108;
3443 val* var109 /* : String */;
3444 char* var110 /* : NativeString */;
3445 long var111 /* : Int */;
3446 val* var112 /* : String */;
3447 static val* varonce113;
3448 val* var114 /* : String */;
3449 char* var115 /* : NativeString */;
3450 long var116 /* : Int */;
3451 val* var117 /* : String */;
3452 static val* varonce118;
3453 val* var119 /* : String */;
3454 char* var120 /* : NativeString */;
3455 long var121 /* : Int */;
3456 val* var122 /* : String */;
3457 long var123 /* : Int */;
3458 val* var124 /* : nullable Object */;
3459 static val* varonce125;
3460 val* var126 /* : String */;
3461 char* var127 /* : NativeString */;
3462 long var128 /* : Int */;
3463 val* var129 /* : String */;
3464 val* var130 /* : String */;
3465 static val* varonce131;
3466 val* var132 /* : String */;
3467 char* var133 /* : NativeString */;
3468 long var134 /* : Int */;
3469 val* var135 /* : String */;
3470 val* var136 /* : Array[Object] */;
3471 long var137 /* : Int */;
3472 val* var138 /* : NativeArray[Object] */;
3473 val* var139 /* : String */;
3474 var_pname = p0;
3475 var_ret_type = p1;
3476 var_arguments = p2;
3477 var = ((val* (*)(val*))(var_arguments->class->vft[COLOR_abstract_collection__Collection__first]))(var_arguments) /* first on <var_arguments:Array[RuntimeVariable]>*/;
3478 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var) /* mtype on <var:nullable Object(RuntimeVariable)>*/;
3479 var_elttype = var1;
3480 var2 = NEW_array__Array(&type_array__Arraykernel__Object);
3481 var3 = 5;
3482 ((void (*)(val*, long))(var2->class->vft[COLOR_array__Array__with_capacity]))(var2, var3) /* with_capacity on <var2:Array[Object]>*/;
3483 CHECK_NEW_array__Array(var2);
3484 var_ = var2;
3485 if (varonce) {
3486 var4 = varonce;
3487 } else {
3488 var5 = "((struct ";
3489 var6 = 9;
3490 var7 = string__NativeString__to_s_with_length(var5, var6);
3491 var4 = var7;
3492 varonce = var4;
3493 }
3494 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var4) /* add on <var_:Array[Object]>*/;
3495 var8 = 0;
3496 var9 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var8) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3497 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var9) /* mcasttype on <var9:nullable Object(RuntimeVariable)>*/;
3498 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__MType__c_name]))(var10) /* c_name on <var10:MType>*/;
3499 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var11) /* add on <var_:Array[Object]>*/;
3500 if (varonce12) {
3501 var13 = varonce12;
3502 } else {
3503 var14 = "*)";
3504 var15 = 2;
3505 var16 = string__NativeString__to_s_with_length(var14, var15);
3506 var13 = var16;
3507 varonce12 = var13;
3508 }
3509 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var13) /* add on <var_:Array[Object]>*/;
3510 var17 = 0;
3511 var18 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var17) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3512 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var18) /* add on <var_:Array[Object]>*/;
3513 if (varonce19) {
3514 var20 = varonce19;
3515 } else {
3516 var21 = ")->values";
3517 var22 = 9;
3518 var23 = string__NativeString__to_s_with_length(var21, var22);
3519 var20 = var23;
3520 varonce19 = var20;
3521 }
3522 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var20) /* add on <var_:Array[Object]>*/;
3523 var24 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
3524 var_recv = var24;
3525 if (varonce25) {
3526 var26 = varonce25;
3527 } else {
3528 var27 = "[]";
3529 var28 = 2;
3530 var29 = string__NativeString__to_s_with_length(var27, var28);
3531 var26 = var29;
3532 varonce25 = var26;
3533 }
3534 var30 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var26) /* == on <var_pname:String>*/;
3535 if (var30){
3536 if (varonce31) {
3537 var32 = varonce31;
3538 } else {
3539 var33 = "[";
3540 var34 = 1;
3541 var35 = string__NativeString__to_s_with_length(var33, var34);
3542 var32 = var35;
3543 varonce31 = var32;
3544 }
3545 var36 = 1;
3546 var37 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var36) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3547 if (varonce38) {
3548 var39 = varonce38;
3549 } else {
3550 var40 = "]";
3551 var41 = 1;
3552 var42 = string__NativeString__to_s_with_length(var40, var41);
3553 var39 = var42;
3554 varonce38 = var39;
3555 }
3556 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
3557 { /* var43 = array_instance Array[Object] */
3558 var44 = 4;
3559 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
3560 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_recv;
3561 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var32;
3562 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var37;
3563 ((struct instance_array__NativeArray*)var45)->values[3] = (val*) var39;
3564 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
3565 CHECK_NEW_array__Array(var43);
3566 }
3567 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
3568 if (var_ret_type == NULL) {
3569 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 324);
3570 exit(1);
3571 }
3572 var47 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var46, var_ret_type) /* new_expr on <self:GlobalCompilerVisitor>*/;
3573 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var47) /* ret on <self:GlobalCompilerVisitor>*/;
3574 goto RET_LABEL;
3575 } else {
3576 if (varonce48) {
3577 var49 = varonce48;
3578 } else {
3579 var50 = "[]=";
3580 var51 = 3;
3581 var52 = string__NativeString__to_s_with_length(var50, var51);
3582 var49 = var52;
3583 varonce48 = var49;
3584 }
3585 var53 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var49) /* == on <var_pname:String>*/;
3586 if (var53){
3587 if (varonce54) {
3588 var55 = varonce54;
3589 } else {
3590 var56 = "[";
3591 var57 = 1;
3592 var58 = string__NativeString__to_s_with_length(var56, var57);
3593 var55 = var58;
3594 varonce54 = var55;
3595 }
3596 var59 = 1;
3597 var60 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var59) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3598 if (varonce61) {
3599 var62 = varonce61;
3600 } else {
3601 var63 = "]=";
3602 var64 = 2;
3603 var65 = string__NativeString__to_s_with_length(var63, var64);
3604 var62 = var65;
3605 varonce61 = var62;
3606 }
3607 var66 = 2;
3608 var67 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var66) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3609 if (varonce68) {
3610 var69 = varonce68;
3611 } else {
3612 var70 = ";";
3613 var71 = 1;
3614 var72 = string__NativeString__to_s_with_length(var70, var71);
3615 var69 = var72;
3616 varonce68 = var69;
3617 }
3618 var73 = NEW_array__Array(&type_array__Arraykernel__Object);
3619 { /* var73 = array_instance Array[Object] */
3620 var74 = 6;
3621 var75 = NEW_array__NativeArray(var74, &type_array__NativeArraykernel__Object);
3622 ((struct instance_array__NativeArray*)var75)->values[0] = (val*) var_recv;
3623 ((struct instance_array__NativeArray*)var75)->values[1] = (val*) var55;
3624 ((struct instance_array__NativeArray*)var75)->values[2] = (val*) var60;
3625 ((struct instance_array__NativeArray*)var75)->values[3] = (val*) var62;
3626 ((struct instance_array__NativeArray*)var75)->values[4] = (val*) var67;
3627 ((struct instance_array__NativeArray*)var75)->values[5] = (val*) var69;
3628 ((void (*)(val*, val*, long))(var73->class->vft[COLOR_array__Array__with_native]))(var73, var75, var74) /* with_native on <var73:Array[Object]>*/;
3629 CHECK_NEW_array__Array(var73);
3630 }
3631 var76 = ((val* (*)(val*))(var73->class->vft[COLOR_string__Object__to_s]))(var73) /* to_s on <var73:Array[Object]>*/;
3632 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var76) /* add on <self:GlobalCompilerVisitor>*/;
3633 goto RET_LABEL;
3634 } else {
3635 if (varonce77) {
3636 var78 = varonce77;
3637 } else {
3638 var79 = "copy_to";
3639 var80 = 7;
3640 var81 = string__NativeString__to_s_with_length(var79, var80);
3641 var78 = var81;
3642 varonce77 = var78;
3643 }
3644 var82 = ((short int (*)(val*, val*))(var_pname->class->vft[COLOR_kernel__Object___61d_61d]))(var_pname, var78) /* == on <var_pname:String>*/;
3645 if (var82){
3646 var83 = NEW_array__Array(&type_array__Arraykernel__Object);
3647 var84 = 5;
3648 ((void (*)(val*, long))(var83->class->vft[COLOR_array__Array__with_capacity]))(var83, var84) /* with_capacity on <var83:Array[Object]>*/;
3649 CHECK_NEW_array__Array(var83);
3650 var_85 = var83;
3651 if (varonce86) {
3652 var87 = varonce86;
3653 } else {
3654 var88 = "((struct ";
3655 var89 = 9;
3656 var90 = string__NativeString__to_s_with_length(var88, var89);
3657 var87 = var90;
3658 varonce86 = var87;
3659 }
3660 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var87) /* add on <var_85:Array[Object]>*/;
3661 var91 = 1;
3662 var92 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var91) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3663 var93 = ((val* (*)(val*))(var92->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var92) /* mcasttype on <var92:nullable Object(RuntimeVariable)>*/;
3664 var94 = ((val* (*)(val*))(var93->class->vft[COLOR_abstract_compiler__MType__c_name]))(var93) /* c_name on <var93:MType>*/;
3665 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var94) /* add on <var_85:Array[Object]>*/;
3666 if (varonce95) {
3667 var96 = varonce95;
3668 } else {
3669 var97 = "*)";
3670 var98 = 2;
3671 var99 = string__NativeString__to_s_with_length(var97, var98);
3672 var96 = var99;
3673 varonce95 = var96;
3674 }
3675 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var96) /* add on <var_85:Array[Object]>*/;
3676 var100 = 1;
3677 var101 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var100) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3678 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var101) /* add on <var_85:Array[Object]>*/;
3679 if (varonce102) {
3680 var103 = varonce102;
3681 } else {
3682 var104 = ")->values";
3683 var105 = 9;
3684 var106 = string__NativeString__to_s_with_length(var104, var105);
3685 var103 = var106;
3686 varonce102 = var103;
3687 }
3688 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var103) /* add on <var_85:Array[Object]>*/;
3689 var107 = ((val* (*)(val*))(var_85->class->vft[COLOR_string__Object__to_s]))(var_85) /* to_s on <var_85:Array[Object]>*/;
3690 var_recv1 = var107;
3691 if (varonce108) {
3692 var109 = varonce108;
3693 } else {
3694 var110 = "memcpy(";
3695 var111 = 7;
3696 var112 = string__NativeString__to_s_with_length(var110, var111);
3697 var109 = var112;
3698 varonce108 = var109;
3699 }
3700 if (varonce113) {
3701 var114 = varonce113;
3702 } else {
3703 var115 = ",";
3704 var116 = 1;
3705 var117 = string__NativeString__to_s_with_length(var115, var116);
3706 var114 = var117;
3707 varonce113 = var114;
3708 }
3709 if (varonce118) {
3710 var119 = varonce118;
3711 } else {
3712 var120 = ",";
3713 var121 = 1;
3714 var122 = string__NativeString__to_s_with_length(var120, var121);
3715 var119 = var122;
3716 varonce118 = var119;
3717 }
3718 var123 = 2;
3719 var124 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var123) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3720 if (varonce125) {
3721 var126 = varonce125;
3722 } else {
3723 var127 = "*sizeof(";
3724 var128 = 8;
3725 var129 = string__NativeString__to_s_with_length(var127, var128);
3726 var126 = var129;
3727 varonce125 = var126;
3728 }
3729 var130 = ((val* (*)(val*))(var_elttype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_elttype) /* ctype on <var_elttype:MType>*/;
3730 if (varonce131) {
3731 var132 = varonce131;
3732 } else {
3733 var133 = "));";
3734 var134 = 3;
3735 var135 = string__NativeString__to_s_with_length(var133, var134);
3736 var132 = var135;
3737 varonce131 = var132;
3738 }
3739 var136 = NEW_array__Array(&type_array__Arraykernel__Object);
3740 { /* var136 = array_instance Array[Object] */
3741 var137 = 9;
3742 var138 = NEW_array__NativeArray(var137, &type_array__NativeArraykernel__Object);
3743 ((struct instance_array__NativeArray*)var138)->values[0] = (val*) var109;
3744 ((struct instance_array__NativeArray*)var138)->values[1] = (val*) var_recv1;
3745 ((struct instance_array__NativeArray*)var138)->values[2] = (val*) var114;
3746 ((struct instance_array__NativeArray*)var138)->values[3] = (val*) var_recv;
3747 ((struct instance_array__NativeArray*)var138)->values[4] = (val*) var119;
3748 ((struct instance_array__NativeArray*)var138)->values[5] = (val*) var124;
3749 ((struct instance_array__NativeArray*)var138)->values[6] = (val*) var126;
3750 ((struct instance_array__NativeArray*)var138)->values[7] = (val*) var130;
3751 ((struct instance_array__NativeArray*)var138)->values[8] = (val*) var132;
3752 ((void (*)(val*, val*, long))(var136->class->vft[COLOR_array__Array__with_native]))(var136, var138, var137) /* with_native on <var136:Array[Object]>*/;
3753 CHECK_NEW_array__Array(var136);
3754 }
3755 var139 = ((val* (*)(val*))(var136->class->vft[COLOR_string__Object__to_s]))(var136) /* to_s on <var136:Array[Object]>*/;
3756 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var139) /* add on <self:GlobalCompilerVisitor>*/;
3757 goto RET_LABEL;
3758 } else {
3759 }
3760 }
3761 }
3762 RET_LABEL:;
3763 }
3764 /* method global_compiler#GlobalCompilerVisitor#native_array_def for (self: Object, String, nullable MType, Array[RuntimeVariable]) */
3765 void VIRTUAL_global_compiler__GlobalCompilerVisitor__native_array_def(val* self, val* p0, val* p1, val* p2) {
3766 global_compiler__GlobalCompilerVisitor__native_array_def(self, p0, p1, p2);
3767 RET_LABEL:;
3768 }
3769 /* method global_compiler#GlobalCompilerVisitor#calloc_array for (self: GlobalCompilerVisitor, MType, Array[RuntimeVariable]) */
3770 void global_compiler__GlobalCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
3771 val* var_ret_type /* var ret_type: MType */;
3772 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
3773 static val* varonce;
3774 val* var /* : String */;
3775 char* var1 /* : NativeString */;
3776 long var2 /* : Int */;
3777 val* var3 /* : String */;
3778 val* var4 /* : String */;
3779 static val* varonce5;
3780 val* var6 /* : String */;
3781 char* var7 /* : NativeString */;
3782 long var8 /* : Int */;
3783 val* var9 /* : String */;
3784 long var10 /* : Int */;
3785 val* var11 /* : nullable Object */;
3786 static val* varonce12;
3787 val* var13 /* : String */;
3788 char* var14 /* : NativeString */;
3789 long var15 /* : Int */;
3790 val* var16 /* : String */;
3791 val* var17 /* : Array[Object] */;
3792 long var18 /* : Int */;
3793 val* var19 /* : NativeArray[Object] */;
3794 val* var20 /* : String */;
3795 val* var21 /* : RuntimeVariable */;
3796 var_ret_type = p0;
3797 var_arguments = p1;
3798 if (varonce) {
3799 var = varonce;
3800 } else {
3801 var1 = "NEW_";
3802 var2 = 4;
3803 var3 = string__NativeString__to_s_with_length(var1, var2);
3804 var = var3;
3805 varonce = var;
3806 }
3807 var4 = ((val* (*)(val*))(var_ret_type->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_ret_type) /* c_name on <var_ret_type:MType>*/;
3808 if (varonce5) {
3809 var6 = varonce5;
3810 } else {
3811 var7 = "(";
3812 var8 = 1;
3813 var9 = string__NativeString__to_s_with_length(var7, var8);
3814 var6 = var9;
3815 varonce5 = var6;
3816 }
3817 var10 = 1;
3818 var11 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var10) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
3819 if (varonce12) {
3820 var13 = varonce12;
3821 } else {
3822 var14 = ")";
3823 var15 = 1;
3824 var16 = string__NativeString__to_s_with_length(var14, var15);
3825 var13 = var16;
3826 varonce12 = var13;
3827 }
3828 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
3829 { /* var17 = array_instance Array[Object] */
3830 var18 = 5;
3831 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
3832 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var;
3833 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var4;
3834 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var6;
3835 ((struct instance_array__NativeArray*)var19)->values[3] = (val*) var11;
3836 ((struct instance_array__NativeArray*)var19)->values[4] = (val*) var13;
3837 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
3838 CHECK_NEW_array__Array(var17);
3839 }
3840 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
3841 var21 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var20, var_ret_type) /* new_expr on <self:GlobalCompilerVisitor>*/;
3842 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var21) /* ret on <self:GlobalCompilerVisitor>*/;
3843 RET_LABEL:;
3844 }
3845 /* method global_compiler#GlobalCompilerVisitor#calloc_array for (self: Object, MType, Array[RuntimeVariable]) */
3846 void VIRTUAL_global_compiler__GlobalCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
3847 global_compiler__GlobalCompilerVisitor__calloc_array(self, p0, p1);
3848 RET_LABEL:;
3849 }
3850 /* method global_compiler#GlobalCompilerVisitor#send for (self: GlobalCompilerVisitor, MMethod, Array[RuntimeVariable]): nullable RuntimeVariable */
3851 val* global_compiler__GlobalCompilerVisitor__send(val* self, val* p0, val* p1) {
3852 val* var /* : nullable RuntimeVariable */;
3853 val* var_m /* var m: MMethod */;
3854 val* var_args /* var args: Array[RuntimeVariable] */;
3855 val* var1 /* : nullable Object */;
3856 val* var2 /* : Array[MClassType] */;
3857 val* var_types /* var types: Array[MClassType] */;
3858 val* var3 /* : MPropDef */;
3859 val* var4 /* : nullable MSignature */;
3860 val* var5 /* : nullable MType */;
3861 val* var_ret /* var ret: nullable MType */;
3862 short int var6 /* : Bool */;
3863 val* var7 /* : nullable Object */;
3864 val* var8 /* : MType */;
3865 val* var9 /* : RuntimeVariable */;
3866 val* var_res /* var res: nullable RuntimeVariable */;
3867 val* var10 /* : null */;
3868 short int var11 /* : Bool */;
3869 val* var12 /* : null */;
3870 val* var13 /* : nullable Object */;
3871 val* var14 /* : MType */;
3872 val* var15 /* : RuntimeVariable */;
3873 static val* varonce;
3874 val* var16 /* : String */;
3875 char* var17 /* : NativeString */;
3876 long var18 /* : Int */;
3877 val* var19 /* : String */;
3878 static val* varonce20;
3879 val* var21 /* : String */;
3880 char* var22 /* : NativeString */;
3881 long var23 /* : Int */;
3882 val* var24 /* : String */;
3883 val* var25 /* : nullable Object */;
3884 val* var26 /* : String */;
3885 static val* varonce27;
3886 val* var28 /* : String */;
3887 char* var29 /* : NativeString */;
3888 long var30 /* : Int */;
3889 val* var31 /* : String */;
3890 val* var32 /* : Array[Object] */;
3891 long var33 /* : Int */;
3892 val* var34 /* : NativeArray[Object] */;
3893 val* var35 /* : String */;
3894 val* var36 /* : nullable Object */;
3895 val* var37 /* : MType */;
3896 val* var38 /* : String */;
3897 static val* varonce39;
3898 val* var40 /* : String */;
3899 char* var41 /* : NativeString */;
3900 long var42 /* : Int */;
3901 val* var43 /* : String */;
3902 short int var44 /* : Bool */;
3903 val* var45 /* : nullable Object */;
3904 val* var46 /* : MType */;
3905 short int var47 /* : Bool */;
3906 int cltype;
3907 int idtype;
3908 val* var_mclasstype /* var mclasstype: MClassType */;
3909 val* var48 /* : AbstractCompiler */;
3910 val* var49 /* : RapidTypeAnalysis */;
3911 val* var50 /* : HashSet[MClassType] */;
3912 short int var51 /* : Bool */;
3913 short int var52 /* : Bool */;
3914 static val* varonce53;
3915 val* var54 /* : String */;
3916 char* var55 /* : NativeString */;
3917 long var56 /* : Int */;
3918 val* var57 /* : String */;
3919 static val* varonce58;
3920 val* var59 /* : String */;
3921 char* var60 /* : NativeString */;
3922 long var61 /* : Int */;
3923 val* var62 /* : String */;
3924 val* var63 /* : Array[Object] */;
3925 long var64 /* : Int */;
3926 val* var65 /* : NativeArray[Object] */;
3927 val* var66 /* : String */;
3928 val* var67 /* : AbstractCompiler */;
3929 val* var68 /* : MModule */;
3930 val* var69 /* : MPropDef */;
3931 val* var_propdef /* var propdef: MMethodDef */;
3932 val* var70 /* : nullable RuntimeVariable */;
3933 val* var_res2 /* var res2: nullable RuntimeVariable */;
3934 val* var71 /* : null */;
3935 short int var72 /* : Bool */;
3936 short int var73 /* : Bool */;
3937 short int var74 /* : Bool */;
3938 val* var75 /* : AbstractCompiler */;
3939 val* var76 /* : ModelBuilder */;
3940 val* var77 /* : ToolContext */;
3941 val* var78 /* : OptionBool */;
3942 val* var79 /* : nullable Object */;
3943 short int var80 /* : Bool */;
3944 short int var81 /* : Bool */;
3945 short int var_ /* var : Bool */;
3946 val* var82 /* : String */;
3947 static val* varonce83;
3948 val* var84 /* : String */;
3949 char* var85 /* : NativeString */;
3950 long var86 /* : Int */;
3951 val* var87 /* : String */;
3952 short int var88 /* : Bool */;
3953 short int var_89 /* var : Bool */;
3954 val* var90 /* : String */;
3955 static val* varonce91;
3956 val* var92 /* : String */;
3957 char* var93 /* : NativeString */;
3958 long var94 /* : Int */;
3959 val* var95 /* : String */;
3960 short int var96 /* : Bool */;
3961 short int var_consider_null /* var consider_null: Bool */;
3962 short int var97 /* : Bool */;
3963 short int var98 /* : Bool */;
3964 val* var99 /* : nullable Object */;
3965 val* var100 /* : MType */;
3966 short int var101 /* : Bool */;
3967 int cltype102;
3968 int idtype103;
3969 short int var_104 /* var : Bool */;
3970 val* var105 /* : nullable Object */;
3971 val* var106 /* : MType */;
3972 short int var107 /* : Bool */;
3973 int cltype108;
3974 int idtype109;
3975 short int var_110 /* var : Bool */;
3976 static val* varonce111;
3977 val* var112 /* : String */;
3978 char* var113 /* : NativeString */;
3979 long var114 /* : Int */;
3980 val* var115 /* : String */;
3981 val* var116 /* : nullable Object */;
3982 static val* varonce117;
3983 val* var118 /* : String */;
3984 char* var119 /* : NativeString */;
3985 long var120 /* : Int */;
3986 val* var121 /* : String */;
3987 val* var122 /* : Array[Object] */;
3988 long var123 /* : Int */;
3989 val* var124 /* : NativeArray[Object] */;
3990 val* var125 /* : String */;
3991 val* var126 /* : String */;
3992 static val* varonce127;
3993 val* var128 /* : String */;
3994 char* var129 /* : NativeString */;
3995 long var130 /* : Int */;
3996 val* var131 /* : String */;
3997 short int var132 /* : Bool */;
3998 val* var133 /* : null */;
3999 short int var134 /* : Bool */;
4000 long var135 /* : Int */;
4001 val* var136 /* : nullable Object */;
4002 val* var137 /* : MType */;
4003 short int var138 /* : Bool */;
4004 int cltype139;
4005 int idtype140;
4006 static val* varonce141;
4007 val* var142 /* : String */;
4008 char* var143 /* : NativeString */;
4009 long var144 /* : Int */;
4010 val* var145 /* : String */;
4011 long var146 /* : Int */;
4012 val* var147 /* : nullable Object */;
4013 static val* varonce148;
4014 val* var149 /* : String */;
4015 char* var150 /* : NativeString */;
4016 long var151 /* : Int */;
4017 val* var152 /* : String */;
4018 val* var153 /* : Array[Object] */;
4019 long var154 /* : Int */;
4020 val* var155 /* : NativeArray[Object] */;
4021 val* var156 /* : String */;
4022 long var157 /* : Int */;
4023 val* var158 /* : nullable Object */;
4024 val* var159 /* : MType */;
4025 short int var160 /* : Bool */;
4026 int cltype161;
4027 int idtype162;
4028 static val* varonce163;
4029 val* var164 /* : String */;
4030 char* var165 /* : NativeString */;
4031 long var166 /* : Int */;
4032 val* var167 /* : String */;
4033 val* var168 /* : Array[Object] */;
4034 long var169 /* : Int */;
4035 val* var170 /* : NativeArray[Object] */;
4036 val* var171 /* : String */;
4037 static val* varonce172;
4038 val* var173 /* : String */;
4039 char* var174 /* : NativeString */;
4040 long var175 /* : Int */;
4041 val* var176 /* : String */;
4042 long var177 /* : Int */;
4043 val* var178 /* : nullable Object */;
4044 val* var179 /* : String */;
4045 static val* varonce180;
4046 val* var181 /* : String */;
4047 char* var182 /* : NativeString */;
4048 long var183 /* : Int */;
4049 val* var184 /* : String */;
4050 val* var185 /* : Array[Object] */;
4051 long var186 /* : Int */;
4052 val* var187 /* : NativeArray[Object] */;
4053 val* var188 /* : String */;
4054 val* var189 /* : String */;
4055 static val* varonce190;
4056 val* var191 /* : String */;
4057 char* var192 /* : NativeString */;
4058 long var193 /* : Int */;
4059 val* var194 /* : String */;
4060 short int var195 /* : Bool */;
4061 val* var196 /* : null */;
4062 short int var197 /* : Bool */;
4063 long var198 /* : Int */;
4064 val* var199 /* : nullable Object */;
4065 val* var200 /* : MType */;
4066 short int var201 /* : Bool */;
4067 int cltype202;
4068 int idtype203;
4069 static val* varonce204;
4070 val* var205 /* : String */;
4071 char* var206 /* : NativeString */;
4072 long var207 /* : Int */;
4073 val* var208 /* : String */;
4074 long var209 /* : Int */;
4075 val* var210 /* : nullable Object */;
4076 static val* varonce211;
4077 val* var212 /* : String */;
4078 char* var213 /* : NativeString */;
4079 long var214 /* : Int */;
4080 val* var215 /* : String */;
4081 val* var216 /* : Array[Object] */;
4082 long var217 /* : Int */;
4083 val* var218 /* : NativeArray[Object] */;
4084 val* var219 /* : String */;
4085 long var220 /* : Int */;
4086 val* var221 /* : nullable Object */;
4087 val* var222 /* : MType */;
4088 short int var223 /* : Bool */;
4089 int cltype224;
4090 int idtype225;
4091 static val* varonce226;
4092 val* var227 /* : String */;
4093 char* var228 /* : NativeString */;
4094 long var229 /* : Int */;
4095 val* var230 /* : String */;
4096 val* var231 /* : Array[Object] */;
4097 long var232 /* : Int */;
4098 val* var233 /* : NativeArray[Object] */;
4099 val* var234 /* : String */;
4100 static val* varonce235;
4101 val* var236 /* : String */;
4102 char* var237 /* : NativeString */;
4103 long var238 /* : Int */;
4104 val* var239 /* : String */;
4105 long var240 /* : Int */;
4106 val* var241 /* : nullable Object */;
4107 val* var242 /* : String */;
4108 static val* varonce243;
4109 val* var244 /* : String */;
4110 char* var245 /* : NativeString */;
4111 long var246 /* : Int */;
4112 val* var247 /* : String */;
4113 val* var248 /* : Array[Object] */;
4114 long var249 /* : Int */;
4115 val* var250 /* : NativeArray[Object] */;
4116 val* var251 /* : String */;
4117 static val* varonce252;
4118 val* var253 /* : String */;
4119 char* var254 /* : NativeString */;
4120 long var255 /* : Int */;
4121 val* var256 /* : String */;
4122 static val* varonce257;
4123 val* var258 /* : String */;
4124 char* var259 /* : NativeString */;
4125 long var260 /* : Int */;
4126 val* var261 /* : String */;
4127 short int var262 /* : Bool */;
4128 static val* varonce263;
4129 val* var264 /* : String */;
4130 char* var265 /* : NativeString */;
4131 long var266 /* : Int */;
4132 val* var267 /* : String */;
4133 static val* varonce268;
4134 val* var269 /* : String */;
4135 char* var270 /* : NativeString */;
4136 long var271 /* : Int */;
4137 val* var272 /* : String */;
4138 val* var273 /* : nullable Object */;
4139 val* var274 /* : String */;
4140 static val* varonce275;
4141 val* var276 /* : String */;
4142 char* var277 /* : NativeString */;
4143 long var278 /* : Int */;
4144 val* var279 /* : String */;
4145 static val* varonce280;
4146 val* var281 /* : String */;
4147 char* var282 /* : NativeString */;
4148 long var283 /* : Int */;
4149 val* var284 /* : String */;
4150 val* var285 /* : Array[Object] */;
4151 long var286 /* : Int */;
4152 val* var287 /* : NativeArray[Object] */;
4153 val* var288 /* : String */;
4154 val* var289 /* : nullable Object */;
4155 static val* varonce290;
4156 val* var291 /* : String */;
4157 char* var292 /* : NativeString */;
4158 long var293 /* : Int */;
4159 val* var294 /* : String */;
4160 static val* varonce295;
4161 val* var296 /* : String */;
4162 char* var297 /* : NativeString */;
4163 long var298 /* : Int */;
4164 val* var299 /* : String */;
4165 val* var300 /* : nullable Object */;
4166 static val* varonce301;
4167 val* var302 /* : String */;
4168 char* var303 /* : NativeString */;
4169 long var304 /* : Int */;
4170 val* var305 /* : String */;
4171 val* var306 /* : Array[Object] */;
4172 long var307 /* : Int */;
4173 val* var308 /* : NativeArray[Object] */;
4174 val* var309 /* : String */;
4175 val* var310 /* : nullable Object */;
4176 val* var_last /* var last: MClassType */;
4177 val* var311 /* : null */;
4178 val* var_defaultpropdef /* var defaultpropdef: nullable MMethodDef */;
4179 val* var312 /* : Iterator[nullable Object] */;
4180 short int var313 /* : Bool */;
4181 val* var314 /* : nullable Object */;
4182 val* var_t /* var t: MClassType */;
4183 val* var315 /* : AbstractCompiler */;
4184 val* var316 /* : MModule */;
4185 val* var317 /* : MPropDef */;
4186 val* var_propdef318 /* var propdef: MMethodDef */;
4187 short int var319 /* : Bool */;
4188 val* var320 /* : MClassDef */;
4189 val* var321 /* : MClass */;
4190 val* var322 /* : String */;
4191 static val* varonce323;
4192 val* var324 /* : String */;
4193 char* var325 /* : NativeString */;
4194 long var326 /* : Int */;
4195 val* var327 /* : String */;
4196 short int var328 /* : Bool */;
4197 short int var_329 /* var : Bool */;
4198 val* var330 /* : String */;
4199 static val* varonce331;
4200 val* var332 /* : String */;
4201 char* var333 /* : NativeString */;
4202 long var334 /* : Int */;
4203 val* var335 /* : String */;
4204 short int var336 /* : Bool */;
4205 short int var337 /* : Bool */;
4206 short int var338 /* : Bool */;
4207 val* var339 /* : AbstractCompiler */;
4208 short int var340 /* : Bool */;
4209 short int var341 /* : Bool */;
4210 short int var_342 /* var : Bool */;
4211 short int var343 /* : Bool */;
4212 short int var_344 /* var : Bool */;
4213 val* var345 /* : null */;
4214 short int var346 /* : Bool */;
4215 static val* varonce347;
4216 val* var348 /* : String */;
4217 char* var349 /* : NativeString */;
4218 long var350 /* : Int */;
4219 val* var351 /* : String */;
4220 static val* varonce352;
4221 val* var353 /* : String */;
4222 char* var354 /* : NativeString */;
4223 long var355 /* : Int */;
4224 val* var356 /* : String */;
4225 val* var357 /* : Array[Object] */;
4226 long var358 /* : Int */;
4227 val* var359 /* : NativeArray[Object] */;
4228 val* var360 /* : String */;
4229 static val* varonce361;
4230 val* var362 /* : String */;
4231 char* var363 /* : NativeString */;
4232 long var364 /* : Int */;
4233 val* var365 /* : String */;
4234 val* var366 /* : AbstractCompiler */;
4235 val* var367 /* : String */;
4236 static val* varonce368;
4237 val* var369 /* : String */;
4238 char* var370 /* : NativeString */;
4239 long var371 /* : Int */;
4240 val* var372 /* : String */;
4241 static val* varonce373;
4242 val* var374 /* : String */;
4243 char* var375 /* : NativeString */;
4244 long var376 /* : Int */;
4245 val* var377 /* : String */;
4246 val* var378 /* : Array[Object] */;
4247 long var379 /* : Int */;
4248 val* var380 /* : NativeArray[Object] */;
4249 val* var381 /* : String */;
4250 val* var382 /* : nullable RuntimeVariable */;
4251 val* var_res2383 /* var res2: nullable RuntimeVariable */;
4252 val* var384 /* : null */;
4253 short int var385 /* : Bool */;
4254 static val* varonce386;
4255 val* var387 /* : String */;
4256 char* var388 /* : NativeString */;
4257 long var389 /* : Int */;
4258 val* var390 /* : String */;
4259 val* var391 /* : null */;
4260 short int var392 /* : Bool */;
4261 static val* varonce393;
4262 val* var394 /* : String */;
4263 char* var395 /* : NativeString */;
4264 long var396 /* : Int */;
4265 val* var397 /* : String */;
4266 val* var398 /* : MClassDef */;
4267 val* var399 /* : MClassType */;
4268 val* var400 /* : nullable RuntimeVariable */;
4269 val* var_res2401 /* var res2: nullable RuntimeVariable */;
4270 val* var402 /* : null */;
4271 short int var403 /* : Bool */;
4272 val* var404 /* : AbstractCompiler */;
4273 short int var405 /* : Bool */;
4274 static val* varonce406;
4275 val* var407 /* : String */;
4276 char* var408 /* : NativeString */;
4277 long var409 /* : Int */;
4278 val* var410 /* : String */;
4279 val* var411 /* : nullable Object */;
4280 static val* varonce412;
4281 val* var413 /* : String */;
4282 char* var414 /* : NativeString */;
4283 long var415 /* : Int */;
4284 val* var416 /* : String */;
4285 var_m = p0;
4286 var_args = p1;
4287 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4288 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var1) /* collect_types on <self:GlobalCompilerVisitor>*/;
4289 var_types = var2;
4290 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__intro]))(var_m) /* intro on <var_m:MMethod>*/;
4291 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MMethodDef__msignature]))(var3) /* msignature on <var3:MPropDef(MMethodDef)>*/;
4292 if (var4 == NULL) {
4293 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/global_compiler.nit", 346);
4294 exit(1);
4295 } else {
4296 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_model__MSignature__return_mtype]))(var4) /* return_mtype on <var4:nullable MSignature>*/;
4297 }
4298 var_ret = var5;
4299 var6 = ((short int (*)(val*))(var_m->class->vft[COLOR_model__MMethod__is_new]))(var_m) /* is_new on <var_m:MMethod>*/;
4300 if (var6){
4301 var7 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4302 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var7) /* mtype on <var7:nullable Object(RuntimeVariable)>*/;
4303 var_ret = var8;
4304 var9 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
4305 var_res = var9;
4306 } else {
4307 var10 = NULL;
4308 if (var_ret == NULL) {
4309 var11 = 1; /* is null */
4310 } else {
4311 var11 = 0; /* arg is null but recv is not */
4312 }
4313 if (var11){
4314 var12 = NULL;
4315 var_res = var12;
4316 } else {
4317 var13 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4318 var14 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var13) /* resolve_for on <self:GlobalCompilerVisitor>*/;
4319 var_ret = var14;
4320 var15 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
4321 var_res = var15;
4322 }
4323 }
4324 if (varonce) {
4325 var16 = varonce;
4326 } else {
4327 var17 = "/* send ";
4328 var18 = 8;
4329 var19 = string__NativeString__to_s_with_length(var17, var18);
4330 var16 = var19;
4331 varonce = var16;
4332 }
4333 if (varonce20) {
4334 var21 = varonce20;
4335 } else {
4336 var22 = " on ";
4337 var23 = 4;
4338 var24 = string__NativeString__to_s_with_length(var22, var23);
4339 var21 = var24;
4340 varonce20 = var21;
4341 }
4342 var25 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4343 var26 = ((val* (*)(val*))(var25->class->vft[COLOR_string__Object__inspect]))(var25) /* inspect on <var25:nullable Object(RuntimeVariable)>*/;
4344 if (varonce27) {
4345 var28 = varonce27;
4346 } else {
4347 var29 = " */";
4348 var30 = 3;
4349 var31 = string__NativeString__to_s_with_length(var29, var30);
4350 var28 = var31;
4351 varonce27 = var28;
4352 }
4353 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
4354 { /* var32 = array_instance Array[Object] */
4355 var33 = 5;
4356 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
4357 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var16;
4358 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_m;
4359 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var21;
4360 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var26;
4361 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
4362 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
4363 CHECK_NEW_array__Array(var32);
4364 }
4365 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
4366 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var35) /* add on <self:GlobalCompilerVisitor>*/;
4367 var36 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4368 var37 = ((val* (*)(val*))(var36->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var36) /* mtype on <var36:nullable Object(RuntimeVariable)>*/;
4369 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_compiler__MType__ctype]))(var37) /* ctype on <var37:MType>*/;
4370 if (varonce39) {
4371 var40 = varonce39;
4372 } else {
4373 var41 = "val*";
4374 var42 = 4;
4375 var43 = string__NativeString__to_s_with_length(var41, var42);
4376 var40 = var43;
4377 varonce39 = var40;
4378 }
4379 var44 = ((short int (*)(val*, val*))(var38->class->vft[COLOR_kernel__Object___33d_61d]))(var38, var40) /* != on <var38:String>*/;
4380 if (var44){
4381 var45 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4382 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var45) /* mtype on <var45:nullable Object(RuntimeVariable)>*/;
4383 /* <var46:MType> isa MClassType */
4384 cltype = type_model__MClassType.color;
4385 idtype = type_model__MClassType.id;
4386 if(cltype >= var46->type->table_size) {
4387 var47 = 0;
4388 } else {
4389 var47 = var46->type->type_table[cltype] == idtype;
4390 }
4391 if (!var47) {
4392 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 359);
4393 exit(1);
4394 }
4395 var_mclasstype = var46;
4396 var48 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4397 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var48) /* runtime_type_analysis on <var48:AbstractCompiler(GlobalCompiler)>*/;
4398 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var49) /* live_types on <var49:RapidTypeAnalysis>*/;
4399 var51 = ((short int (*)(val*, val*))(var50->class->vft[COLOR_abstract_collection__Collection__has]))(var50, var_mclasstype) /* has on <var50:HashSet[MClassType]>*/;
4400 var52 = !var51;
4401 if (var52){
4402 if (varonce53) {
4403 var54 = varonce53;
4404 } else {
4405 var55 = "/* skip, no method ";
4406 var56 = 19;
4407 var57 = string__NativeString__to_s_with_length(var55, var56);
4408 var54 = var57;
4409 varonce53 = var54;
4410 }
4411 if (varonce58) {
4412 var59 = varonce58;
4413 } else {
4414 var60 = " */";
4415 var61 = 3;
4416 var62 = string__NativeString__to_s_with_length(var60, var61);
4417 var59 = var62;
4418 varonce58 = var59;
4419 }
4420 var63 = NEW_array__Array(&type_array__Arraykernel__Object);
4421 { /* var63 = array_instance Array[Object] */
4422 var64 = 3;
4423 var65 = NEW_array__NativeArray(var64, &type_array__NativeArraykernel__Object);
4424 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var54;
4425 ((struct instance_array__NativeArray*)var65)->values[1] = (val*) var_m;
4426 ((struct instance_array__NativeArray*)var65)->values[2] = (val*) var59;
4427 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Object]>*/;
4428 CHECK_NEW_array__Array(var63);
4429 }
4430 var66 = ((val* (*)(val*))(var63->class->vft[COLOR_string__Object__to_s]))(var63) /* to_s on <var63:Array[Object]>*/;
4431 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var66) /* add on <self:GlobalCompilerVisitor>*/;
4432 var = var_res;
4433 goto RET_LABEL;
4434 } else {
4435 }
4436 var67 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4437 var68 = ((val* (*)(val*))(var67->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var67) /* mainmodule on <var67:AbstractCompiler(GlobalCompiler)>*/;
4438 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>*/;
4439 var_propdef = var69;
4440 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>*/;
4441 var_res2 = var70;
4442 var71 = NULL;
4443 if (var_res == NULL) {
4444 var72 = 0; /* is null */
4445 } else {
4446 var72 = 1; /* arg is null and recv is not */
4447 }
4448 if (var72){
4449 if (var_res2 == NULL) {
4450 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 366);
4451 exit(1);
4452 }
4453 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
4454 } else {
4455 }
4456 var = var_res;
4457 goto RET_LABEL;
4458 } else {
4459 }
4460 var75 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4461 var76 = ((val* (*)(val*))(var75->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var75) /* modelbuilder on <var75:AbstractCompiler(GlobalCompiler)>*/;
4462 var77 = ((val* (*)(val*))(var76->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var76) /* toolcontext on <var76:ModelBuilder>*/;
4463 var78 = ((val* (*)(val*))(var77->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_other]))(var77) /* opt_no_check_other on <var77:ToolContext>*/;
4464 var79 = ((val* (*)(val*))(var78->class->vft[COLOR_opts__Option__value]))(var78) /* value on <var78:OptionBool>*/;
4465 var80 = ((struct instance_kernel__Bool*)var79)->value; /* autounbox from nullable Object to Bool */;
4466 var81 = !var80;
4467 var_ = var81;
4468 if (var81){
4469 var74 = var_;
4470 } else {
4471 var82 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4472 if (varonce83) {
4473 var84 = varonce83;
4474 } else {
4475 var85 = "==";
4476 var86 = 2;
4477 var87 = string__NativeString__to_s_with_length(var85, var86);
4478 var84 = var87;
4479 varonce83 = var84;
4480 }
4481 var88 = ((short int (*)(val*, val*))(var82->class->vft[COLOR_kernel__Object___61d_61d]))(var82, var84) /* == on <var82:String>*/;
4482 var74 = var88;
4483 }
4484 var_89 = var74;
4485 if (var74){
4486 var73 = var_89;
4487 } else {
4488 var90 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4489 if (varonce91) {
4490 var92 = varonce91;
4491 } else {
4492 var93 = "!=";
4493 var94 = 2;
4494 var95 = string__NativeString__to_s_with_length(var93, var94);
4495 var92 = var95;
4496 varonce91 = var92;
4497 }
4498 var96 = ((short int (*)(val*, val*))(var90->class->vft[COLOR_kernel__Object___61d_61d]))(var90, var92) /* == on <var90:String>*/;
4499 var73 = var96;
4500 }
4501 var_consider_null = var73;
4502 var99 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4503 var100 = ((val* (*)(val*))(var99->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var99) /* mcasttype on <var99:nullable Object(RuntimeVariable)>*/;
4504 /* <var100:MType> isa MNullableType */
4505 cltype102 = type_model__MNullableType.color;
4506 idtype103 = type_model__MNullableType.id;
4507 if(cltype102 >= var100->type->table_size) {
4508 var101 = 0;
4509 } else {
4510 var101 = var100->type->type_table[cltype102] == idtype103;
4511 }
4512 var_104 = var101;
4513 if (var101){
4514 var98 = var_104;
4515 } else {
4516 var105 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4517 var106 = ((val* (*)(val*))(var105->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var105) /* mcasttype on <var105:nullable Object(RuntimeVariable)>*/;
4518 /* <var106:MType> isa MNullType */
4519 cltype108 = type_model__MNullType.color;
4520 idtype109 = type_model__MNullType.id;
4521 if(cltype108 >= var106->type->table_size) {
4522 var107 = 0;
4523 } else {
4524 var107 = var106->type->type_table[cltype108] == idtype109;
4525 }
4526 var98 = var107;
4527 }
4528 var_110 = var98;
4529 if (var98){
4530 var97 = var_consider_null;
4531 } else {
4532 var97 = var_110;
4533 }
4534 if (var97){
4535 if (varonce111) {
4536 var112 = varonce111;
4537 } else {
4538 var113 = "if (";
4539 var114 = 4;
4540 var115 = string__NativeString__to_s_with_length(var113, var114);
4541 var112 = var115;
4542 varonce111 = var112;
4543 }
4544 var116 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4545 if (varonce117) {
4546 var118 = varonce117;
4547 } else {
4548 var119 = " == NULL) { /* Special null case */";
4549 var120 = 35;
4550 var121 = string__NativeString__to_s_with_length(var119, var120);
4551 var118 = var121;
4552 varonce117 = var118;
4553 }
4554 var122 = NEW_array__Array(&type_array__Arraykernel__Object);
4555 { /* var122 = array_instance Array[Object] */
4556 var123 = 3;
4557 var124 = NEW_array__NativeArray(var123, &type_array__NativeArraykernel__Object);
4558 ((struct instance_array__NativeArray*)var124)->values[0] = (val*) var112;
4559 ((struct instance_array__NativeArray*)var124)->values[1] = (val*) var116;
4560 ((struct instance_array__NativeArray*)var124)->values[2] = (val*) var118;
4561 ((void (*)(val*, val*, long))(var122->class->vft[COLOR_array__Array__with_native]))(var122, var124, var123) /* with_native on <var122:Array[Object]>*/;
4562 CHECK_NEW_array__Array(var122);
4563 }
4564 var125 = ((val* (*)(val*))(var122->class->vft[COLOR_string__Object__to_s]))(var122) /* to_s on <var122:Array[Object]>*/;
4565 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var125) /* add on <self:GlobalCompilerVisitor>*/;
4566 var126 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4567 if (varonce127) {
4568 var128 = varonce127;
4569 } else {
4570 var129 = "==";
4571 var130 = 2;
4572 var131 = string__NativeString__to_s_with_length(var129, var130);
4573 var128 = var131;
4574 varonce127 = var128;
4575 }
4576 var132 = ((short int (*)(val*, val*))(var126->class->vft[COLOR_kernel__Object___61d_61d]))(var126, var128) /* == on <var126:String>*/;
4577 if (var132){
4578 var133 = NULL;
4579 if (var_res == NULL) {
4580 var134 = 0; /* is null */
4581 } else {
4582 var134 = 1; /* arg is null and recv is not */
4583 }
4584 if (!var134) {
4585 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 374);
4586 exit(1);
4587 }
4588 var135 = 1;
4589 var136 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var135) /* [] on <var_args:Array[RuntimeVariable]>*/;
4590 var137 = ((val* (*)(val*))(var136->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var136) /* mcasttype on <var136:nullable Object(RuntimeVariable)>*/;
4591 /* <var137:MType> isa MNullableType */
4592 cltype139 = type_model__MNullableType.color;
4593 idtype140 = type_model__MNullableType.id;
4594 if(cltype139 >= var137->type->table_size) {
4595 var138 = 0;
4596 } else {
4597 var138 = var137->type->type_table[cltype139] == idtype140;
4598 }
4599 if (var138){
4600 if (varonce141) {
4601 var142 = varonce141;
4602 } else {
4603 var143 = " = (";
4604 var144 = 4;
4605 var145 = string__NativeString__to_s_with_length(var143, var144);
4606 var142 = var145;
4607 varonce141 = var142;
4608 }
4609 var146 = 1;
4610 var147 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var146) /* [] on <var_args:Array[RuntimeVariable]>*/;
4611 if (varonce148) {
4612 var149 = varonce148;
4613 } else {
4614 var150 = " == NULL);";
4615 var151 = 10;
4616 var152 = string__NativeString__to_s_with_length(var150, var151);
4617 var149 = var152;
4618 varonce148 = var149;
4619 }
4620 var153 = NEW_array__Array(&type_array__Arraykernel__Object);
4621 { /* var153 = array_instance Array[Object] */
4622 var154 = 4;
4623 var155 = NEW_array__NativeArray(var154, &type_array__NativeArraykernel__Object);
4624 ((struct instance_array__NativeArray*)var155)->values[0] = (val*) var_res;
4625 ((struct instance_array__NativeArray*)var155)->values[1] = (val*) var142;
4626 ((struct instance_array__NativeArray*)var155)->values[2] = (val*) var147;
4627 ((struct instance_array__NativeArray*)var155)->values[3] = (val*) var149;
4628 ((void (*)(val*, val*, long))(var153->class->vft[COLOR_array__Array__with_native]))(var153, var155, var154) /* with_native on <var153:Array[Object]>*/;
4629 CHECK_NEW_array__Array(var153);
4630 }
4631 var156 = ((val* (*)(val*))(var153->class->vft[COLOR_string__Object__to_s]))(var153) /* to_s on <var153:Array[Object]>*/;
4632 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var156) /* add on <self:GlobalCompilerVisitor>*/;
4633 } else {
4634 var157 = 1;
4635 var158 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var157) /* [] on <var_args:Array[RuntimeVariable]>*/;
4636 var159 = ((val* (*)(val*))(var158->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var158) /* mcasttype on <var158:nullable Object(RuntimeVariable)>*/;
4637 /* <var159:MType> isa MNullType */
4638 cltype161 = type_model__MNullType.color;
4639 idtype162 = type_model__MNullType.id;
4640 if(cltype161 >= var159->type->table_size) {
4641 var160 = 0;
4642 } else {
4643 var160 = var159->type->type_table[cltype161] == idtype162;
4644 }
4645 if (var160){
4646 if (varonce163) {
4647 var164 = varonce163;
4648 } else {
4649 var165 = " = 1; /* is null */";
4650 var166 = 19;
4651 var167 = string__NativeString__to_s_with_length(var165, var166);
4652 var164 = var167;
4653 varonce163 = var164;
4654 }
4655 var168 = NEW_array__Array(&type_array__Arraykernel__Object);
4656 { /* var168 = array_instance Array[Object] */
4657 var169 = 2;
4658 var170 = NEW_array__NativeArray(var169, &type_array__NativeArraykernel__Object);
4659 ((struct instance_array__NativeArray*)var170)->values[0] = (val*) var_res;
4660 ((struct instance_array__NativeArray*)var170)->values[1] = (val*) var164;
4661 ((void (*)(val*, val*, long))(var168->class->vft[COLOR_array__Array__with_native]))(var168, var170, var169) /* with_native on <var168:Array[Object]>*/;
4662 CHECK_NEW_array__Array(var168);
4663 }
4664 var171 = ((val* (*)(val*))(var168->class->vft[COLOR_string__Object__to_s]))(var168) /* to_s on <var168:Array[Object]>*/;
4665 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
4666 } else {
4667 if (varonce172) {
4668 var173 = varonce172;
4669 } else {
4670 var174 = " = 0; /* ";
4671 var175 = 9;
4672 var176 = string__NativeString__to_s_with_length(var174, var175);
4673 var173 = var176;
4674 varonce172 = var173;
4675 }
4676 var177 = 1;
4677 var178 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var177) /* [] on <var_args:Array[RuntimeVariable]>*/;
4678 var179 = ((val* (*)(val*))(var178->class->vft[COLOR_string__Object__inspect]))(var178) /* inspect on <var178:nullable Object(RuntimeVariable)>*/;
4679 if (varonce180) {
4680 var181 = varonce180;
4681 } else {
4682 var182 = " cannot be null */";
4683 var183 = 18;
4684 var184 = string__NativeString__to_s_with_length(var182, var183);
4685 var181 = var184;
4686 varonce180 = var181;
4687 }
4688 var185 = NEW_array__Array(&type_array__Arraykernel__Object);
4689 { /* var185 = array_instance Array[Object] */
4690 var186 = 4;
4691 var187 = NEW_array__NativeArray(var186, &type_array__NativeArraykernel__Object);
4692 ((struct instance_array__NativeArray*)var187)->values[0] = (val*) var_res;
4693 ((struct instance_array__NativeArray*)var187)->values[1] = (val*) var173;
4694 ((struct instance_array__NativeArray*)var187)->values[2] = (val*) var179;
4695 ((struct instance_array__NativeArray*)var187)->values[3] = (val*) var181;
4696 ((void (*)(val*, val*, long))(var185->class->vft[COLOR_array__Array__with_native]))(var185, var187, var186) /* with_native on <var185:Array[Object]>*/;
4697 CHECK_NEW_array__Array(var185);
4698 }
4699 var188 = ((val* (*)(val*))(var185->class->vft[COLOR_string__Object__to_s]))(var185) /* to_s on <var185:Array[Object]>*/;
4700 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
4701 }
4702 }
4703 } else {
4704 var189 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MProperty__name]))(var_m) /* name on <var_m:MMethod>*/;
4705 if (varonce190) {
4706 var191 = varonce190;
4707 } else {
4708 var192 = "!=";
4709 var193 = 2;
4710 var194 = string__NativeString__to_s_with_length(var192, var193);
4711 var191 = var194;
4712 varonce190 = var191;
4713 }
4714 var195 = ((short int (*)(val*, val*))(var189->class->vft[COLOR_kernel__Object___61d_61d]))(var189, var191) /* == on <var189:String>*/;
4715 if (var195){
4716 var196 = NULL;
4717 if (var_res == NULL) {
4718 var197 = 0; /* is null */
4719 } else {
4720 var197 = 1; /* arg is null and recv is not */
4721 }
4722 if (!var197) {
4723 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 383);
4724 exit(1);
4725 }
4726 var198 = 1;
4727 var199 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var198) /* [] on <var_args:Array[RuntimeVariable]>*/;
4728 var200 = ((val* (*)(val*))(var199->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var199) /* mcasttype on <var199:nullable Object(RuntimeVariable)>*/;
4729 /* <var200:MType> isa MNullableType */
4730 cltype202 = type_model__MNullableType.color;
4731 idtype203 = type_model__MNullableType.id;
4732 if(cltype202 >= var200->type->table_size) {
4733 var201 = 0;
4734 } else {
4735 var201 = var200->type->type_table[cltype202] == idtype203;
4736 }
4737 if (var201){
4738 if (varonce204) {
4739 var205 = varonce204;
4740 } else {
4741 var206 = " = (";
4742 var207 = 4;
4743 var208 = string__NativeString__to_s_with_length(var206, var207);
4744 var205 = var208;
4745 varonce204 = var205;
4746 }
4747 var209 = 1;
4748 var210 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var209) /* [] on <var_args:Array[RuntimeVariable]>*/;
4749 if (varonce211) {
4750 var212 = varonce211;
4751 } else {
4752 var213 = " != NULL);";
4753 var214 = 10;
4754 var215 = string__NativeString__to_s_with_length(var213, var214);
4755 var212 = var215;
4756 varonce211 = var212;
4757 }
4758 var216 = NEW_array__Array(&type_array__Arraykernel__Object);
4759 { /* var216 = array_instance Array[Object] */
4760 var217 = 4;
4761 var218 = NEW_array__NativeArray(var217, &type_array__NativeArraykernel__Object);
4762 ((struct instance_array__NativeArray*)var218)->values[0] = (val*) var_res;
4763 ((struct instance_array__NativeArray*)var218)->values[1] = (val*) var205;
4764 ((struct instance_array__NativeArray*)var218)->values[2] = (val*) var210;
4765 ((struct instance_array__NativeArray*)var218)->values[3] = (val*) var212;
4766 ((void (*)(val*, val*, long))(var216->class->vft[COLOR_array__Array__with_native]))(var216, var218, var217) /* with_native on <var216:Array[Object]>*/;
4767 CHECK_NEW_array__Array(var216);
4768 }
4769 var219 = ((val* (*)(val*))(var216->class->vft[COLOR_string__Object__to_s]))(var216) /* to_s on <var216:Array[Object]>*/;
4770 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var219) /* add on <self:GlobalCompilerVisitor>*/;
4771 } else {
4772 var220 = 1;
4773 var221 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var220) /* [] on <var_args:Array[RuntimeVariable]>*/;
4774 var222 = ((val* (*)(val*))(var221->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var221) /* mcasttype on <var221:nullable Object(RuntimeVariable)>*/;
4775 /* <var222:MType> isa MNullType */
4776 cltype224 = type_model__MNullType.color;
4777 idtype225 = type_model__MNullType.id;
4778 if(cltype224 >= var222->type->table_size) {
4779 var223 = 0;
4780 } else {
4781 var223 = var222->type->type_table[cltype224] == idtype225;
4782 }
4783 if (var223){
4784 if (varonce226) {
4785 var227 = varonce226;
4786 } else {
4787 var228 = " = 0; /* is null */";
4788 var229 = 19;
4789 var230 = string__NativeString__to_s_with_length(var228, var229);
4790 var227 = var230;
4791 varonce226 = var227;
4792 }
4793 var231 = NEW_array__Array(&type_array__Arraykernel__Object);
4794 { /* var231 = array_instance Array[Object] */
4795 var232 = 2;
4796 var233 = NEW_array__NativeArray(var232, &type_array__NativeArraykernel__Object);
4797 ((struct instance_array__NativeArray*)var233)->values[0] = (val*) var_res;
4798 ((struct instance_array__NativeArray*)var233)->values[1] = (val*) var227;
4799 ((void (*)(val*, val*, long))(var231->class->vft[COLOR_array__Array__with_native]))(var231, var233, var232) /* with_native on <var231:Array[Object]>*/;
4800 CHECK_NEW_array__Array(var231);
4801 }
4802 var234 = ((val* (*)(val*))(var231->class->vft[COLOR_string__Object__to_s]))(var231) /* to_s on <var231:Array[Object]>*/;
4803 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var234) /* add on <self:GlobalCompilerVisitor>*/;
4804 } else {
4805 if (varonce235) {
4806 var236 = varonce235;
4807 } else {
4808 var237 = " = 1; /* ";
4809 var238 = 9;
4810 var239 = string__NativeString__to_s_with_length(var237, var238);
4811 var236 = var239;
4812 varonce235 = var236;
4813 }
4814 var240 = 1;
4815 var241 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var240) /* [] on <var_args:Array[RuntimeVariable]>*/;
4816 var242 = ((val* (*)(val*))(var241->class->vft[COLOR_string__Object__inspect]))(var241) /* inspect on <var241:nullable Object(RuntimeVariable)>*/;
4817 if (varonce243) {
4818 var244 = varonce243;
4819 } else {
4820 var245 = " cannot be null */";
4821 var246 = 18;
4822 var247 = string__NativeString__to_s_with_length(var245, var246);
4823 var244 = var247;
4824 varonce243 = var244;
4825 }
4826 var248 = NEW_array__Array(&type_array__Arraykernel__Object);
4827 { /* var248 = array_instance Array[Object] */
4828 var249 = 4;
4829 var250 = NEW_array__NativeArray(var249, &type_array__NativeArraykernel__Object);
4830 ((struct instance_array__NativeArray*)var250)->values[0] = (val*) var_res;
4831 ((struct instance_array__NativeArray*)var250)->values[1] = (val*) var236;
4832 ((struct instance_array__NativeArray*)var250)->values[2] = (val*) var242;
4833 ((struct instance_array__NativeArray*)var250)->values[3] = (val*) var244;
4834 ((void (*)(val*, val*, long))(var248->class->vft[COLOR_array__Array__with_native]))(var248, var250, var249) /* with_native on <var248:Array[Object]>*/;
4835 CHECK_NEW_array__Array(var248);
4836 }
4837 var251 = ((val* (*)(val*))(var248->class->vft[COLOR_string__Object__to_s]))(var248) /* to_s on <var248:Array[Object]>*/;
4838 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var251) /* add on <self:GlobalCompilerVisitor>*/;
4839 }
4840 }
4841 } else {
4842 if (varonce252) {
4843 var253 = varonce252;
4844 } else {
4845 var254 = "Reciever is null";
4846 var255 = 16;
4847 var256 = string__NativeString__to_s_with_length(var254, var255);
4848 var253 = var256;
4849 varonce252 = var253;
4850 }
4851 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var253) /* add_abort on <self:GlobalCompilerVisitor>*/;
4852 }
4853 }
4854 if (varonce257) {
4855 var258 = varonce257;
4856 } else {
4857 var259 = "} else";
4858 var260 = 6;
4859 var261 = string__NativeString__to_s_with_length(var259, var260);
4860 var258 = var261;
4861 varonce257 = var258;
4862 }
4863 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var258) /* add on <self:GlobalCompilerVisitor>*/;
4864 } else {
4865 }
4866 var262 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
4867 if (var262){
4868 if (varonce263) {
4869 var264 = varonce263;
4870 } else {
4871 var265 = "{";
4872 var266 = 1;
4873 var267 = string__NativeString__to_s_with_length(var265, var266);
4874 var264 = var267;
4875 varonce263 = var264;
4876 }
4877 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var264) /* add on <self:GlobalCompilerVisitor>*/;
4878 if (varonce268) {
4879 var269 = varonce268;
4880 } else {
4881 var270 = "/*BUG: no live types for ";
4882 var271 = 25;
4883 var272 = string__NativeString__to_s_with_length(var270, var271);
4884 var269 = var272;
4885 varonce268 = var269;
4886 }
4887 var273 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4888 var274 = ((val* (*)(val*))(var273->class->vft[COLOR_string__Object__inspect]))(var273) /* inspect on <var273:nullable Object(RuntimeVariable)>*/;
4889 if (varonce275) {
4890 var276 = varonce275;
4891 } else {
4892 var277 = " . ";
4893 var278 = 3;
4894 var279 = string__NativeString__to_s_with_length(var277, var278);
4895 var276 = var279;
4896 varonce275 = var276;
4897 }
4898 if (varonce280) {
4899 var281 = varonce280;
4900 } else {
4901 var282 = "*/";
4902 var283 = 2;
4903 var284 = string__NativeString__to_s_with_length(var282, var283);
4904 var281 = var284;
4905 varonce280 = var281;
4906 }
4907 var285 = NEW_array__Array(&type_array__Arraykernel__Object);
4908 { /* var285 = array_instance Array[Object] */
4909 var286 = 5;
4910 var287 = NEW_array__NativeArray(var286, &type_array__NativeArraykernel__Object);
4911 ((struct instance_array__NativeArray*)var287)->values[0] = (val*) var269;
4912 ((struct instance_array__NativeArray*)var287)->values[1] = (val*) var274;
4913 ((struct instance_array__NativeArray*)var287)->values[2] = (val*) var276;
4914 ((struct instance_array__NativeArray*)var287)->values[3] = (val*) var_m;
4915 ((struct instance_array__NativeArray*)var287)->values[4] = (val*) var281;
4916 ((void (*)(val*, val*, long))(var285->class->vft[COLOR_array__Array__with_native]))(var285, var287, var286) /* with_native on <var285:Array[Object]>*/;
4917 CHECK_NEW_array__Array(var285);
4918 }
4919 var288 = ((val* (*)(val*))(var285->class->vft[COLOR_string__Object__to_s]))(var285) /* to_s on <var285:Array[Object]>*/;
4920 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var288) /* add on <self:GlobalCompilerVisitor>*/;
4921 var289 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4922 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var289) /* bugtype on <self:GlobalCompilerVisitor>*/;
4923 if (varonce290) {
4924 var291 = varonce290;
4925 } else {
4926 var292 = "}";
4927 var293 = 1;
4928 var294 = string__NativeString__to_s_with_length(var292, var293);
4929 var291 = var294;
4930 varonce290 = var291;
4931 }
4932 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var291) /* add on <self:GlobalCompilerVisitor>*/;
4933 var = var_res;
4934 goto RET_LABEL;
4935 } else {
4936 }
4937 if (varonce295) {
4938 var296 = varonce295;
4939 } else {
4940 var297 = "switch(";
4941 var298 = 7;
4942 var299 = string__NativeString__to_s_with_length(var297, var298);
4943 var296 = var299;
4944 varonce295 = var296;
4945 }
4946 var300 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
4947 if (varonce301) {
4948 var302 = varonce301;
4949 } else {
4950 var303 = "->classid) {";
4951 var304 = 12;
4952 var305 = string__NativeString__to_s_with_length(var303, var304);
4953 var302 = var305;
4954 varonce301 = var302;
4955 }
4956 var306 = NEW_array__Array(&type_array__Arraykernel__Object);
4957 { /* var306 = array_instance Array[Object] */
4958 var307 = 3;
4959 var308 = NEW_array__NativeArray(var307, &type_array__NativeArraykernel__Object);
4960 ((struct instance_array__NativeArray*)var308)->values[0] = (val*) var296;
4961 ((struct instance_array__NativeArray*)var308)->values[1] = (val*) var300;
4962 ((struct instance_array__NativeArray*)var308)->values[2] = (val*) var302;
4963 ((void (*)(val*, val*, long))(var306->class->vft[COLOR_array__Array__with_native]))(var306, var308, var307) /* with_native on <var306:Array[Object]>*/;
4964 CHECK_NEW_array__Array(var306);
4965 }
4966 var309 = ((val* (*)(val*))(var306->class->vft[COLOR_string__Object__to_s]))(var306) /* to_s on <var306:Array[Object]>*/;
4967 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var309) /* add on <self:GlobalCompilerVisitor>*/;
4968 var310 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
4969 var_last = var310;
4970 var311 = NULL;
4971 var_defaultpropdef = var311;
4972 var312 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
4973 for(;;) {
4974 var313 = ((short int (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var312) /* is_ok on <var312:Iterator[nullable Object]>*/;
4975 if(!var313) break;
4976 var314 = ((val* (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__item]))(var312) /* item on <var312:Iterator[nullable Object]>*/;
4977 var_t = var314;
4978 var315 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
4979 var316 = ((val* (*)(val*))(var315->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var315) /* mainmodule on <var315:AbstractCompiler(GlobalCompiler)>*/;
4980 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>*/;
4981 var_propdef318 = var317;
4982 var320 = ((val* (*)(val*))(var_propdef318->class->vft[COLOR_model__MPropDef__mclassdef]))(var_propdef318) /* mclassdef on <var_propdef318:MMethodDef>*/;
4983 var321 = ((val* (*)(val*))(var320->class->vft[COLOR_model__MClassDef__mclass]))(var320) /* mclass on <var320:MClassDef>*/;
4984 var322 = ((val* (*)(val*))(var321->class->vft[COLOR_model__MClass__name]))(var321) /* name on <var321:MClass>*/;
4985 if (varonce323) {
4986 var324 = varonce323;
4987 } else {
4988 var325 = "Object";
4989 var326 = 6;
4990 var327 = string__NativeString__to_s_with_length(var325, var326);
4991 var324 = var327;
4992 varonce323 = var324;
4993 }
4994 var328 = ((short int (*)(val*, val*))(var322->class->vft[COLOR_kernel__Object___61d_61d]))(var322, var324) /* == on <var322:String>*/;
4995 var_329 = var328;
4996 if (var328){
4997 var330 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MClassType>*/;
4998 if (varonce331) {
4999 var332 = varonce331;
5000 } else {
5001 var333 = "val*";
5002 var334 = 4;
5003 var335 = string__NativeString__to_s_with_length(var333, var334);
5004 var332 = var335;
5005 varonce331 = var332;
5006 }
5007 var336 = ((short int (*)(val*, val*))(var330->class->vft[COLOR_kernel__Object___61d_61d]))(var330, var332) /* == on <var330:String>*/;
5008 var319 = var336;
5009 } else {
5010 var319 = var_329;
5011 }
5012 if (var319){
5013 var_defaultpropdef = var_propdef318;
5014 goto CONTINUE_label;
5015 } else {
5016 }
5017 var339 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5018 var340 = ((short int (*)(val*))(var339->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var339) /* hardening on <var339:AbstractCompiler(GlobalCompiler)>*/;
5019 var341 = !var340;
5020 var_342 = var341;
5021 if (var341){
5022 var343 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
5023 var338 = var343;
5024 } else {
5025 var338 = var_342;
5026 }
5027 var_344 = var338;
5028 if (var338){
5029 var345 = NULL;
5030 if (var_defaultpropdef == NULL) {
5031 var346 = 1; /* is null */
5032 } else {
5033 var346 = 0; /* arg is null but recv is not */
5034 }
5035 var337 = var346;
5036 } else {
5037 var337 = var_344;
5038 }
5039 if (var337){
5040 if (varonce347) {
5041 var348 = varonce347;
5042 } else {
5043 var349 = "default: /* test ";
5044 var350 = 17;
5045 var351 = string__NativeString__to_s_with_length(var349, var350);
5046 var348 = var351;
5047 varonce347 = var348;
5048 }
5049 if (varonce352) {
5050 var353 = varonce352;
5051 } else {
5052 var354 = " */";
5053 var355 = 3;
5054 var356 = string__NativeString__to_s_with_length(var354, var355);
5055 var353 = var356;
5056 varonce352 = var353;
5057 }
5058 var357 = NEW_array__Array(&type_array__Arraykernel__Object);
5059 { /* var357 = array_instance Array[Object] */
5060 var358 = 3;
5061 var359 = NEW_array__NativeArray(var358, &type_array__NativeArraykernel__Object);
5062 ((struct instance_array__NativeArray*)var359)->values[0] = (val*) var348;
5063 ((struct instance_array__NativeArray*)var359)->values[1] = (val*) var_t;
5064 ((struct instance_array__NativeArray*)var359)->values[2] = (val*) var353;
5065 ((void (*)(val*, val*, long))(var357->class->vft[COLOR_array__Array__with_native]))(var357, var359, var358) /* with_native on <var357:Array[Object]>*/;
5066 CHECK_NEW_array__Array(var357);
5067 }
5068 var360 = ((val* (*)(val*))(var357->class->vft[COLOR_string__Object__to_s]))(var357) /* to_s on <var357:Array[Object]>*/;
5069 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var360) /* add on <self:GlobalCompilerVisitor>*/;
5070 } else {
5071 if (varonce361) {
5072 var362 = varonce361;
5073 } else {
5074 var363 = "case ";
5075 var364 = 5;
5076 var365 = string__NativeString__to_s_with_length(var363, var364);
5077 var362 = var365;
5078 varonce361 = var362;
5079 }
5080 var366 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5081 var367 = ((val* (*)(val*, val*))(var366->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var366, var_t) /* classid on <var366:AbstractCompiler(GlobalCompiler)>*/;
5082 if (varonce368) {
5083 var369 = varonce368;
5084 } else {
5085 var370 = ": /* test ";
5086 var371 = 10;
5087 var372 = string__NativeString__to_s_with_length(var370, var371);
5088 var369 = var372;
5089 varonce368 = var369;
5090 }
5091 if (varonce373) {
5092 var374 = varonce373;
5093 } else {
5094 var375 = " */";
5095 var376 = 3;
5096 var377 = string__NativeString__to_s_with_length(var375, var376);
5097 var374 = var377;
5098 varonce373 = var374;
5099 }
5100 var378 = NEW_array__Array(&type_array__Arraykernel__Object);
5101 { /* var378 = array_instance Array[Object] */
5102 var379 = 5;
5103 var380 = NEW_array__NativeArray(var379, &type_array__NativeArraykernel__Object);
5104 ((struct instance_array__NativeArray*)var380)->values[0] = (val*) var362;
5105 ((struct instance_array__NativeArray*)var380)->values[1] = (val*) var367;
5106 ((struct instance_array__NativeArray*)var380)->values[2] = (val*) var369;
5107 ((struct instance_array__NativeArray*)var380)->values[3] = (val*) var_t;
5108 ((struct instance_array__NativeArray*)var380)->values[4] = (val*) var374;
5109 ((void (*)(val*, val*, long))(var378->class->vft[COLOR_array__Array__with_native]))(var378, var380, var379) /* with_native on <var378:Array[Object]>*/;
5110 CHECK_NEW_array__Array(var378);
5111 }
5112 var381 = ((val* (*)(val*))(var378->class->vft[COLOR_string__Object__to_s]))(var378) /* to_s on <var378:Array[Object]>*/;
5113 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var381) /* add on <self:GlobalCompilerVisitor>*/;
5114 }
5115 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>*/;
5116 var_res2383 = var382;
5117 var384 = NULL;
5118 if (var_res == NULL) {
5119 var385 = 0; /* is null */
5120 } else {
5121 var385 = 1; /* arg is null and recv is not */
5122 }
5123 if (var385){
5124 if (var_res2383 == NULL) {
5125 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 419);
5126 exit(1);
5127 }
5128 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2383) /* assign on <self:GlobalCompilerVisitor>*/;
5129 } else {
5130 }
5131 if (varonce386) {
5132 var387 = varonce386;
5133 } else {
5134 var388 = "break;";
5135 var389 = 6;
5136 var390 = string__NativeString__to_s_with_length(var388, var389);
5137 var387 = var390;
5138 varonce386 = var387;
5139 }
5140 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var387) /* add on <self:GlobalCompilerVisitor>*/;
5141 CONTINUE_label: (void)0;
5142 ((void (*)(val*))(var312->class->vft[COLOR_abstract_collection__Iterator__next]))(var312) /* next on <var312:Iterator[nullable Object]>*/;
5143 }
5144 BREAK_label: (void)0;
5145 var391 = NULL;
5146 if (var_defaultpropdef == NULL) {
5147 var392 = 0; /* is null */
5148 } else {
5149 var392 = 1; /* arg is null and recv is not */
5150 }
5151 if (var392){
5152 if (varonce393) {
5153 var394 = varonce393;
5154 } else {
5155 var395 = "default: /* default is Object */";
5156 var396 = 32;
5157 var397 = string__NativeString__to_s_with_length(var395, var396);
5158 var394 = var397;
5159 varonce393 = var394;
5160 }
5161 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var394) /* add on <self:GlobalCompilerVisitor>*/;
5162 var398 = ((val* (*)(val*))(var_defaultpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_defaultpropdef) /* mclassdef on <var_defaultpropdef:nullable MMethodDef(MMethodDef)>*/;
5163 var399 = ((val* (*)(val*))(var398->class->vft[COLOR_model__MClassDef__bound_mtype]))(var398) /* bound_mtype on <var398:MClassDef>*/;
5164 var400 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__call]))(self, var_defaultpropdef, var399, var_args) /* call on <self:GlobalCompilerVisitor>*/;
5165 var_res2401 = var400;
5166 var402 = NULL;
5167 if (var_res == NULL) {
5168 var403 = 0; /* is null */
5169 } else {
5170 var403 = 1; /* arg is null and recv is not */
5171 }
5172 if (var403){
5173 if (var_res2401 == NULL) {
5174 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 425);
5175 exit(1);
5176 }
5177 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2401) /* assign on <self:GlobalCompilerVisitor>*/;
5178 } else {
5179 }
5180 } else {
5181 var404 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5182 var405 = ((short int (*)(val*))(var404->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var404) /* hardening on <var404:AbstractCompiler(GlobalCompiler)>*/;
5183 if (var405){
5184 if (varonce406) {
5185 var407 = varonce406;
5186 } else {
5187 var408 = "default: /* bug */";
5188 var409 = 18;
5189 var410 = string__NativeString__to_s_with_length(var408, var409);
5190 var407 = var410;
5191 varonce406 = var407;
5192 }
5193 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var407) /* add on <self:GlobalCompilerVisitor>*/;
5194 var411 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5195 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var411) /* bugtype on <self:GlobalCompilerVisitor>*/;
5196 } else {
5197 }
5198 }
5199 if (varonce412) {
5200 var413 = varonce412;
5201 } else {
5202 var414 = "}";
5203 var415 = 1;
5204 var416 = string__NativeString__to_s_with_length(var414, var415);
5205 var413 = var416;
5206 varonce412 = var413;
5207 }
5208 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var413) /* add on <self:GlobalCompilerVisitor>*/;
5209 var = var_res;
5210 goto RET_LABEL;
5211 RET_LABEL:;
5212 return var;
5213 }
5214 /* method global_compiler#GlobalCompilerVisitor#send for (self: Object, MMethod, Array[RuntimeVariable]): nullable RuntimeVariable */
5215 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__send(val* self, val* p0, val* p1) {
5216 val* var /* : nullable RuntimeVariable */;
5217 val* var1 /* : nullable RuntimeVariable */;
5218 var1 = global_compiler__GlobalCompilerVisitor__send(self, p0, p1);
5219 var = var1;
5220 RET_LABEL:;
5221 return var;
5222 }
5223 /* method global_compiler#GlobalCompilerVisitor#check_valid_reciever for (self: GlobalCompilerVisitor, MClassType) */
5224 void global_compiler__GlobalCompilerVisitor__check_valid_reciever(val* self, val* p0) {
5225 val* var_recvtype /* var recvtype: MClassType */;
5226 short int var /* : Bool */;
5227 val* var1 /* : AbstractCompiler */;
5228 val* var2 /* : RapidTypeAnalysis */;
5229 val* var3 /* : HashSet[MClassType] */;
5230 short int var4 /* : Bool */;
5231 short int var_ /* var : Bool */;
5232 val* var5 /* : MClass */;
5233 val* var6 /* : String */;
5234 static val* varonce;
5235 val* var7 /* : String */;
5236 char* var8 /* : NativeString */;
5237 long var9 /* : Int */;
5238 val* var10 /* : String */;
5239 short int var11 /* : Bool */;
5240 static val* varonce12;
5241 val* var13 /* : String */;
5242 char* var14 /* : NativeString */;
5243 long var15 /* : Int */;
5244 val* var16 /* : String */;
5245 val* var17 /* : Array[Object] */;
5246 long var18 /* : Int */;
5247 val* var19 /* : NativeArray[Object] */;
5248 val* var20 /* : String */;
5249 var_recvtype = p0;
5250 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
5251 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var1) /* runtime_type_analysis on <var1:AbstractCompiler(GlobalCompiler)>*/;
5252 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var2) /* live_types on <var2:RapidTypeAnalysis>*/;
5253 var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_recvtype) /* has on <var3:HashSet[MClassType]>*/;
5254 var_ = var4;
5255 if (var4){
5256 var = var_;
5257 } else {
5258 var5 = ((val* (*)(val*))(var_recvtype->class->vft[COLOR_model__MClassType__mclass]))(var_recvtype) /* mclass on <var_recvtype:MClassType>*/;
5259 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MClass__name]))(var5) /* name on <var5:MClass>*/;
5260 if (varonce) {
5261 var7 = varonce;
5262 } else {
5263 var8 = "Object";
5264 var9 = 6;
5265 var10 = string__NativeString__to_s_with_length(var8, var9);
5266 var7 = var10;
5267 varonce = var7;
5268 }
5269 var11 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_kernel__Object___61d_61d]))(var6, var7) /* == on <var6:String>*/;
5270 var = var11;
5271 }
5272 if (var){
5273 goto RET_LABEL;
5274 } else {
5275 }
5276 if (varonce12) {
5277 var13 = varonce12;
5278 } else {
5279 var14 = " is not a live type";
5280 var15 = 19;
5281 var16 = string__NativeString__to_s_with_length(var14, var15);
5282 var13 = var16;
5283 varonce12 = var13;
5284 }
5285 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
5286 { /* var17 = array_instance Array[Object] */
5287 var18 = 2;
5288 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
5289 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var_recvtype;
5290 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var13;
5291 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
5292 CHECK_NEW_array__Array(var17);
5293 }
5294 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
5295 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var20) /* print on <self:GlobalCompilerVisitor>*/;
5296 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "src/global_compiler.nit", 438);
5297 exit(1);
5298 RET_LABEL:;
5299 }
5300 /* method global_compiler#GlobalCompilerVisitor#check_valid_reciever for (self: Object, MClassType) */
5301 void VIRTUAL_global_compiler__GlobalCompilerVisitor__check_valid_reciever(val* self, val* p0) {
5302 global_compiler__GlobalCompilerVisitor__check_valid_reciever(self, p0);
5303 RET_LABEL:;
5304 }
5305 /* method global_compiler#GlobalCompilerVisitor#get_recvtype for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): MClassType */
5306 val* global_compiler__GlobalCompilerVisitor__get_recvtype(val* self, val* p0, val* p1, val* p2) {
5307 val* var /* : MClassType */;
5308 val* var_m /* var m: MMethodDef */;
5309 val* var_recvtype /* var recvtype: MClassType */;
5310 val* var_args /* var args: Array[RuntimeVariable] */;
5311 short int var1 /* : Bool */;
5312 val* var2 /* : MClassDef */;
5313 val* var3 /* : MClass */;
5314 val* var4 /* : String */;
5315 static val* varonce;
5316 val* var5 /* : String */;
5317 char* var6 /* : NativeString */;
5318 long var7 /* : Int */;
5319 val* var8 /* : String */;
5320 short int var9 /* : Bool */;
5321 short int var_ /* var : Bool */;
5322 val* var10 /* : String */;
5323 static val* varonce11;
5324 val* var12 /* : String */;
5325 char* var13 /* : NativeString */;
5326 long var14 /* : Int */;
5327 val* var15 /* : String */;
5328 short int var16 /* : Bool */;
5329 val* var17 /* : MClassDef */;
5330 val* var18 /* : MClassType */;
5331 var_m = p0;
5332 var_recvtype = p1;
5333 var_args = p2;
5334 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__check_valid_reciever]))(self, var_recvtype) /* check_valid_reciever on <self:GlobalCompilerVisitor>*/;
5335 var2 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
5336 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__MClassDef__mclass]))(var2) /* mclass on <var2:MClassDef>*/;
5337 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MClass__name]))(var3) /* name on <var3:MClass>*/;
5338 if (varonce) {
5339 var5 = varonce;
5340 } else {
5341 var6 = "Object";
5342 var7 = 6;
5343 var8 = string__NativeString__to_s_with_length(var6, var7);
5344 var5 = var8;
5345 varonce = var5;
5346 }
5347 var9 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_kernel__Object___61d_61d]))(var4, var5) /* == on <var4:String>*/;
5348 var_ = var9;
5349 if (var9){
5350 var10 = ((val* (*)(val*))(var_recvtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_recvtype) /* ctype on <var_recvtype:MClassType>*/;
5351 if (varonce11) {
5352 var12 = varonce11;
5353 } else {
5354 var13 = "val*";
5355 var14 = 4;
5356 var15 = string__NativeString__to_s_with_length(var13, var14);
5357 var12 = var15;
5358 varonce11 = var12;
5359 }
5360 var16 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___61d_61d]))(var10, var12) /* == on <var10:String>*/;
5361 var1 = var16;
5362 } else {
5363 var1 = var_;
5364 }
5365 if (var1){
5366 var17 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
5367 var18 = ((val* (*)(val*))(var17->class->vft[COLOR_model__MClassDef__bound_mtype]))(var17) /* bound_mtype on <var17:MClassDef>*/;
5368 var_recvtype = var18;
5369 } else {
5370 }
5371 var = var_recvtype;
5372 goto RET_LABEL;
5373 RET_LABEL:;
5374 return var;
5375 }
5376 /* method global_compiler#GlobalCompilerVisitor#get_recvtype for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): MClassType */
5377 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__get_recvtype(val* self, val* p0, val* p1, val* p2) {
5378 val* var /* : MClassType */;
5379 val* var1 /* : MClassType */;
5380 var1 = global_compiler__GlobalCompilerVisitor__get_recvtype(self, p0, p1, p2);
5381 var = var1;
5382 RET_LABEL:;
5383 return var;
5384 }
5385 /* method global_compiler#GlobalCompilerVisitor#get_recv for (self: GlobalCompilerVisitor, MClassType, Array[RuntimeVariable]): RuntimeVariable */
5386 val* global_compiler__GlobalCompilerVisitor__get_recv(val* self, val* p0, val* p1) {
5387 val* var /* : RuntimeVariable */;
5388 val* var_recvtype /* var recvtype: MClassType */;
5389 val* var_args /* var args: Array[RuntimeVariable] */;
5390 val* var1 /* : nullable Object */;
5391 val* var2 /* : RuntimeVariable */;
5392 val* var3 /* : RuntimeVariable */;
5393 var_recvtype = p0;
5394 var_args = p1;
5395 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5396 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var1, var_recvtype) /* autobox on <self:GlobalCompilerVisitor>*/;
5397 var3 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var2, var_recvtype) /* autoadapt on <self:GlobalCompilerVisitor>*/;
5398 var = var3;
5399 goto RET_LABEL;
5400 RET_LABEL:;
5401 return var;
5402 }
5403 /* method global_compiler#GlobalCompilerVisitor#get_recv for (self: Object, MClassType, Array[RuntimeVariable]): RuntimeVariable */
5404 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__get_recv(val* self, val* p0, val* p1) {
5405 val* var /* : RuntimeVariable */;
5406 val* var1 /* : RuntimeVariable */;
5407 var1 = global_compiler__GlobalCompilerVisitor__get_recv(self, p0, p1);
5408 var = var1;
5409 RET_LABEL:;
5410 return var;
5411 }
5412 /* method global_compiler#GlobalCompilerVisitor#finalize_call for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5413 val* global_compiler__GlobalCompilerVisitor__finalize_call(val* self, val* p0, val* p1, val* p2) {
5414 val* var /* : nullable RuntimeVariable */;
5415 val* var_m /* var m: MMethodDef */;
5416 val* var_recvtype /* var recvtype: MClassType */;
5417 val* var_args /* var args: Array[RuntimeVariable] */;
5418 long var1 /* : Int */;
5419 val* var2 /* : nullable MSignature */;
5420 long var3 /* : Int */;
5421 long var4 /* : Int */;
5422 long var5 /* : Int */;
5423 long var7 /* : Int */;
5424 short int var8 /* : Bool */;
5425 short int var10 /* : Bool */;
5426 short int var11 /* : Bool */;
5427 static val* varonce;
5428 val* var12 /* : String */;
5429 char* var13 /* : NativeString */;
5430 long var14 /* : Int */;
5431 val* var15 /* : String */;
5432 static val* varonce16;
5433 val* var17 /* : String */;
5434 char* var18 /* : NativeString */;
5435 long var19 /* : Int */;
5436 val* var20 /* : String */;
5437 long var21 /* : Int */;
5438 static val* varonce22;
5439 val* var23 /* : String */;
5440 char* var24 /* : NativeString */;
5441 long var25 /* : Int */;
5442 val* var26 /* : String */;
5443 val* var27 /* : Array[Object] */;
5444 long var28 /* : Int */;
5445 val* var29 /* : NativeArray[Object] */;
5446 val* var30 /* : Object */;
5447 val* var31 /* : String */;
5448 static val* varonce32;
5449 val* var33 /* : String */;
5450 char* var34 /* : NativeString */;
5451 long var35 /* : Int */;
5452 val* var36 /* : String */;
5453 static val* varonce37;
5454 val* var38 /* : String */;
5455 char* var39 /* : NativeString */;
5456 long var40 /* : Int */;
5457 val* var41 /* : String */;
5458 long var42 /* : Int */;
5459 static val* varonce43;
5460 val* var44 /* : String */;
5461 char* var45 /* : NativeString */;
5462 long var46 /* : Int */;
5463 val* var47 /* : String */;
5464 val* var48 /* : Array[Object] */;
5465 long var49 /* : Int */;
5466 val* var50 /* : NativeArray[Object] */;
5467 val* var51 /* : Object */;
5468 val* var52 /* : String */;
5469 val* var53 /* : null */;
5470 val* var54 /* : CustomizedRuntimeFunction */;
5471 val* var_rm /* var rm: CustomizedRuntimeFunction */;
5472 val* var55 /* : nullable RuntimeVariable */;
5473 var_m = p0;
5474 var_recvtype = p1;
5475 var_args = p2;
5476 var1 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5477 var2 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
5478 if (var2 == NULL) {
5479 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/global_compiler.nit", 464);
5480 exit(1);
5481 } else {
5482 var3 = ((long (*)(val*))(var2->class->vft[COLOR_model__MSignature__arity]))(var2) /* arity on <var2:nullable MSignature>*/;
5483 }
5484 var4 = 1;
5485 { /* Inline kernel#Int#+ (var3,var4) */
5486 var7 = var3 + var4;
5487 var5 = var7;
5488 goto RET_LABEL6;
5489 RET_LABEL6:(void)0;
5490 }
5491 { /* Inline kernel#Int#!= (var1,var5) */
5492 var10 = var1 == var5;
5493 var11 = !var10;
5494 var8 = var11;
5495 goto RET_LABEL9;
5496 RET_LABEL9:(void)0;
5497 }
5498 if (var8){
5499 if (varonce) {
5500 var12 = varonce;
5501 } else {
5502 var13 = "printf(\"NOT YET IMPLEMENTED: Invalid arity for ";
5503 var14 = 47;
5504 var15 = string__NativeString__to_s_with_length(var13, var14);
5505 var12 = var15;
5506 varonce = var12;
5507 }
5508 if (varonce16) {
5509 var17 = varonce16;
5510 } else {
5511 var18 = ". ";
5512 var19 = 2;
5513 var20 = string__NativeString__to_s_with_length(var18, var19);
5514 var17 = var20;
5515 varonce16 = var17;
5516 }
5517 var21 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5518 if (varonce22) {
5519 var23 = varonce22;
5520 } else {
5521 var24 = " arguments given.\\n\"); exit(1);";
5522 var25 = 31;
5523 var26 = string__NativeString__to_s_with_length(var24, var25);
5524 var23 = var26;
5525 varonce22 = var23;
5526 }
5527 var27 = NEW_array__Array(&type_array__Arraykernel__Object);
5528 { /* var27 = array_instance Array[Object] */
5529 var28 = 5;
5530 var29 = NEW_array__NativeArray(var28, &type_array__NativeArraykernel__Object);
5531 ((struct instance_array__NativeArray*)var29)->values[0] = (val*) var12;
5532 ((struct instance_array__NativeArray*)var29)->values[1] = (val*) var_m;
5533 ((struct instance_array__NativeArray*)var29)->values[2] = (val*) var17;
5534 var30 = BOX_kernel__Int(var21); /* autobox from Int to Object */
5535 ((struct instance_array__NativeArray*)var29)->values[3] = (val*) var30;
5536 ((struct instance_array__NativeArray*)var29)->values[4] = (val*) var23;
5537 ((void (*)(val*, val*, long))(var27->class->vft[COLOR_array__Array__with_native]))(var27, var29, var28) /* with_native on <var27:Array[Object]>*/;
5538 CHECK_NEW_array__Array(var27);
5539 }
5540 var31 = ((val* (*)(val*))(var27->class->vft[COLOR_string__Object__to_s]))(var27) /* to_s on <var27:Array[Object]>*/;
5541 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var31) /* add on <self:GlobalCompilerVisitor>*/;
5542 if (varonce32) {
5543 var33 = varonce32;
5544 } else {
5545 var34 = "NOT YET IMPLEMENTED: Invalid arity for ";
5546 var35 = 39;
5547 var36 = string__NativeString__to_s_with_length(var34, var35);
5548 var33 = var36;
5549 varonce32 = var33;
5550 }
5551 if (varonce37) {
5552 var38 = varonce37;
5553 } else {
5554 var39 = ". ";
5555 var40 = 2;
5556 var41 = string__NativeString__to_s_with_length(var39, var40);
5557 var38 = var41;
5558 varonce37 = var38;
5559 }
5560 var42 = ((long (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__length]))(var_args) /* length on <var_args:Array[RuntimeVariable]>*/;
5561 if (varonce43) {
5562 var44 = varonce43;
5563 } else {
5564 var45 = " arguments given.";
5565 var46 = 17;
5566 var47 = string__NativeString__to_s_with_length(var45, var46);
5567 var44 = var47;
5568 varonce43 = var44;
5569 }
5570 var48 = NEW_array__Array(&type_array__Arraykernel__Object);
5571 { /* var48 = array_instance Array[Object] */
5572 var49 = 5;
5573 var50 = NEW_array__NativeArray(var49, &type_array__NativeArraykernel__Object);
5574 ((struct instance_array__NativeArray*)var50)->values[0] = (val*) var33;
5575 ((struct instance_array__NativeArray*)var50)->values[1] = (val*) var_m;
5576 ((struct instance_array__NativeArray*)var50)->values[2] = (val*) var38;
5577 var51 = BOX_kernel__Int(var42); /* autobox from Int to Object */
5578 ((struct instance_array__NativeArray*)var50)->values[3] = (val*) var51;
5579 ((struct instance_array__NativeArray*)var50)->values[4] = (val*) var44;
5580 ((void (*)(val*, val*, long))(var48->class->vft[COLOR_array__Array__with_native]))(var48, var50, var49) /* with_native on <var48:Array[Object]>*/;
5581 CHECK_NEW_array__Array(var48);
5582 }
5583 var52 = ((val* (*)(val*))(var48->class->vft[COLOR_string__Object__to_s]))(var48) /* to_s on <var48:Array[Object]>*/;
5584 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var52) /* debug on <self:GlobalCompilerVisitor>*/;
5585 var53 = NULL;
5586 var = var53;
5587 goto RET_LABEL;
5588 } else {
5589 }
5590 var54 = NEW_global_compiler__CustomizedRuntimeFunction(&type_global_compiler__CustomizedRuntimeFunction);
5591 ((void (*)(val*, val*, val*))(var54->class->vft[COLOR_global_compiler__CustomizedRuntimeFunction__init]))(var54, var_m, var_recvtype) /* init on <var54:CustomizedRuntimeFunction>*/;
5592 CHECK_NEW_global_compiler__CustomizedRuntimeFunction(var54);
5593 var_rm = var54;
5594 var55 = ((val* (*)(val*, val*, val*))(var_rm->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__call]))(var_rm, self, var_args) /* call on <var_rm:CustomizedRuntimeFunction>*/;
5595 var = var55;
5596 goto RET_LABEL;
5597 RET_LABEL:;
5598 return var;
5599 }
5600 /* method global_compiler#GlobalCompilerVisitor#finalize_call for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5601 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__finalize_call(val* self, val* p0, val* p1, val* p2) {
5602 val* var /* : nullable RuntimeVariable */;
5603 val* var1 /* : nullable RuntimeVariable */;
5604 var1 = global_compiler__GlobalCompilerVisitor__finalize_call(self, p0, p1, p2);
5605 var = var1;
5606 RET_LABEL:;
5607 return var;
5608 }
5609 /* method global_compiler#GlobalCompilerVisitor#call for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5610 val* global_compiler__GlobalCompilerVisitor__call(val* self, val* p0, val* p1, val* p2) {
5611 val* var /* : nullable RuntimeVariable */;
5612 val* var_m /* var m: MMethodDef */;
5613 val* var_recvtype /* var recvtype: MClassType */;
5614 val* var_args /* var args: Array[RuntimeVariable] */;
5615 val* var1 /* : MClassType */;
5616 val* var_recv_type /* var recv_type: MClassType */;
5617 val* var2 /* : RuntimeVariable */;
5618 val* var_recv /* var recv: RuntimeVariable */;
5619 val* var3 /* : Array[nullable Object] */;
5620 val* var_new_args /* var new_args: Array[RuntimeVariable] */;
5621 val* var4 /* : nullable MSignature */;
5622 val* var5 /* : nullable RuntimeVariable */;
5623 var_m = p0;
5624 var_recvtype = p1;
5625 var_args = p2;
5626 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>*/;
5627 var_recv_type = var1;
5628 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>*/;
5629 var_recv = var2;
5630 var3 = ((val* (*)(val*))(var_args->class->vft[COLOR_array__Collection__to_a]))(var_args) /* to_a on <var_args:Array[RuntimeVariable]>*/;
5631 var_new_args = var3;
5632 var4 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
5633 if (var4 == NULL) {
5634 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 479);
5635 exit(1);
5636 }
5637 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__varargize]))(self, var_m, var4, var_new_args) /* varargize on <self:GlobalCompilerVisitor>*/;
5638 ((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]>*/;
5639 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>*/;
5640 var = var5;
5641 goto RET_LABEL;
5642 RET_LABEL:;
5643 return var;
5644 }
5645 /* method global_compiler#GlobalCompilerVisitor#call for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5646 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__call(val* self, val* p0, val* p1, val* p2) {
5647 val* var /* : nullable RuntimeVariable */;
5648 val* var1 /* : nullable RuntimeVariable */;
5649 var1 = global_compiler__GlobalCompilerVisitor__call(self, p0, p1, p2);
5650 var = var1;
5651 RET_LABEL:;
5652 return var;
5653 }
5654 /* method global_compiler#GlobalCompilerVisitor#call_without_varargize for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5655 val* global_compiler__GlobalCompilerVisitor__call_without_varargize(val* self, val* p0, val* p1, val* p2) {
5656 val* var /* : nullable RuntimeVariable */;
5657 val* var_m /* var m: MMethodDef */;
5658 val* var_recvtype /* var recvtype: MClassType */;
5659 val* var_args /* var args: Array[RuntimeVariable] */;
5660 val* var1 /* : MClassType */;
5661 val* var_recv_type /* var recv_type: MClassType */;
5662 val* var2 /* : RuntimeVariable */;
5663 val* var_recv /* var recv: RuntimeVariable */;
5664 val* var3 /* : Array[nullable Object] */;
5665 val* var_new_args /* var new_args: Array[RuntimeVariable] */;
5666 val* var4 /* : nullable RuntimeVariable */;
5667 var_m = p0;
5668 var_recvtype = p1;
5669 var_args = p2;
5670 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>*/;
5671 var_recv_type = var1;
5672 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>*/;
5673 var_recv = var2;
5674 var3 = ((val* (*)(val*))(var_args->class->vft[COLOR_array__Collection__to_a]))(var_args) /* to_a on <var_args:Array[RuntimeVariable]>*/;
5675 var_new_args = var3;
5676 ((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]>*/;
5677 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>*/;
5678 var = var4;
5679 goto RET_LABEL;
5680 RET_LABEL:;
5681 return var;
5682 }
5683 /* method global_compiler#GlobalCompilerVisitor#call_without_varargize for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5684 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__call_without_varargize(val* self, val* p0, val* p1, val* p2) {
5685 val* var /* : nullable RuntimeVariable */;
5686 val* var1 /* : nullable RuntimeVariable */;
5687 var1 = global_compiler__GlobalCompilerVisitor__call_without_varargize(self, p0, p1, p2);
5688 var = var1;
5689 RET_LABEL:;
5690 return var;
5691 }
5692 /* method global_compiler#GlobalCompilerVisitor#supercall for (self: GlobalCompilerVisitor, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
5693 val* global_compiler__GlobalCompilerVisitor__supercall(val* self, val* p0, val* p1, val* p2) {
5694 val* var /* : nullable RuntimeVariable */;
5695 val* var_m /* var m: MMethodDef */;
5696 val* var_recvtype /* var recvtype: MClassType */;
5697 val* var_args /* var args: Array[RuntimeVariable] */;
5698 val* var1 /* : nullable Object */;
5699 val* var2 /* : Array[MClassType] */;
5700 val* var_types /* var types: Array[MClassType] */;
5701 val* var3 /* : MProperty */;
5702 val* var4 /* : MPropDef */;
5703 val* var5 /* : nullable MSignature */;
5704 val* var6 /* : nullable MType */;
5705 val* var_ret /* var ret: nullable MType */;
5706 val* var7 /* : null */;
5707 short int var8 /* : Bool */;
5708 val* var9 /* : null */;
5709 val* var_res /* var res: nullable RuntimeVariable */;
5710 val* var10 /* : nullable Object */;
5711 val* var11 /* : MType */;
5712 val* var12 /* : RuntimeVariable */;
5713 static val* varonce;
5714 val* var13 /* : String */;
5715 char* var14 /* : NativeString */;
5716 long var15 /* : Int */;
5717 val* var16 /* : String */;
5718 static val* varonce17;
5719 val* var18 /* : String */;
5720 char* var19 /* : NativeString */;
5721 long var20 /* : Int */;
5722 val* var21 /* : String */;
5723 val* var22 /* : nullable Object */;
5724 val* var23 /* : String */;
5725 static val* varonce24;
5726 val* var25 /* : String */;
5727 char* var26 /* : NativeString */;
5728 long var27 /* : Int */;
5729 val* var28 /* : String */;
5730 val* var29 /* : Array[Object] */;
5731 long var30 /* : Int */;
5732 val* var31 /* : NativeArray[Object] */;
5733 val* var32 /* : String */;
5734 val* var33 /* : nullable Object */;
5735 val* var34 /* : MType */;
5736 val* var35 /* : String */;
5737 static val* varonce36;
5738 val* var37 /* : String */;
5739 char* var38 /* : NativeString */;
5740 long var39 /* : Int */;
5741 val* var40 /* : String */;
5742 short int var41 /* : Bool */;
5743 val* var42 /* : nullable Object */;
5744 val* var43 /* : MType */;
5745 short int var44 /* : Bool */;
5746 int cltype;
5747 int idtype;
5748 val* var_mclasstype /* var mclasstype: MClassType */;
5749 val* var45 /* : AbstractCompiler */;
5750 val* var46 /* : RapidTypeAnalysis */;
5751 val* var47 /* : HashSet[MClassType] */;
5752 short int var48 /* : Bool */;
5753 short int var49 /* : Bool */;
5754 static val* varonce50;
5755 val* var51 /* : String */;
5756 char* var52 /* : NativeString */;
5757 long var53 /* : Int */;
5758 val* var54 /* : String */;
5759 static val* varonce55;
5760 val* var56 /* : String */;
5761 char* var57 /* : NativeString */;
5762 long var58 /* : Int */;
5763 val* var59 /* : String */;
5764 val* var60 /* : Array[Object] */;
5765 long var61 /* : Int */;
5766 val* var62 /* : NativeArray[Object] */;
5767 val* var63 /* : String */;
5768 val* var64 /* : AbstractCompiler */;
5769 val* var65 /* : MModule */;
5770 val* var66 /* : MPropDef */;
5771 val* var_propdef /* var propdef: MMethodDef */;
5772 val* var67 /* : nullable RuntimeVariable */;
5773 val* var_res2 /* var res2: nullable RuntimeVariable */;
5774 val* var68 /* : null */;
5775 short int var69 /* : Bool */;
5776 short int var70 /* : Bool */;
5777 static val* varonce71;
5778 val* var72 /* : String */;
5779 char* var73 /* : NativeString */;
5780 long var74 /* : Int */;
5781 val* var75 /* : String */;
5782 static val* varonce76;
5783 val* var77 /* : String */;
5784 char* var78 /* : NativeString */;
5785 long var79 /* : Int */;
5786 val* var80 /* : String */;
5787 val* var81 /* : nullable Object */;
5788 val* var82 /* : String */;
5789 static val* varonce83;
5790 val* var84 /* : String */;
5791 char* var85 /* : NativeString */;
5792 long var86 /* : Int */;
5793 val* var87 /* : String */;
5794 static val* varonce88;
5795 val* var89 /* : String */;
5796 char* var90 /* : NativeString */;
5797 long var91 /* : Int */;
5798 val* var92 /* : String */;
5799 val* var93 /* : Array[Object] */;
5800 long var94 /* : Int */;
5801 val* var95 /* : NativeArray[Object] */;
5802 val* var96 /* : String */;
5803 val* var97 /* : nullable Object */;
5804 static val* varonce98;
5805 val* var99 /* : String */;
5806 char* var100 /* : NativeString */;
5807 long var101 /* : Int */;
5808 val* var102 /* : String */;
5809 static val* varonce103;
5810 val* var104 /* : String */;
5811 char* var105 /* : NativeString */;
5812 long var106 /* : Int */;
5813 val* var107 /* : String */;
5814 val* var108 /* : nullable Object */;
5815 static val* varonce109;
5816 val* var110 /* : String */;
5817 char* var111 /* : NativeString */;
5818 long var112 /* : Int */;
5819 val* var113 /* : String */;
5820 val* var114 /* : Array[Object] */;
5821 long var115 /* : Int */;
5822 val* var116 /* : NativeArray[Object] */;
5823 val* var117 /* : String */;
5824 val* var118 /* : nullable Object */;
5825 val* var_last /* var last: MClassType */;
5826 val* var119 /* : Iterator[nullable Object] */;
5827 short int var120 /* : Bool */;
5828 val* var121 /* : nullable Object */;
5829 val* var_t /* var t: MClassType */;
5830 val* var122 /* : AbstractCompiler */;
5831 val* var123 /* : MModule */;
5832 val* var124 /* : MPropDef */;
5833 val* var_propdef125 /* var propdef: MMethodDef */;
5834 short int var126 /* : Bool */;
5835 val* var127 /* : AbstractCompiler */;
5836 short int var128 /* : Bool */;
5837 short int var129 /* : Bool */;
5838 short int var_ /* var : Bool */;
5839 short int var130 /* : Bool */;
5840 static val* varonce131;
5841 val* var132 /* : String */;
5842 char* var133 /* : NativeString */;
5843 long var134 /* : Int */;
5844 val* var135 /* : String */;
5845 static val* varonce136;
5846 val* var137 /* : String */;
5847 char* var138 /* : NativeString */;
5848 long var139 /* : Int */;
5849 val* var140 /* : String */;
5850 val* var141 /* : Array[Object] */;
5851 long var142 /* : Int */;
5852 val* var143 /* : NativeArray[Object] */;
5853 val* var144 /* : String */;
5854 static val* varonce145;
5855 val* var146 /* : String */;
5856 char* var147 /* : NativeString */;
5857 long var148 /* : Int */;
5858 val* var149 /* : String */;
5859 val* var150 /* : AbstractCompiler */;
5860 val* var151 /* : String */;
5861 static val* varonce152;
5862 val* var153 /* : String */;
5863 char* var154 /* : NativeString */;
5864 long var155 /* : Int */;
5865 val* var156 /* : String */;
5866 static val* varonce157;
5867 val* var158 /* : String */;
5868 char* var159 /* : NativeString */;
5869 long var160 /* : Int */;
5870 val* var161 /* : String */;
5871 val* var162 /* : Array[Object] */;
5872 long var163 /* : Int */;
5873 val* var164 /* : NativeArray[Object] */;
5874 val* var165 /* : String */;
5875 val* var166 /* : nullable RuntimeVariable */;
5876 val* var_res2167 /* var res2: nullable RuntimeVariable */;
5877 val* var168 /* : null */;
5878 short int var169 /* : Bool */;
5879 static val* varonce170;
5880 val* var171 /* : String */;
5881 char* var172 /* : NativeString */;
5882 long var173 /* : Int */;
5883 val* var174 /* : String */;
5884 val* var175 /* : AbstractCompiler */;
5885 short int var176 /* : Bool */;
5886 static val* varonce177;
5887 val* var178 /* : String */;
5888 char* var179 /* : NativeString */;
5889 long var180 /* : Int */;
5890 val* var181 /* : String */;
5891 val* var182 /* : nullable Object */;
5892 static val* varonce183;
5893 val* var184 /* : String */;
5894 char* var185 /* : NativeString */;
5895 long var186 /* : Int */;
5896 val* var187 /* : String */;
5897 var_m = p0;
5898 var_recvtype = p1;
5899 var_args = p2;
5900 var1 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5901 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var1) /* collect_types on <self:GlobalCompilerVisitor>*/;
5902 var_types = var2;
5903 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mproperty]))(var_m) /* mproperty on <var_m:MMethodDef>*/;
5904 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MProperty__intro]))(var3) /* intro on <var3:MProperty(MMethod)>*/;
5905 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_model__MMethodDef__msignature]))(var4) /* msignature on <var4:MPropDef(MMethodDef)>*/;
5906 if (var5 == NULL) {
5907 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/global_compiler.nit", 500);
5908 exit(1);
5909 } else {
5910 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MSignature__return_mtype]))(var5) /* return_mtype on <var5:nullable MSignature>*/;
5911 }
5912 var_ret = var6;
5913 var7 = NULL;
5914 if (var_ret == NULL) {
5915 var8 = 1; /* is null */
5916 } else {
5917 var8 = 0; /* arg is null but recv is not */
5918 }
5919 if (var8){
5920 var9 = NULL;
5921 var_res = var9;
5922 } else {
5923 var10 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5924 var11 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var10) /* resolve_for on <self:GlobalCompilerVisitor>*/;
5925 var_ret = var11;
5926 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
5927 var_res = var12;
5928 }
5929 if (varonce) {
5930 var13 = varonce;
5931 } else {
5932 var14 = "/* super ";
5933 var15 = 9;
5934 var16 = string__NativeString__to_s_with_length(var14, var15);
5935 var13 = var16;
5936 varonce = var13;
5937 }
5938 if (varonce17) {
5939 var18 = varonce17;
5940 } else {
5941 var19 = " on ";
5942 var20 = 4;
5943 var21 = string__NativeString__to_s_with_length(var19, var20);
5944 var18 = var21;
5945 varonce17 = var18;
5946 }
5947 var22 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5948 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__inspect]))(var22) /* inspect on <var22:nullable Object(RuntimeVariable)>*/;
5949 if (varonce24) {
5950 var25 = varonce24;
5951 } else {
5952 var26 = " */";
5953 var27 = 3;
5954 var28 = string__NativeString__to_s_with_length(var26, var27);
5955 var25 = var28;
5956 varonce24 = var25;
5957 }
5958 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
5959 { /* var29 = array_instance Array[Object] */
5960 var30 = 5;
5961 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
5962 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var13;
5963 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var_m;
5964 ((struct instance_array__NativeArray*)var31)->values[2] = (val*) var18;
5965 ((struct instance_array__NativeArray*)var31)->values[3] = (val*) var23;
5966 ((struct instance_array__NativeArray*)var31)->values[4] = (val*) var25;
5967 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
5968 CHECK_NEW_array__Array(var29);
5969 }
5970 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
5971 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var32) /* add on <self:GlobalCompilerVisitor>*/;
5972 var33 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5973 var34 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var33) /* mtype on <var33:nullable Object(RuntimeVariable)>*/;
5974 var35 = ((val* (*)(val*))(var34->class->vft[COLOR_abstract_compiler__MType__ctype]))(var34) /* ctype on <var34:MType>*/;
5975 if (varonce36) {
5976 var37 = varonce36;
5977 } else {
5978 var38 = "val*";
5979 var39 = 4;
5980 var40 = string__NativeString__to_s_with_length(var38, var39);
5981 var37 = var40;
5982 varonce36 = var37;
5983 }
5984 var41 = ((short int (*)(val*, val*))(var35->class->vft[COLOR_kernel__Object___33d_61d]))(var35, var37) /* != on <var35:String>*/;
5985 if (var41){
5986 var42 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
5987 var43 = ((val* (*)(val*))(var42->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var42) /* mtype on <var42:nullable Object(RuntimeVariable)>*/;
5988 /* <var43:MType> isa MClassType */
5989 cltype = type_model__MClassType.color;
5990 idtype = type_model__MClassType.id;
5991 if(cltype >= var43->type->table_size) {
5992 var44 = 0;
5993 } else {
5994 var44 = var43->type->type_table[cltype] == idtype;
5995 }
5996 if (!var44) {
5997 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 510);
5998 exit(1);
5999 }
6000 var_mclasstype = var43;
6001 var45 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6002 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var45) /* runtime_type_analysis on <var45:AbstractCompiler(GlobalCompiler)>*/;
6003 var47 = ((val* (*)(val*))(var46->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var46) /* live_types on <var46:RapidTypeAnalysis>*/;
6004 var48 = ((short int (*)(val*, val*))(var47->class->vft[COLOR_abstract_collection__Collection__has]))(var47, var_mclasstype) /* has on <var47:HashSet[MClassType]>*/;
6005 var49 = !var48;
6006 if (var49){
6007 if (varonce50) {
6008 var51 = varonce50;
6009 } else {
6010 var52 = "/* skip, no method ";
6011 var53 = 19;
6012 var54 = string__NativeString__to_s_with_length(var52, var53);
6013 var51 = var54;
6014 varonce50 = var51;
6015 }
6016 if (varonce55) {
6017 var56 = varonce55;
6018 } else {
6019 var57 = " */";
6020 var58 = 3;
6021 var59 = string__NativeString__to_s_with_length(var57, var58);
6022 var56 = var59;
6023 varonce55 = var56;
6024 }
6025 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
6026 { /* var60 = array_instance Array[Object] */
6027 var61 = 3;
6028 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
6029 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var51;
6030 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_m;
6031 ((struct instance_array__NativeArray*)var62)->values[2] = (val*) var56;
6032 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
6033 CHECK_NEW_array__Array(var60);
6034 }
6035 var63 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
6036 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var63) /* add on <self:GlobalCompilerVisitor>*/;
6037 var = var_res;
6038 goto RET_LABEL;
6039 } else {
6040 }
6041 var64 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6042 var65 = ((val* (*)(val*))(var64->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var64) /* mainmodule on <var64:AbstractCompiler(GlobalCompiler)>*/;
6043 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>*/;
6044 var_propdef = var66;
6045 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>*/;
6046 var_res2 = var67;
6047 var68 = NULL;
6048 if (var_res == NULL) {
6049 var69 = 0; /* is null */
6050 } else {
6051 var69 = 1; /* arg is null and recv is not */
6052 }
6053 if (var69){
6054 if (var_res2 == NULL) {
6055 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 517);
6056 exit(1);
6057 }
6058 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
6059 } else {
6060 }
6061 var = var_res;
6062 goto RET_LABEL;
6063 } else {
6064 }
6065 var70 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
6066 if (var70){
6067 if (varonce71) {
6068 var72 = varonce71;
6069 } else {
6070 var73 = "{";
6071 var74 = 1;
6072 var75 = string__NativeString__to_s_with_length(var73, var74);
6073 var72 = var75;
6074 varonce71 = var72;
6075 }
6076 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var72) /* add on <self:GlobalCompilerVisitor>*/;
6077 if (varonce76) {
6078 var77 = varonce76;
6079 } else {
6080 var78 = "/*BUG: no live types for ";
6081 var79 = 25;
6082 var80 = string__NativeString__to_s_with_length(var78, var79);
6083 var77 = var80;
6084 varonce76 = var77;
6085 }
6086 var81 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6087 var82 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__inspect]))(var81) /* inspect on <var81:nullable Object(RuntimeVariable)>*/;
6088 if (varonce83) {
6089 var84 = varonce83;
6090 } else {
6091 var85 = " . ";
6092 var86 = 3;
6093 var87 = string__NativeString__to_s_with_length(var85, var86);
6094 var84 = var87;
6095 varonce83 = var84;
6096 }
6097 if (varonce88) {
6098 var89 = varonce88;
6099 } else {
6100 var90 = "*/";
6101 var91 = 2;
6102 var92 = string__NativeString__to_s_with_length(var90, var91);
6103 var89 = var92;
6104 varonce88 = var89;
6105 }
6106 var93 = NEW_array__Array(&type_array__Arraykernel__Object);
6107 { /* var93 = array_instance Array[Object] */
6108 var94 = 5;
6109 var95 = NEW_array__NativeArray(var94, &type_array__NativeArraykernel__Object);
6110 ((struct instance_array__NativeArray*)var95)->values[0] = (val*) var77;
6111 ((struct instance_array__NativeArray*)var95)->values[1] = (val*) var82;
6112 ((struct instance_array__NativeArray*)var95)->values[2] = (val*) var84;
6113 ((struct instance_array__NativeArray*)var95)->values[3] = (val*) var_m;
6114 ((struct instance_array__NativeArray*)var95)->values[4] = (val*) var89;
6115 ((void (*)(val*, val*, long))(var93->class->vft[COLOR_array__Array__with_native]))(var93, var95, var94) /* with_native on <var93:Array[Object]>*/;
6116 CHECK_NEW_array__Array(var93);
6117 }
6118 var96 = ((val* (*)(val*))(var93->class->vft[COLOR_string__Object__to_s]))(var93) /* to_s on <var93:Array[Object]>*/;
6119 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var96) /* add on <self:GlobalCompilerVisitor>*/;
6120 var97 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6121 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var97) /* bugtype on <self:GlobalCompilerVisitor>*/;
6122 if (varonce98) {
6123 var99 = varonce98;
6124 } else {
6125 var100 = "}";
6126 var101 = 1;
6127 var102 = string__NativeString__to_s_with_length(var100, var101);
6128 var99 = var102;
6129 varonce98 = var99;
6130 }
6131 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var99) /* add on <self:GlobalCompilerVisitor>*/;
6132 var = var_res;
6133 goto RET_LABEL;
6134 } else {
6135 }
6136 if (varonce103) {
6137 var104 = varonce103;
6138 } else {
6139 var105 = "switch(";
6140 var106 = 7;
6141 var107 = string__NativeString__to_s_with_length(var105, var106);
6142 var104 = var107;
6143 varonce103 = var104;
6144 }
6145 var108 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6146 if (varonce109) {
6147 var110 = varonce109;
6148 } else {
6149 var111 = "->classid) {";
6150 var112 = 12;
6151 var113 = string__NativeString__to_s_with_length(var111, var112);
6152 var110 = var113;
6153 varonce109 = var110;
6154 }
6155 var114 = NEW_array__Array(&type_array__Arraykernel__Object);
6156 { /* var114 = array_instance Array[Object] */
6157 var115 = 3;
6158 var116 = NEW_array__NativeArray(var115, &type_array__NativeArraykernel__Object);
6159 ((struct instance_array__NativeArray*)var116)->values[0] = (val*) var104;
6160 ((struct instance_array__NativeArray*)var116)->values[1] = (val*) var108;
6161 ((struct instance_array__NativeArray*)var116)->values[2] = (val*) var110;
6162 ((void (*)(val*, val*, long))(var114->class->vft[COLOR_array__Array__with_native]))(var114, var116, var115) /* with_native on <var114:Array[Object]>*/;
6163 CHECK_NEW_array__Array(var114);
6164 }
6165 var117 = ((val* (*)(val*))(var114->class->vft[COLOR_string__Object__to_s]))(var114) /* to_s on <var114:Array[Object]>*/;
6166 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var117) /* add on <self:GlobalCompilerVisitor>*/;
6167 var118 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
6168 var_last = var118;
6169 var119 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
6170 for(;;) {
6171 var120 = ((short int (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var119) /* is_ok on <var119:Iterator[nullable Object]>*/;
6172 if(!var120) break;
6173 var121 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__item]))(var119) /* item on <var119:Iterator[nullable Object]>*/;
6174 var_t = var121;
6175 var122 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6176 var123 = ((val* (*)(val*))(var122->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var122) /* mainmodule on <var122:AbstractCompiler(GlobalCompiler)>*/;
6177 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>*/;
6178 var_propdef125 = var124;
6179 var127 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6180 var128 = ((short int (*)(val*))(var127->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var127) /* hardening on <var127:AbstractCompiler(GlobalCompiler)>*/;
6181 var129 = !var128;
6182 var_ = var129;
6183 if (var129){
6184 var130 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
6185 var126 = var130;
6186 } else {
6187 var126 = var_;
6188 }
6189 if (var126){
6190 if (varonce131) {
6191 var132 = varonce131;
6192 } else {
6193 var133 = "default: /* test ";
6194 var134 = 17;
6195 var135 = string__NativeString__to_s_with_length(var133, var134);
6196 var132 = var135;
6197 varonce131 = var132;
6198 }
6199 if (varonce136) {
6200 var137 = varonce136;
6201 } else {
6202 var138 = " */";
6203 var139 = 3;
6204 var140 = string__NativeString__to_s_with_length(var138, var139);
6205 var137 = var140;
6206 varonce136 = var137;
6207 }
6208 var141 = NEW_array__Array(&type_array__Arraykernel__Object);
6209 { /* var141 = array_instance Array[Object] */
6210 var142 = 3;
6211 var143 = NEW_array__NativeArray(var142, &type_array__NativeArraykernel__Object);
6212 ((struct instance_array__NativeArray*)var143)->values[0] = (val*) var132;
6213 ((struct instance_array__NativeArray*)var143)->values[1] = (val*) var_t;
6214 ((struct instance_array__NativeArray*)var143)->values[2] = (val*) var137;
6215 ((void (*)(val*, val*, long))(var141->class->vft[COLOR_array__Array__with_native]))(var141, var143, var142) /* with_native on <var141:Array[Object]>*/;
6216 CHECK_NEW_array__Array(var141);
6217 }
6218 var144 = ((val* (*)(val*))(var141->class->vft[COLOR_string__Object__to_s]))(var141) /* to_s on <var141:Array[Object]>*/;
6219 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var144) /* add on <self:GlobalCompilerVisitor>*/;
6220 } else {
6221 if (varonce145) {
6222 var146 = varonce145;
6223 } else {
6224 var147 = "case ";
6225 var148 = 5;
6226 var149 = string__NativeString__to_s_with_length(var147, var148);
6227 var146 = var149;
6228 varonce145 = var146;
6229 }
6230 var150 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6231 var151 = ((val* (*)(val*, val*))(var150->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var150, var_t) /* classid on <var150:AbstractCompiler(GlobalCompiler)>*/;
6232 if (varonce152) {
6233 var153 = varonce152;
6234 } else {
6235 var154 = ": /* test ";
6236 var155 = 10;
6237 var156 = string__NativeString__to_s_with_length(var154, var155);
6238 var153 = var156;
6239 varonce152 = var153;
6240 }
6241 if (varonce157) {
6242 var158 = varonce157;
6243 } else {
6244 var159 = " */";
6245 var160 = 3;
6246 var161 = string__NativeString__to_s_with_length(var159, var160);
6247 var158 = var161;
6248 varonce157 = var158;
6249 }
6250 var162 = NEW_array__Array(&type_array__Arraykernel__Object);
6251 { /* var162 = array_instance Array[Object] */
6252 var163 = 5;
6253 var164 = NEW_array__NativeArray(var163, &type_array__NativeArraykernel__Object);
6254 ((struct instance_array__NativeArray*)var164)->values[0] = (val*) var146;
6255 ((struct instance_array__NativeArray*)var164)->values[1] = (val*) var151;
6256 ((struct instance_array__NativeArray*)var164)->values[2] = (val*) var153;
6257 ((struct instance_array__NativeArray*)var164)->values[3] = (val*) var_t;
6258 ((struct instance_array__NativeArray*)var164)->values[4] = (val*) var158;
6259 ((void (*)(val*, val*, long))(var162->class->vft[COLOR_array__Array__with_native]))(var162, var164, var163) /* with_native on <var162:Array[Object]>*/;
6260 CHECK_NEW_array__Array(var162);
6261 }
6262 var165 = ((val* (*)(val*))(var162->class->vft[COLOR_string__Object__to_s]))(var162) /* to_s on <var162:Array[Object]>*/;
6263 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var165) /* add on <self:GlobalCompilerVisitor>*/;
6264 }
6265 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>*/;
6266 var_res2167 = var166;
6267 var168 = NULL;
6268 if (var_res == NULL) {
6269 var169 = 0; /* is null */
6270 } else {
6271 var169 = 1; /* arg is null and recv is not */
6272 }
6273 if (var169){
6274 if (var_res2167 == NULL) {
6275 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 539);
6276 exit(1);
6277 }
6278 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2167) /* assign on <self:GlobalCompilerVisitor>*/;
6279 } else {
6280 }
6281 if (varonce170) {
6282 var171 = varonce170;
6283 } else {
6284 var172 = "break;";
6285 var173 = 6;
6286 var174 = string__NativeString__to_s_with_length(var172, var173);
6287 var171 = var174;
6288 varonce170 = var171;
6289 }
6290 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
6291 CONTINUE_label: (void)0;
6292 ((void (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__next]))(var119) /* next on <var119:Iterator[nullable Object]>*/;
6293 }
6294 BREAK_label: (void)0;
6295 var175 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6296 var176 = ((short int (*)(val*))(var175->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var175) /* hardening on <var175:AbstractCompiler(GlobalCompiler)>*/;
6297 if (var176){
6298 if (varonce177) {
6299 var178 = varonce177;
6300 } else {
6301 var179 = "default: /* bug */";
6302 var180 = 18;
6303 var181 = string__NativeString__to_s_with_length(var179, var180);
6304 var178 = var181;
6305 varonce177 = var178;
6306 }
6307 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var178) /* add on <self:GlobalCompilerVisitor>*/;
6308 var182 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6309 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var182) /* bugtype on <self:GlobalCompilerVisitor>*/;
6310 } else {
6311 }
6312 if (varonce183) {
6313 var184 = varonce183;
6314 } else {
6315 var185 = "}";
6316 var186 = 1;
6317 var187 = string__NativeString__to_s_with_length(var185, var186);
6318 var184 = var187;
6319 varonce183 = var184;
6320 }
6321 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var184) /* add on <self:GlobalCompilerVisitor>*/;
6322 var = var_res;
6323 goto RET_LABEL;
6324 RET_LABEL:;
6325 return var;
6326 }
6327 /* method global_compiler#GlobalCompilerVisitor#supercall for (self: Object, MMethodDef, MClassType, Array[RuntimeVariable]): nullable RuntimeVariable */
6328 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__supercall(val* self, val* p0, val* p1, val* p2) {
6329 val* var /* : nullable RuntimeVariable */;
6330 val* var1 /* : nullable RuntimeVariable */;
6331 var1 = global_compiler__GlobalCompilerVisitor__supercall(self, p0, p1, p2);
6332 var = var1;
6333 RET_LABEL:;
6334 return var;
6335 }
6336 /* method global_compiler#GlobalCompilerVisitor#adapt_signature for (self: GlobalCompilerVisitor, MMethodDef, Array[RuntimeVariable]) */
6337 void global_compiler__GlobalCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
6338 val* var_m /* var m: MMethodDef */;
6339 val* var_args /* var args: Array[RuntimeVariable] */;
6340 val* var /* : nullable Object */;
6341 val* var_recv /* var recv: RuntimeVariable */;
6342 val* var1 /* : Range[Int] */;
6343 long var2 /* : Int */;
6344 val* var3 /* : nullable MSignature */;
6345 long var4 /* : Int */;
6346 val* var5 /* : Discrete */;
6347 val* var6 /* : Discrete */;
6348 val* var7 /* : Iterator[nullable Object] */;
6349 short int var8 /* : Bool */;
6350 val* var9 /* : nullable Object */;
6351 long var_i /* var i: Int */;
6352 long var10 /* : Int */;
6353 val* var11 /* : nullable MSignature */;
6354 val* var12 /* : Array[MParameter] */;
6355 val* var13 /* : nullable Object */;
6356 val* var14 /* : MType */;
6357 val* var_t /* var t: MType */;
6358 val* var15 /* : nullable MSignature */;
6359 long var16 /* : Int */;
6360 short int var17 /* : Bool */;
6361 short int var19 /* : Bool */;
6362 long var20 /* : Int */;
6363 long var21 /* : Int */;
6364 long var23 /* : Int */;
6365 val* var24 /* : nullable Object */;
6366 val* var25 /* : MType */;
6367 val* var26 /* : MType */;
6368 long var27 /* : Int */;
6369 long var28 /* : Int */;
6370 long var30 /* : Int */;
6371 long var31 /* : Int */;
6372 long var32 /* : Int */;
6373 long var34 /* : Int */;
6374 val* var35 /* : nullable Object */;
6375 val* var36 /* : RuntimeVariable */;
6376 var_m = p0;
6377 var_args = p1;
6378 var = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
6379 var_recv = var;
6380 var1 = NEW_range__Range(&type_range__Rangekernel__Int);
6381 var2 = 0;
6382 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6383 if (var3 == NULL) {
6384 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/global_compiler.nit", 553);
6385 exit(1);
6386 } else {
6387 var4 = ((long (*)(val*))(var3->class->vft[COLOR_model__MSignature__arity]))(var3) /* arity on <var3:nullable MSignature>*/;
6388 }
6389 var5 = BOX_kernel__Int(var2); /* autobox from Int to Discrete */
6390 var6 = BOX_kernel__Int(var4); /* autobox from Int to Discrete */
6391 ((void (*)(val*, val*, val*))(var1->class->vft[COLOR_range__Range__without_last]))(var1, var5, var6) /* without_last on <var1:Range[Int]>*/;
6392 CHECK_NEW_range__Range(var1);
6393 var7 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__iterator]))(var1) /* iterator on <var1:Range[Int]>*/;
6394 for(;;) {
6395 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
6396 if(!var8) break;
6397 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
6398 var10 = ((struct instance_kernel__Int*)var9)->value; /* autounbox from nullable Object to Int */;
6399 var_i = var10;
6400 var11 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6401 if (var11 == NULL) {
6402 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/global_compiler.nit", 554);
6403 exit(1);
6404 } else {
6405 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_model__MSignature__mparameters]))(var11) /* mparameters on <var11:nullable MSignature>*/;
6406 }
6407 var13 = ((val* (*)(val*, long))(var12->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var12, var_i) /* [] on <var12:Array[MParameter]>*/;
6408 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_model__MParameter__mtype]))(var13) /* mtype on <var13:nullable Object(MParameter)>*/;
6409 var_t = var14;
6410 var15 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
6411 if (var15 == NULL) {
6412 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/global_compiler.nit", 555);
6413 exit(1);
6414 } else {
6415 var16 = ((long (*)(val*))(var15->class->vft[COLOR_model__MSignature__vararg_rank]))(var15) /* vararg_rank on <var15:nullable MSignature>*/;
6416 }
6417 { /* Inline kernel#Int#== (var_i,var16) */
6418 var19 = var_i == var16;
6419 var17 = var19;
6420 goto RET_LABEL18;
6421 RET_LABEL18:(void)0;
6422 }
6423 if (var17){
6424 var20 = 1;
6425 { /* Inline kernel#Int#+ (var_i,var20) */
6426 var23 = var_i + var20;
6427 var21 = var23;
6428 goto RET_LABEL22;
6429 RET_LABEL22:(void)0;
6430 }
6431 var24 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var21) /* [] on <var_args:Array[RuntimeVariable]>*/;
6432 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var24) /* mtype on <var24:nullable Object(RuntimeVariable)>*/;
6433 var_t = var25;
6434 } else {
6435 }
6436 var26 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_t, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6437 var_t = var26;
6438 var27 = 1;
6439 { /* Inline kernel#Int#+ (var_i,var27) */
6440 var30 = var_i + var27;
6441 var28 = var30;
6442 goto RET_LABEL29;
6443 RET_LABEL29:(void)0;
6444 }
6445 var31 = 1;
6446 { /* Inline kernel#Int#+ (var_i,var31) */
6447 var34 = var_i + var31;
6448 var32 = var34;
6449 goto RET_LABEL33;
6450 RET_LABEL33:(void)0;
6451 }
6452 var35 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var32) /* [] on <var_args:Array[RuntimeVariable]>*/;
6453 var36 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var35, var_t) /* autobox on <self:GlobalCompilerVisitor>*/;
6454 ((void (*)(val*, long, val*))(var_args->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_args, var28, var36) /* []= on <var_args:Array[RuntimeVariable]>*/;
6455 CONTINUE_label: (void)0;
6456 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
6457 }
6458 BREAK_label: (void)0;
6459 RET_LABEL:;
6460 }
6461 /* method global_compiler#GlobalCompilerVisitor#adapt_signature for (self: Object, MMethodDef, Array[RuntimeVariable]) */
6462 void VIRTUAL_global_compiler__GlobalCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
6463 global_compiler__GlobalCompilerVisitor__adapt_signature(self, p0, p1);
6464 RET_LABEL:;
6465 }
6466 /* method global_compiler#GlobalCompilerVisitor#vararg_instance for (self: GlobalCompilerVisitor, MPropDef, RuntimeVariable, Array[RuntimeVariable], MType): RuntimeVariable */
6467 val* global_compiler__GlobalCompilerVisitor__vararg_instance(val* self, val* p0, val* p1, val* p2, val* p3) {
6468 val* var /* : RuntimeVariable */;
6469 val* var_mpropdef /* var mpropdef: MPropDef */;
6470 val* var_recv /* var recv: RuntimeVariable */;
6471 val* var_varargs /* var varargs: Array[RuntimeVariable] */;
6472 val* var_elttype /* var elttype: MType */;
6473 val* var1 /* : MType */;
6474 val* var2 /* : RuntimeVariable */;
6475 var_mpropdef = p0;
6476 var_recv = p1;
6477 var_varargs = p2;
6478 var_elttype = p3;
6479 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_elttype, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
6480 var_elttype = var1;
6481 var2 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__array_instance]))(self, var_varargs, var_elttype) /* array_instance on <self:GlobalCompilerVisitor>*/;
6482 var = var2;
6483 goto RET_LABEL;
6484 RET_LABEL:;
6485 return var;
6486 }
6487 /* method global_compiler#GlobalCompilerVisitor#vararg_instance for (self: Object, MPropDef, RuntimeVariable, Array[RuntimeVariable], MType): RuntimeVariable */
6488 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__vararg_instance(val* self, val* p0, val* p1, val* p2, val* p3) {
6489 val* var /* : RuntimeVariable */;
6490 val* var1 /* : RuntimeVariable */;
6491 var1 = global_compiler__GlobalCompilerVisitor__vararg_instance(self, p0, p1, p2, p3);
6492 var = var1;
6493 RET_LABEL:;
6494 return var;
6495 }
6496 /* method global_compiler#GlobalCompilerVisitor#bugtype for (self: GlobalCompilerVisitor, RuntimeVariable) */
6497 void global_compiler__GlobalCompilerVisitor__bugtype(val* self, val* p0) {
6498 val* var_recv /* var recv: RuntimeVariable */;
6499 val* var /* : MType */;
6500 val* var1 /* : String */;
6501 static val* varonce;
6502 val* var2 /* : String */;
6503 char* var3 /* : NativeString */;
6504 long var4 /* : Int */;
6505 val* var5 /* : String */;
6506 short int var6 /* : Bool */;
6507 static val* varonce7;
6508 val* var8 /* : String */;
6509 char* var9 /* : NativeString */;
6510 long var10 /* : Int */;
6511 val* var11 /* : String */;
6512 static val* varonce12;
6513 val* var13 /* : String */;
6514 char* var14 /* : NativeString */;
6515 long var15 /* : Int */;
6516 val* var16 /* : String */;
6517 val* var17 /* : MType */;
6518 static val* varonce18;
6519 val* var19 /* : String */;
6520 char* var20 /* : NativeString */;
6521 long var21 /* : Int */;
6522 val* var22 /* : String */;
6523 val* var23 /* : Array[Object] */;
6524 long var24 /* : Int */;
6525 val* var25 /* : NativeArray[Object] */;
6526 val* var26 /* : String */;
6527 static val* varonce27;
6528 val* var28 /* : String */;
6529 char* var29 /* : NativeString */;
6530 long var30 /* : Int */;
6531 val* var31 /* : String */;
6532 var_recv = p0;
6533 var = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6534 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__MType__ctype]))(var) /* ctype on <var:MType>*/;
6535 if (varonce) {
6536 var2 = varonce;
6537 } else {
6538 var3 = "val*";
6539 var4 = 4;
6540 var5 = string__NativeString__to_s_with_length(var3, var4);
6541 var2 = var5;
6542 varonce = var2;
6543 }
6544 var6 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___33d_61d]))(var1, var2) /* != on <var1:String>*/;
6545 if (var6){
6546 goto RET_LABEL;
6547 } else {
6548 }
6549 if (varonce7) {
6550 var8 = varonce7;
6551 } else {
6552 var9 = "fprintf(stderr, \"BTD BUG: Dynamic type is %s, static type is %s\\n\", class_names[";
6553 var10 = 80;
6554 var11 = string__NativeString__to_s_with_length(var9, var10);
6555 var8 = var11;
6556 varonce7 = var8;
6557 }
6558 if (varonce12) {
6559 var13 = varonce12;
6560 } else {
6561 var14 = "->classid], \"";
6562 var15 = 13;
6563 var16 = string__NativeString__to_s_with_length(var14, var15);
6564 var13 = var16;
6565 varonce12 = var13;
6566 }
6567 var17 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_recv) /* mcasttype on <var_recv:RuntimeVariable>*/;
6568 if (varonce18) {
6569 var19 = varonce18;
6570 } else {
6571 var20 = "\");";
6572 var21 = 3;
6573 var22 = string__NativeString__to_s_with_length(var20, var21);
6574 var19 = var22;
6575 varonce18 = var19;
6576 }
6577 var23 = NEW_array__Array(&type_array__Arraykernel__Object);
6578 { /* var23 = array_instance Array[Object] */
6579 var24 = 5;
6580 var25 = NEW_array__NativeArray(var24, &type_array__NativeArraykernel__Object);
6581 ((struct instance_array__NativeArray*)var25)->values[0] = (val*) var8;
6582 ((struct instance_array__NativeArray*)var25)->values[1] = (val*) var_recv;
6583 ((struct instance_array__NativeArray*)var25)->values[2] = (val*) var13;
6584 ((struct instance_array__NativeArray*)var25)->values[3] = (val*) var17;
6585 ((struct instance_array__NativeArray*)var25)->values[4] = (val*) var19;
6586 ((void (*)(val*, val*, long))(var23->class->vft[COLOR_array__Array__with_native]))(var23, var25, var24) /* with_native on <var23:Array[Object]>*/;
6587 CHECK_NEW_array__Array(var23);
6588 }
6589 var26 = ((val* (*)(val*))(var23->class->vft[COLOR_string__Object__to_s]))(var23) /* to_s on <var23:Array[Object]>*/;
6590 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var26) /* add on <self:GlobalCompilerVisitor>*/;
6591 if (varonce27) {
6592 var28 = varonce27;
6593 } else {
6594 var29 = "exit(1);";
6595 var30 = 8;
6596 var31 = string__NativeString__to_s_with_length(var29, var30);
6597 var28 = var31;
6598 varonce27 = var28;
6599 }
6600 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var28) /* add on <self:GlobalCompilerVisitor>*/;
6601 RET_LABEL:;
6602 }
6603 /* method global_compiler#GlobalCompilerVisitor#bugtype for (self: Object, RuntimeVariable) */
6604 void VIRTUAL_global_compiler__GlobalCompilerVisitor__bugtype(val* self, val* p0) {
6605 global_compiler__GlobalCompilerVisitor__bugtype(self, p0);
6606 RET_LABEL:;
6607 }
6608 /* method global_compiler#GlobalCompilerVisitor#isset_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable): RuntimeVariable */
6609 val* global_compiler__GlobalCompilerVisitor__isset_attribute(val* self, val* p0, val* p1) {
6610 val* var /* : RuntimeVariable */;
6611 val* var_a /* var a: MAttribute */;
6612 val* var_recv /* var recv: RuntimeVariable */;
6613 val* var1 /* : Array[MClassType] */;
6614 val* var_types /* var types: Array[MClassType] */;
6615 val* var2 /* : MClassType */;
6616 val* var3 /* : RuntimeVariable */;
6617 val* var_res /* var res: RuntimeVariable */;
6618 short int var4 /* : Bool */;
6619 static val* varonce;
6620 val* var5 /* : String */;
6621 char* var6 /* : NativeString */;
6622 long var7 /* : Int */;
6623 val* var8 /* : String */;
6624 val* var9 /* : String */;
6625 static val* varonce10;
6626 val* var11 /* : String */;
6627 char* var12 /* : NativeString */;
6628 long var13 /* : Int */;
6629 val* var14 /* : String */;
6630 static val* varonce15;
6631 val* var16 /* : String */;
6632 char* var17 /* : NativeString */;
6633 long var18 /* : Int */;
6634 val* var19 /* : String */;
6635 val* var20 /* : Array[Object] */;
6636 long var21 /* : Int */;
6637 val* var22 /* : NativeArray[Object] */;
6638 val* var23 /* : String */;
6639 static val* varonce24;
6640 val* var25 /* : String */;
6641 char* var26 /* : NativeString */;
6642 long var27 /* : Int */;
6643 val* var28 /* : String */;
6644 static val* varonce29;
6645 val* var30 /* : String */;
6646 char* var31 /* : NativeString */;
6647 long var32 /* : Int */;
6648 val* var33 /* : String */;
6649 val* var34 /* : String */;
6650 static val* varonce35;
6651 val* var36 /* : String */;
6652 char* var37 /* : NativeString */;
6653 long var38 /* : Int */;
6654 val* var39 /* : String */;
6655 val* var40 /* : Array[Object] */;
6656 long var41 /* : Int */;
6657 val* var42 /* : NativeArray[Object] */;
6658 val* var43 /* : String */;
6659 static val* varonce44;
6660 val* var45 /* : String */;
6661 char* var46 /* : NativeString */;
6662 long var47 /* : Int */;
6663 val* var48 /* : String */;
6664 static val* varonce49;
6665 val* var50 /* : String */;
6666 char* var51 /* : NativeString */;
6667 long var52 /* : Int */;
6668 val* var53 /* : String */;
6669 val* var54 /* : Array[Object] */;
6670 long var55 /* : Int */;
6671 val* var56 /* : NativeArray[Object] */;
6672 val* var57 /* : String */;
6673 val* var58 /* : nullable Object */;
6674 val* var_last /* var last: MClassType */;
6675 val* var59 /* : Iterator[nullable Object] */;
6676 short int var60 /* : Bool */;
6677 val* var61 /* : nullable Object */;
6678 val* var_t /* var t: MClassType */;
6679 short int var62 /* : Bool */;
6680 val* var63 /* : AbstractCompiler */;
6681 short int var64 /* : Bool */;
6682 short int var65 /* : Bool */;
6683 short int var_ /* var : Bool */;
6684 short int var66 /* : Bool */;
6685 static val* varonce67;
6686 val* var68 /* : String */;
6687 char* var69 /* : NativeString */;
6688 long var70 /* : Int */;
6689 val* var71 /* : String */;
6690 val* var72 /* : AbstractCompiler */;
6691 val* var73 /* : String */;
6692 static val* varonce74;
6693 val* var75 /* : String */;
6694 char* var76 /* : NativeString */;
6695 long var77 /* : Int */;
6696 val* var78 /* : String */;
6697 val* var79 /* : Array[Object] */;
6698 long var80 /* : Int */;
6699 val* var81 /* : NativeArray[Object] */;
6700 val* var82 /* : String */;
6701 static val* varonce83;
6702 val* var84 /* : String */;
6703 char* var85 /* : NativeString */;
6704 long var86 /* : Int */;
6705 val* var87 /* : String */;
6706 val* var88 /* : AbstractCompiler */;
6707 val* var89 /* : String */;
6708 static val* varonce90;
6709 val* var91 /* : String */;
6710 char* var92 /* : NativeString */;
6711 long var93 /* : Int */;
6712 val* var94 /* : String */;
6713 val* var95 /* : Array[Object] */;
6714 long var96 /* : Int */;
6715 val* var97 /* : NativeArray[Object] */;
6716 val* var98 /* : String */;
6717 val* var99 /* : RuntimeVariable */;
6718 val* var_recv2 /* var recv2: RuntimeVariable */;
6719 val* var100 /* : MPropDef */;
6720 val* var101 /* : nullable MType */;
6721 val* var_ta /* var ta: MType */;
6722 val* var102 /* : MType */;
6723 static val* varonce103;
6724 val* var104 /* : String */;
6725 char* var105 /* : NativeString */;
6726 long var106 /* : Int */;
6727 val* var107 /* : String */;
6728 val* var108 /* : String */;
6729 static val* varonce109;
6730 val* var110 /* : String */;
6731 char* var111 /* : NativeString */;
6732 long var112 /* : Int */;
6733 val* var113 /* : String */;
6734 static val* varonce114;
6735 val* var115 /* : String */;
6736 char* var116 /* : NativeString */;
6737 long var117 /* : Int */;
6738 val* var118 /* : String */;
6739 val* var119 /* : MPropDef */;
6740 val* var120 /* : String */;
6741 val* var121 /* : Array[Object] */;
6742 long var122 /* : Int */;
6743 val* var123 /* : NativeArray[Object] */;
6744 val* var124 /* : String */;
6745 val* var125 /* : RuntimeVariable */;
6746 val* var_attr /* var attr: RuntimeVariable */;
6747 short int var126 /* : Bool */;
6748 int cltype;
6749 int idtype;
6750 short int var127 /* : Bool */;
6751 val* var128 /* : String */;
6752 static val* varonce129;
6753 val* var130 /* : String */;
6754 char* var131 /* : NativeString */;
6755 long var132 /* : Int */;
6756 val* var133 /* : String */;
6757 short int var134 /* : Bool */;
6758 static val* varonce135;
6759 val* var136 /* : String */;
6760 char* var137 /* : NativeString */;
6761 long var138 /* : Int */;
6762 val* var139 /* : String */;
6763 static val* varonce140;
6764 val* var141 /* : String */;
6765 char* var142 /* : NativeString */;
6766 long var143 /* : Int */;
6767 val* var144 /* : String */;
6768 val* var145 /* : Array[Object] */;
6769 long var146 /* : Int */;
6770 val* var147 /* : NativeArray[Object] */;
6771 val* var148 /* : String */;
6772 static val* varonce149;
6773 val* var150 /* : String */;
6774 char* var151 /* : NativeString */;
6775 long var152 /* : Int */;
6776 val* var153 /* : String */;
6777 val* var154 /* : Array[Object] */;
6778 long var155 /* : Int */;
6779 val* var156 /* : NativeArray[Object] */;
6780 val* var157 /* : String */;
6781 static val* varonce158;
6782 val* var159 /* : String */;
6783 char* var160 /* : NativeString */;
6784 long var161 /* : Int */;
6785 val* var162 /* : String */;
6786 val* var163 /* : AbstractCompiler */;
6787 short int var164 /* : Bool */;
6788 static val* varonce165;
6789 val* var166 /* : String */;
6790 char* var167 /* : NativeString */;
6791 long var168 /* : Int */;
6792 val* var169 /* : String */;
6793 static val* varonce170;
6794 val* var171 /* : String */;
6795 char* var172 /* : NativeString */;
6796 long var173 /* : Int */;
6797 val* var174 /* : String */;
6798 var_a = p0;
6799 var_recv = p1;
6800 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
6801 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
6802 var_types = var1;
6803 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
6804 var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var2) /* new_var on <self:GlobalCompilerVisitor>*/;
6805 var_res = var3;
6806 var4 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
6807 if (var4){
6808 if (varonce) {
6809 var5 = varonce;
6810 } else {
6811 var6 = "/*BUG: no live types for ";
6812 var7 = 25;
6813 var8 = string__NativeString__to_s_with_length(var6, var7);
6814 var5 = var8;
6815 varonce = var5;
6816 }
6817 var9 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
6818 if (varonce10) {
6819 var11 = varonce10;
6820 } else {
6821 var12 = " . ";
6822 var13 = 3;
6823 var14 = string__NativeString__to_s_with_length(var12, var13);
6824 var11 = var14;
6825 varonce10 = var11;
6826 }
6827 if (varonce15) {
6828 var16 = varonce15;
6829 } else {
6830 var17 = "*/";
6831 var18 = 2;
6832 var19 = string__NativeString__to_s_with_length(var17, var18);
6833 var16 = var19;
6834 varonce15 = var16;
6835 }
6836 var20 = NEW_array__Array(&type_array__Arraykernel__Object);
6837 { /* var20 = array_instance Array[Object] */
6838 var21 = 5;
6839 var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
6840 ((struct instance_array__NativeArray*)var22)->values[0] = (val*) var5;
6841 ((struct instance_array__NativeArray*)var22)->values[1] = (val*) var9;
6842 ((struct instance_array__NativeArray*)var22)->values[2] = (val*) var11;
6843 ((struct instance_array__NativeArray*)var22)->values[3] = (val*) var_a;
6844 ((struct instance_array__NativeArray*)var22)->values[4] = (val*) var16;
6845 ((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
6846 CHECK_NEW_array__Array(var20);
6847 }
6848 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
6849 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var23) /* add on <self:GlobalCompilerVisitor>*/;
6850 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
6851 var = var_res;
6852 goto RET_LABEL;
6853 } else {
6854 }
6855 if (varonce24) {
6856 var25 = varonce24;
6857 } else {
6858 var26 = "/* isset ";
6859 var27 = 9;
6860 var28 = string__NativeString__to_s_with_length(var26, var27);
6861 var25 = var28;
6862 varonce24 = var25;
6863 }
6864 if (varonce29) {
6865 var30 = varonce29;
6866 } else {
6867 var31 = " on ";
6868 var32 = 4;
6869 var33 = string__NativeString__to_s_with_length(var31, var32);
6870 var30 = var33;
6871 varonce29 = var30;
6872 }
6873 var34 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
6874 if (varonce35) {
6875 var36 = varonce35;
6876 } else {
6877 var37 = " */";
6878 var38 = 3;
6879 var39 = string__NativeString__to_s_with_length(var37, var38);
6880 var36 = var39;
6881 varonce35 = var36;
6882 }
6883 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
6884 { /* var40 = array_instance Array[Object] */
6885 var41 = 5;
6886 var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
6887 ((struct instance_array__NativeArray*)var42)->values[0] = (val*) var25;
6888 ((struct instance_array__NativeArray*)var42)->values[1] = (val*) var_a;
6889 ((struct instance_array__NativeArray*)var42)->values[2] = (val*) var30;
6890 ((struct instance_array__NativeArray*)var42)->values[3] = (val*) var34;
6891 ((struct instance_array__NativeArray*)var42)->values[4] = (val*) var36;
6892 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
6893 CHECK_NEW_array__Array(var40);
6894 }
6895 var43 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
6896 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var43) /* add on <self:GlobalCompilerVisitor>*/;
6897 if (varonce44) {
6898 var45 = varonce44;
6899 } else {
6900 var46 = "switch(";
6901 var47 = 7;
6902 var48 = string__NativeString__to_s_with_length(var46, var47);
6903 var45 = var48;
6904 varonce44 = var45;
6905 }
6906 if (varonce49) {
6907 var50 = varonce49;
6908 } else {
6909 var51 = "->classid) {";
6910 var52 = 12;
6911 var53 = string__NativeString__to_s_with_length(var51, var52);
6912 var50 = var53;
6913 varonce49 = var50;
6914 }
6915 var54 = NEW_array__Array(&type_array__Arraykernel__Object);
6916 { /* var54 = array_instance Array[Object] */
6917 var55 = 3;
6918 var56 = NEW_array__NativeArray(var55, &type_array__NativeArraykernel__Object);
6919 ((struct instance_array__NativeArray*)var56)->values[0] = (val*) var45;
6920 ((struct instance_array__NativeArray*)var56)->values[1] = (val*) var_recv;
6921 ((struct instance_array__NativeArray*)var56)->values[2] = (val*) var50;
6922 ((void (*)(val*, val*, long))(var54->class->vft[COLOR_array__Array__with_native]))(var54, var56, var55) /* with_native on <var54:Array[Object]>*/;
6923 CHECK_NEW_array__Array(var54);
6924 }
6925 var57 = ((val* (*)(val*))(var54->class->vft[COLOR_string__Object__to_s]))(var54) /* to_s on <var54:Array[Object]>*/;
6926 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var57) /* add on <self:GlobalCompilerVisitor>*/;
6927 var58 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
6928 var_last = var58;
6929 var59 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
6930 for(;;) {
6931 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var59) /* is_ok on <var59:Iterator[nullable Object]>*/;
6932 if(!var60) break;
6933 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__item]))(var59) /* item on <var59:Iterator[nullable Object]>*/;
6934 var_t = var61;
6935 var63 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6936 var64 = ((short int (*)(val*))(var63->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var63) /* hardening on <var63:AbstractCompiler(GlobalCompiler)>*/;
6937 var65 = !var64;
6938 var_ = var65;
6939 if (var65){
6940 var66 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
6941 var62 = var66;
6942 } else {
6943 var62 = var_;
6944 }
6945 if (var62){
6946 if (varonce67) {
6947 var68 = varonce67;
6948 } else {
6949 var69 = "default: /*";
6950 var70 = 11;
6951 var71 = string__NativeString__to_s_with_length(var69, var70);
6952 var68 = var71;
6953 varonce67 = var68;
6954 }
6955 var72 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6956 var73 = ((val* (*)(val*, val*))(var72->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var72, var_t) /* classid on <var72:AbstractCompiler(GlobalCompiler)>*/;
6957 if (varonce74) {
6958 var75 = varonce74;
6959 } else {
6960 var76 = "*/";
6961 var77 = 2;
6962 var78 = string__NativeString__to_s_with_length(var76, var77);
6963 var75 = var78;
6964 varonce74 = var75;
6965 }
6966 var79 = NEW_array__Array(&type_array__Arraykernel__Object);
6967 { /* var79 = array_instance Array[Object] */
6968 var80 = 3;
6969 var81 = NEW_array__NativeArray(var80, &type_array__NativeArraykernel__Object);
6970 ((struct instance_array__NativeArray*)var81)->values[0] = (val*) var68;
6971 ((struct instance_array__NativeArray*)var81)->values[1] = (val*) var73;
6972 ((struct instance_array__NativeArray*)var81)->values[2] = (val*) var75;
6973 ((void (*)(val*, val*, long))(var79->class->vft[COLOR_array__Array__with_native]))(var79, var81, var80) /* with_native on <var79:Array[Object]>*/;
6974 CHECK_NEW_array__Array(var79);
6975 }
6976 var82 = ((val* (*)(val*))(var79->class->vft[COLOR_string__Object__to_s]))(var79) /* to_s on <var79:Array[Object]>*/;
6977 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var82) /* add on <self:GlobalCompilerVisitor>*/;
6978 } else {
6979 if (varonce83) {
6980 var84 = varonce83;
6981 } else {
6982 var85 = "case ";
6983 var86 = 5;
6984 var87 = string__NativeString__to_s_with_length(var85, var86);
6985 var84 = var87;
6986 varonce83 = var84;
6987 }
6988 var88 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
6989 var89 = ((val* (*)(val*, val*))(var88->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var88, var_t) /* classid on <var88:AbstractCompiler(GlobalCompiler)>*/;
6990 if (varonce90) {
6991 var91 = varonce90;
6992 } else {
6993 var92 = ":";
6994 var93 = 1;
6995 var94 = string__NativeString__to_s_with_length(var92, var93);
6996 var91 = var94;
6997 varonce90 = var91;
6998 }
6999 var95 = NEW_array__Array(&type_array__Arraykernel__Object);
7000 { /* var95 = array_instance Array[Object] */
7001 var96 = 3;
7002 var97 = NEW_array__NativeArray(var96, &type_array__NativeArraykernel__Object);
7003 ((struct instance_array__NativeArray*)var97)->values[0] = (val*) var84;
7004 ((struct instance_array__NativeArray*)var97)->values[1] = (val*) var89;
7005 ((struct instance_array__NativeArray*)var97)->values[2] = (val*) var91;
7006 ((void (*)(val*, val*, long))(var95->class->vft[COLOR_array__Array__with_native]))(var95, var97, var96) /* with_native on <var95:Array[Object]>*/;
7007 CHECK_NEW_array__Array(var95);
7008 }
7009 var98 = ((val* (*)(val*))(var95->class->vft[COLOR_string__Object__to_s]))(var95) /* to_s on <var95:Array[Object]>*/;
7010 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var98) /* add on <self:GlobalCompilerVisitor>*/;
7011 }
7012 var99 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
7013 var_recv2 = var99;
7014 var100 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7015 var101 = ((val* (*)(val*))(var100->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var100) /* static_mtype on <var100:MPropDef(MAttributeDef)>*/;
7016 if (var101 == NULL) {
7017 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 599);
7018 exit(1);
7019 }
7020 var_ta = var101;
7021 var102 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7022 var_ta = var102;
7023 if (varonce103) {
7024 var104 = varonce103;
7025 } else {
7026 var105 = "((struct ";
7027 var106 = 9;
7028 var107 = string__NativeString__to_s_with_length(var105, var106);
7029 var104 = var107;
7030 varonce103 = var104;
7031 }
7032 var108 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
7033 if (varonce109) {
7034 var110 = varonce109;
7035 } else {
7036 var111 = "*)";
7037 var112 = 2;
7038 var113 = string__NativeString__to_s_with_length(var111, var112);
7039 var110 = var113;
7040 varonce109 = var110;
7041 }
7042 if (varonce114) {
7043 var115 = varonce114;
7044 } else {
7045 var116 = ")->";
7046 var117 = 3;
7047 var118 = string__NativeString__to_s_with_length(var116, var117);
7048 var115 = var118;
7049 varonce114 = var115;
7050 }
7051 var119 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7052 var120 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var119) /* c_name on <var119:MPropDef(MAttributeDef)>*/;
7053 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
7054 { /* var121 = array_instance Array[Object] */
7055 var122 = 6;
7056 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
7057 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var104;
7058 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var108;
7059 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var110;
7060 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var_recv;
7061 ((struct instance_array__NativeArray*)var123)->values[4] = (val*) var115;
7062 ((struct instance_array__NativeArray*)var123)->values[5] = (val*) var120;
7063 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
7064 CHECK_NEW_array__Array(var121);
7065 }
7066 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
7067 var125 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var124, var_ta) /* new_expr on <self:GlobalCompilerVisitor>*/;
7068 var_attr = var125;
7069 /* <var_ta:MType> isa MNullableType */
7070 cltype = type_model__MNullableType.color;
7071 idtype = type_model__MNullableType.id;
7072 if(cltype >= var_ta->type->table_size) {
7073 var126 = 0;
7074 } else {
7075 var126 = var_ta->type->type_table[cltype] == idtype;
7076 }
7077 var127 = !var126;
7078 if (var127){
7079 var128 = ((val* (*)(val*))(var_ta->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_ta) /* ctype on <var_ta:MType>*/;
7080 if (varonce129) {
7081 var130 = varonce129;
7082 } else {
7083 var131 = "val*";
7084 var132 = 4;
7085 var133 = string__NativeString__to_s_with_length(var131, var132);
7086 var130 = var133;
7087 varonce129 = var130;
7088 }
7089 var134 = ((short int (*)(val*, val*))(var128->class->vft[COLOR_kernel__Object___61d_61d]))(var128, var130) /* == on <var128:String>*/;
7090 if (var134){
7091 if (varonce135) {
7092 var136 = varonce135;
7093 } else {
7094 var137 = " = (";
7095 var138 = 4;
7096 var139 = string__NativeString__to_s_with_length(var137, var138);
7097 var136 = var139;
7098 varonce135 = var136;
7099 }
7100 if (varonce140) {
7101 var141 = varonce140;
7102 } else {
7103 var142 = " != NULL);";
7104 var143 = 10;
7105 var144 = string__NativeString__to_s_with_length(var142, var143);
7106 var141 = var144;
7107 varonce140 = var141;
7108 }
7109 var145 = NEW_array__Array(&type_array__Arraykernel__Object);
7110 { /* var145 = array_instance Array[Object] */
7111 var146 = 4;
7112 var147 = NEW_array__NativeArray(var146, &type_array__NativeArraykernel__Object);
7113 ((struct instance_array__NativeArray*)var147)->values[0] = (val*) var_res;
7114 ((struct instance_array__NativeArray*)var147)->values[1] = (val*) var136;
7115 ((struct instance_array__NativeArray*)var147)->values[2] = (val*) var_attr;
7116 ((struct instance_array__NativeArray*)var147)->values[3] = (val*) var141;
7117 ((void (*)(val*, val*, long))(var145->class->vft[COLOR_array__Array__with_native]))(var145, var147, var146) /* with_native on <var145:Array[Object]>*/;
7118 CHECK_NEW_array__Array(var145);
7119 }
7120 var148 = ((val* (*)(val*))(var145->class->vft[COLOR_string__Object__to_s]))(var145) /* to_s on <var145:Array[Object]>*/;
7121 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var148) /* add on <self:GlobalCompilerVisitor>*/;
7122 } else {
7123 if (varonce149) {
7124 var150 = varonce149;
7125 } else {
7126 var151 = " = 1; /*NOTYET isset on primitive attributes*/";
7127 var152 = 46;
7128 var153 = string__NativeString__to_s_with_length(var151, var152);
7129 var150 = var153;
7130 varonce149 = var150;
7131 }
7132 var154 = NEW_array__Array(&type_array__Arraykernel__Object);
7133 { /* var154 = array_instance Array[Object] */
7134 var155 = 2;
7135 var156 = NEW_array__NativeArray(var155, &type_array__NativeArraykernel__Object);
7136 ((struct instance_array__NativeArray*)var156)->values[0] = (val*) var_res;
7137 ((struct instance_array__NativeArray*)var156)->values[1] = (val*) var150;
7138 ((void (*)(val*, val*, long))(var154->class->vft[COLOR_array__Array__with_native]))(var154, var156, var155) /* with_native on <var154:Array[Object]>*/;
7139 CHECK_NEW_array__Array(var154);
7140 }
7141 var157 = ((val* (*)(val*))(var154->class->vft[COLOR_string__Object__to_s]))(var154) /* to_s on <var154:Array[Object]>*/;
7142 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var157) /* add on <self:GlobalCompilerVisitor>*/;
7143 }
7144 } else {
7145 }
7146 if (varonce158) {
7147 var159 = varonce158;
7148 } else {
7149 var160 = "break;";
7150 var161 = 6;
7151 var162 = string__NativeString__to_s_with_length(var160, var161);
7152 var159 = var162;
7153 varonce158 = var159;
7154 }
7155 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var159) /* add on <self:GlobalCompilerVisitor>*/;
7156 CONTINUE_label: (void)0;
7157 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__next]))(var59) /* next on <var59:Iterator[nullable Object]>*/;
7158 }
7159 BREAK_label: (void)0;
7160 var163 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7161 var164 = ((short int (*)(val*))(var163->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var163) /* hardening on <var163:AbstractCompiler(GlobalCompiler)>*/;
7162 if (var164){
7163 if (varonce165) {
7164 var166 = varonce165;
7165 } else {
7166 var167 = "default: /* Bug */";
7167 var168 = 18;
7168 var169 = string__NativeString__to_s_with_length(var167, var168);
7169 var166 = var169;
7170 varonce165 = var166;
7171 }
7172 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var166) /* add on <self:GlobalCompilerVisitor>*/;
7173 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7174 } else {
7175 }
7176 if (varonce170) {
7177 var171 = varonce170;
7178 } else {
7179 var172 = "}";
7180 var173 = 1;
7181 var174 = string__NativeString__to_s_with_length(var172, var173);
7182 var171 = var174;
7183 varonce170 = var171;
7184 }
7185 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
7186 var = var_res;
7187 goto RET_LABEL;
7188 RET_LABEL:;
7189 return var;
7190 }
7191 /* method global_compiler#GlobalCompilerVisitor#isset_attribute for (self: Object, MAttribute, RuntimeVariable): RuntimeVariable */
7192 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__isset_attribute(val* self, val* p0, val* p1) {
7193 val* var /* : RuntimeVariable */;
7194 val* var1 /* : RuntimeVariable */;
7195 var1 = global_compiler__GlobalCompilerVisitor__isset_attribute(self, p0, p1);
7196 var = var1;
7197 RET_LABEL:;
7198 return var;
7199 }
7200 /* method global_compiler#GlobalCompilerVisitor#read_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable): RuntimeVariable */
7201 val* global_compiler__GlobalCompilerVisitor__read_attribute(val* self, val* p0, val* p1) {
7202 val* var /* : RuntimeVariable */;
7203 val* var_a /* var a: MAttribute */;
7204 val* var_recv /* var recv: RuntimeVariable */;
7205 val* var1 /* : Array[MClassType] */;
7206 val* var_types /* var types: Array[MClassType] */;
7207 val* var2 /* : MPropDef */;
7208 val* var3 /* : nullable MType */;
7209 val* var_ret /* var ret: MType */;
7210 val* var4 /* : MType */;
7211 val* var5 /* : RuntimeVariable */;
7212 val* var_res /* var res: RuntimeVariable */;
7213 short int var6 /* : Bool */;
7214 static val* varonce;
7215 val* var7 /* : String */;
7216 char* var8 /* : NativeString */;
7217 long var9 /* : Int */;
7218 val* var10 /* : String */;
7219 val* var11 /* : String */;
7220 static val* varonce12;
7221 val* var13 /* : String */;
7222 char* var14 /* : NativeString */;
7223 long var15 /* : Int */;
7224 val* var16 /* : String */;
7225 static val* varonce17;
7226 val* var18 /* : String */;
7227 char* var19 /* : NativeString */;
7228 long var20 /* : Int */;
7229 val* var21 /* : String */;
7230 val* var22 /* : Array[Object] */;
7231 long var23 /* : Int */;
7232 val* var24 /* : NativeArray[Object] */;
7233 val* var25 /* : String */;
7234 static val* varonce26;
7235 val* var27 /* : String */;
7236 char* var28 /* : NativeString */;
7237 long var29 /* : Int */;
7238 val* var30 /* : String */;
7239 static val* varonce31;
7240 val* var32 /* : String */;
7241 char* var33 /* : NativeString */;
7242 long var34 /* : Int */;
7243 val* var35 /* : String */;
7244 val* var36 /* : String */;
7245 static val* varonce37;
7246 val* var38 /* : String */;
7247 char* var39 /* : NativeString */;
7248 long var40 /* : Int */;
7249 val* var41 /* : String */;
7250 val* var42 /* : Array[Object] */;
7251 long var43 /* : Int */;
7252 val* var44 /* : NativeArray[Object] */;
7253 val* var45 /* : String */;
7254 static val* varonce46;
7255 val* var47 /* : String */;
7256 char* var48 /* : NativeString */;
7257 long var49 /* : Int */;
7258 val* var50 /* : String */;
7259 static val* varonce51;
7260 val* var52 /* : String */;
7261 char* var53 /* : NativeString */;
7262 long var54 /* : Int */;
7263 val* var55 /* : String */;
7264 val* var56 /* : Array[Object] */;
7265 long var57 /* : Int */;
7266 val* var58 /* : NativeArray[Object] */;
7267 val* var59 /* : String */;
7268 val* var60 /* : nullable Object */;
7269 val* var_last /* var last: MClassType */;
7270 val* var61 /* : Iterator[nullable Object] */;
7271 short int var62 /* : Bool */;
7272 val* var63 /* : nullable Object */;
7273 val* var_t /* var t: MClassType */;
7274 short int var64 /* : Bool */;
7275 val* var65 /* : AbstractCompiler */;
7276 short int var66 /* : Bool */;
7277 short int var67 /* : Bool */;
7278 short int var_ /* var : Bool */;
7279 short int var68 /* : Bool */;
7280 static val* varonce69;
7281 val* var70 /* : String */;
7282 char* var71 /* : NativeString */;
7283 long var72 /* : Int */;
7284 val* var73 /* : String */;
7285 val* var74 /* : AbstractCompiler */;
7286 val* var75 /* : String */;
7287 static val* varonce76;
7288 val* var77 /* : String */;
7289 char* var78 /* : NativeString */;
7290 long var79 /* : Int */;
7291 val* var80 /* : String */;
7292 val* var81 /* : Array[Object] */;
7293 long var82 /* : Int */;
7294 val* var83 /* : NativeArray[Object] */;
7295 val* var84 /* : String */;
7296 static val* varonce85;
7297 val* var86 /* : String */;
7298 char* var87 /* : NativeString */;
7299 long var88 /* : Int */;
7300 val* var89 /* : String */;
7301 val* var90 /* : AbstractCompiler */;
7302 val* var91 /* : String */;
7303 static val* varonce92;
7304 val* var93 /* : String */;
7305 char* var94 /* : NativeString */;
7306 long var95 /* : Int */;
7307 val* var96 /* : String */;
7308 val* var97 /* : Array[Object] */;
7309 long var98 /* : Int */;
7310 val* var99 /* : NativeArray[Object] */;
7311 val* var100 /* : String */;
7312 val* var101 /* : RuntimeVariable */;
7313 val* var_recv2 /* var recv2: RuntimeVariable */;
7314 val* var102 /* : MPropDef */;
7315 val* var103 /* : nullable MType */;
7316 val* var_ta /* var ta: MType */;
7317 val* var104 /* : MType */;
7318 static val* varonce105;
7319 val* var106 /* : String */;
7320 char* var107 /* : NativeString */;
7321 long var108 /* : Int */;
7322 val* var109 /* : String */;
7323 val* var110 /* : String */;
7324 static val* varonce111;
7325 val* var112 /* : String */;
7326 char* var113 /* : NativeString */;
7327 long var114 /* : Int */;
7328 val* var115 /* : String */;
7329 static val* varonce116;
7330 val* var117 /* : String */;
7331 char* var118 /* : NativeString */;
7332 long var119 /* : Int */;
7333 val* var120 /* : String */;
7334 val* var121 /* : MPropDef */;
7335 val* var122 /* : String */;
7336 val* var123 /* : Array[Object] */;
7337 long var124 /* : Int */;
7338 val* var125 /* : NativeArray[Object] */;
7339 val* var126 /* : String */;
7340 val* var127 /* : RuntimeVariable */;
7341 val* var_res2 /* var res2: RuntimeVariable */;
7342 short int var128 /* : Bool */;
7343 short int var129 /* : Bool */;
7344 int cltype;
7345 int idtype;
7346 short int var130 /* : Bool */;
7347 short int var_131 /* var : Bool */;
7348 val* var132 /* : AbstractCompiler */;
7349 val* var133 /* : ModelBuilder */;
7350 val* var134 /* : ToolContext */;
7351 val* var135 /* : OptionBool */;
7352 val* var136 /* : nullable Object */;
7353 short int var137 /* : Bool */;
7354 short int var138 /* : Bool */;
7355 val* var139 /* : String */;
7356 static val* varonce140;
7357 val* var141 /* : String */;
7358 char* var142 /* : NativeString */;
7359 long var143 /* : Int */;
7360 val* var144 /* : String */;
7361 short int var145 /* : Bool */;
7362 static val* varonce146;
7363 val* var147 /* : String */;
7364 char* var148 /* : NativeString */;
7365 long var149 /* : Int */;
7366 val* var150 /* : String */;
7367 static val* varonce151;
7368 val* var152 /* : String */;
7369 char* var153 /* : NativeString */;
7370 long var154 /* : Int */;
7371 val* var155 /* : String */;
7372 val* var156 /* : Array[Object] */;
7373 long var157 /* : Int */;
7374 val* var158 /* : NativeArray[Object] */;
7375 val* var159 /* : String */;
7376 static val* varonce160;
7377 val* var161 /* : String */;
7378 char* var162 /* : NativeString */;
7379 long var163 /* : Int */;
7380 val* var164 /* : String */;
7381 val* var165 /* : String */;
7382 val* var166 /* : Array[Object] */;
7383 long var167 /* : Int */;
7384 val* var168 /* : NativeArray[Object] */;
7385 val* var169 /* : String */;
7386 static val* varonce170;
7387 val* var171 /* : String */;
7388 char* var172 /* : NativeString */;
7389 long var173 /* : Int */;
7390 val* var174 /* : String */;
7391 static val* varonce175;
7392 val* var176 /* : String */;
7393 char* var177 /* : NativeString */;
7394 long var178 /* : Int */;
7395 val* var179 /* : String */;
7396 static val* varonce180;
7397 val* var181 /* : String */;
7398 char* var182 /* : NativeString */;
7399 long var183 /* : Int */;
7400 val* var184 /* : String */;
7401 val* var185 /* : AbstractCompiler */;
7402 short int var186 /* : Bool */;
7403 static val* varonce187;
7404 val* var188 /* : String */;
7405 char* var189 /* : NativeString */;
7406 long var190 /* : Int */;
7407 val* var191 /* : String */;
7408 static val* varonce192;
7409 val* var193 /* : String */;
7410 char* var194 /* : NativeString */;
7411 long var195 /* : Int */;
7412 val* var196 /* : String */;
7413 var_a = p0;
7414 var_recv = p1;
7415 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
7416 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
7417 var_types = var1;
7418 var2 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7419 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var2) /* static_mtype on <var2:MPropDef(MAttributeDef)>*/;
7420 if (var3 == NULL) {
7421 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 626);
7422 exit(1);
7423 }
7424 var_ret = var3;
7425 var4 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ret, var_recv) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7426 var_ret = var4;
7427 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var_ret) /* new_var on <self:GlobalCompilerVisitor>*/;
7428 var_res = var5;
7429 var6 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
7430 if (var6){
7431 if (varonce) {
7432 var7 = varonce;
7433 } else {
7434 var8 = "/*BUG: no live types for ";
7435 var9 = 25;
7436 var10 = string__NativeString__to_s_with_length(var8, var9);
7437 var7 = var10;
7438 varonce = var7;
7439 }
7440 var11 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7441 if (varonce12) {
7442 var13 = varonce12;
7443 } else {
7444 var14 = " . ";
7445 var15 = 3;
7446 var16 = string__NativeString__to_s_with_length(var14, var15);
7447 var13 = var16;
7448 varonce12 = var13;
7449 }
7450 if (varonce17) {
7451 var18 = varonce17;
7452 } else {
7453 var19 = "*/";
7454 var20 = 2;
7455 var21 = string__NativeString__to_s_with_length(var19, var20);
7456 var18 = var21;
7457 varonce17 = var18;
7458 }
7459 var22 = NEW_array__Array(&type_array__Arraykernel__Object);
7460 { /* var22 = array_instance Array[Object] */
7461 var23 = 5;
7462 var24 = NEW_array__NativeArray(var23, &type_array__NativeArraykernel__Object);
7463 ((struct instance_array__NativeArray*)var24)->values[0] = (val*) var7;
7464 ((struct instance_array__NativeArray*)var24)->values[1] = (val*) var11;
7465 ((struct instance_array__NativeArray*)var24)->values[2] = (val*) var13;
7466 ((struct instance_array__NativeArray*)var24)->values[3] = (val*) var_a;
7467 ((struct instance_array__NativeArray*)var24)->values[4] = (val*) var18;
7468 ((void (*)(val*, val*, long))(var22->class->vft[COLOR_array__Array__with_native]))(var22, var24, var23) /* with_native on <var22:Array[Object]>*/;
7469 CHECK_NEW_array__Array(var22);
7470 }
7471 var25 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__to_s]))(var22) /* to_s on <var22:Array[Object]>*/;
7472 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var25) /* add on <self:GlobalCompilerVisitor>*/;
7473 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7474 var = var_res;
7475 goto RET_LABEL;
7476 } else {
7477 }
7478 if (varonce26) {
7479 var27 = varonce26;
7480 } else {
7481 var28 = "/* read ";
7482 var29 = 8;
7483 var30 = string__NativeString__to_s_with_length(var28, var29);
7484 var27 = var30;
7485 varonce26 = var27;
7486 }
7487 if (varonce31) {
7488 var32 = varonce31;
7489 } else {
7490 var33 = " on ";
7491 var34 = 4;
7492 var35 = string__NativeString__to_s_with_length(var33, var34);
7493 var32 = var35;
7494 varonce31 = var32;
7495 }
7496 var36 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
7497 if (varonce37) {
7498 var38 = varonce37;
7499 } else {
7500 var39 = " */";
7501 var40 = 3;
7502 var41 = string__NativeString__to_s_with_length(var39, var40);
7503 var38 = var41;
7504 varonce37 = var38;
7505 }
7506 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
7507 { /* var42 = array_instance Array[Object] */
7508 var43 = 5;
7509 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
7510 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var27;
7511 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_a;
7512 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var32;
7513 ((struct instance_array__NativeArray*)var44)->values[3] = (val*) var36;
7514 ((struct instance_array__NativeArray*)var44)->values[4] = (val*) var38;
7515 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
7516 CHECK_NEW_array__Array(var42);
7517 }
7518 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
7519 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var45) /* add on <self:GlobalCompilerVisitor>*/;
7520 if (varonce46) {
7521 var47 = varonce46;
7522 } else {
7523 var48 = "switch(";
7524 var49 = 7;
7525 var50 = string__NativeString__to_s_with_length(var48, var49);
7526 var47 = var50;
7527 varonce46 = var47;
7528 }
7529 if (varonce51) {
7530 var52 = varonce51;
7531 } else {
7532 var53 = "->classid) {";
7533 var54 = 12;
7534 var55 = string__NativeString__to_s_with_length(var53, var54);
7535 var52 = var55;
7536 varonce51 = var52;
7537 }
7538 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
7539 { /* var56 = array_instance Array[Object] */
7540 var57 = 3;
7541 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
7542 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var47;
7543 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var_recv;
7544 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var52;
7545 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
7546 CHECK_NEW_array__Array(var56);
7547 }
7548 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
7549 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
7550 var60 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
7551 var_last = var60;
7552 var61 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
7553 for(;;) {
7554 var62 = ((short int (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var61) /* is_ok on <var61:Iterator[nullable Object]>*/;
7555 if(!var62) break;
7556 var63 = ((val* (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__item]))(var61) /* item on <var61:Iterator[nullable Object]>*/;
7557 var_t = var63;
7558 var65 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7559 var66 = ((short int (*)(val*))(var65->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var65) /* hardening on <var65:AbstractCompiler(GlobalCompiler)>*/;
7560 var67 = !var66;
7561 var_ = var67;
7562 if (var67){
7563 var68 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
7564 var64 = var68;
7565 } else {
7566 var64 = var_;
7567 }
7568 if (var64){
7569 if (varonce69) {
7570 var70 = varonce69;
7571 } else {
7572 var71 = "default: /*";
7573 var72 = 11;
7574 var73 = string__NativeString__to_s_with_length(var71, var72);
7575 var70 = var73;
7576 varonce69 = var70;
7577 }
7578 var74 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7579 var75 = ((val* (*)(val*, val*))(var74->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var74, var_t) /* classid on <var74:AbstractCompiler(GlobalCompiler)>*/;
7580 if (varonce76) {
7581 var77 = varonce76;
7582 } else {
7583 var78 = "*/";
7584 var79 = 2;
7585 var80 = string__NativeString__to_s_with_length(var78, var79);
7586 var77 = var80;
7587 varonce76 = var77;
7588 }
7589 var81 = NEW_array__Array(&type_array__Arraykernel__Object);
7590 { /* var81 = array_instance Array[Object] */
7591 var82 = 3;
7592 var83 = NEW_array__NativeArray(var82, &type_array__NativeArraykernel__Object);
7593 ((struct instance_array__NativeArray*)var83)->values[0] = (val*) var70;
7594 ((struct instance_array__NativeArray*)var83)->values[1] = (val*) var75;
7595 ((struct instance_array__NativeArray*)var83)->values[2] = (val*) var77;
7596 ((void (*)(val*, val*, long))(var81->class->vft[COLOR_array__Array__with_native]))(var81, var83, var82) /* with_native on <var81:Array[Object]>*/;
7597 CHECK_NEW_array__Array(var81);
7598 }
7599 var84 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__to_s]))(var81) /* to_s on <var81:Array[Object]>*/;
7600 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var84) /* add on <self:GlobalCompilerVisitor>*/;
7601 } else {
7602 if (varonce85) {
7603 var86 = varonce85;
7604 } else {
7605 var87 = "case ";
7606 var88 = 5;
7607 var89 = string__NativeString__to_s_with_length(var87, var88);
7608 var86 = var89;
7609 varonce85 = var86;
7610 }
7611 var90 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7612 var91 = ((val* (*)(val*, val*))(var90->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var90, var_t) /* classid on <var90:AbstractCompiler(GlobalCompiler)>*/;
7613 if (varonce92) {
7614 var93 = varonce92;
7615 } else {
7616 var94 = ":";
7617 var95 = 1;
7618 var96 = string__NativeString__to_s_with_length(var94, var95);
7619 var93 = var96;
7620 varonce92 = var93;
7621 }
7622 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
7623 { /* var97 = array_instance Array[Object] */
7624 var98 = 3;
7625 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
7626 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var86;
7627 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var91;
7628 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
7629 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
7630 CHECK_NEW_array__Array(var97);
7631 }
7632 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
7633 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var100) /* add on <self:GlobalCompilerVisitor>*/;
7634 }
7635 var101 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
7636 var_recv2 = var101;
7637 var102 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7638 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var102) /* static_mtype on <var102:MPropDef(MAttributeDef)>*/;
7639 if (var103 == NULL) {
7640 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 645);
7641 exit(1);
7642 }
7643 var_ta = var103;
7644 var104 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
7645 var_ta = var104;
7646 if (varonce105) {
7647 var106 = varonce105;
7648 } else {
7649 var107 = "((struct ";
7650 var108 = 9;
7651 var109 = string__NativeString__to_s_with_length(var107, var108);
7652 var106 = var109;
7653 varonce105 = var106;
7654 }
7655 var110 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
7656 if (varonce111) {
7657 var112 = varonce111;
7658 } else {
7659 var113 = "*)";
7660 var114 = 2;
7661 var115 = string__NativeString__to_s_with_length(var113, var114);
7662 var112 = var115;
7663 varonce111 = var112;
7664 }
7665 if (varonce116) {
7666 var117 = varonce116;
7667 } else {
7668 var118 = ")->";
7669 var119 = 3;
7670 var120 = string__NativeString__to_s_with_length(var118, var119);
7671 var117 = var120;
7672 varonce116 = var117;
7673 }
7674 var121 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
7675 var122 = ((val* (*)(val*))(var121->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var121) /* c_name on <var121:MPropDef(MAttributeDef)>*/;
7676 var123 = NEW_array__Array(&type_array__Arraykernel__Object);
7677 { /* var123 = array_instance Array[Object] */
7678 var124 = 6;
7679 var125 = NEW_array__NativeArray(var124, &type_array__NativeArraykernel__Object);
7680 ((struct instance_array__NativeArray*)var125)->values[0] = (val*) var106;
7681 ((struct instance_array__NativeArray*)var125)->values[1] = (val*) var110;
7682 ((struct instance_array__NativeArray*)var125)->values[2] = (val*) var112;
7683 ((struct instance_array__NativeArray*)var125)->values[3] = (val*) var_recv;
7684 ((struct instance_array__NativeArray*)var125)->values[4] = (val*) var117;
7685 ((struct instance_array__NativeArray*)var125)->values[5] = (val*) var122;
7686 ((void (*)(val*, val*, long))(var123->class->vft[COLOR_array__Array__with_native]))(var123, var125, var124) /* with_native on <var123:Array[Object]>*/;
7687 CHECK_NEW_array__Array(var123);
7688 }
7689 var126 = ((val* (*)(val*))(var123->class->vft[COLOR_string__Object__to_s]))(var123) /* to_s on <var123:Array[Object]>*/;
7690 var127 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var126, var_ta) /* new_expr on <self:GlobalCompilerVisitor>*/;
7691 var_res2 = var127;
7692 /* <var_ta:MType> isa MNullableType */
7693 cltype = type_model__MNullableType.color;
7694 idtype = type_model__MNullableType.id;
7695 if(cltype >= var_ta->type->table_size) {
7696 var129 = 0;
7697 } else {
7698 var129 = var_ta->type->type_table[cltype] == idtype;
7699 }
7700 var130 = !var129;
7701 var_131 = var130;
7702 if (var130){
7703 var132 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7704 var133 = ((val* (*)(val*))(var132->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var132) /* modelbuilder on <var132:AbstractCompiler(GlobalCompiler)>*/;
7705 var134 = ((val* (*)(val*))(var133->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var133) /* toolcontext on <var133:ModelBuilder>*/;
7706 var135 = ((val* (*)(val*))(var134->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_other]))(var134) /* opt_no_check_other on <var134:ToolContext>*/;
7707 var136 = ((val* (*)(val*))(var135->class->vft[COLOR_opts__Option__value]))(var135) /* value on <var135:OptionBool>*/;
7708 var137 = ((struct instance_kernel__Bool*)var136)->value; /* autounbox from nullable Object to Bool */;
7709 var138 = !var137;
7710 var128 = var138;
7711 } else {
7712 var128 = var_131;
7713 }
7714 if (var128){
7715 var139 = ((val* (*)(val*))(var_ta->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_ta) /* ctype on <var_ta:MType>*/;
7716 if (varonce140) {
7717 var141 = varonce140;
7718 } else {
7719 var142 = "val*";
7720 var143 = 4;
7721 var144 = string__NativeString__to_s_with_length(var142, var143);
7722 var141 = var144;
7723 varonce140 = var141;
7724 }
7725 var145 = ((short int (*)(val*, val*))(var139->class->vft[COLOR_kernel__Object___61d_61d]))(var139, var141) /* == on <var139:String>*/;
7726 if (var145){
7727 if (varonce146) {
7728 var147 = varonce146;
7729 } else {
7730 var148 = "if (";
7731 var149 = 4;
7732 var150 = string__NativeString__to_s_with_length(var148, var149);
7733 var147 = var150;
7734 varonce146 = var147;
7735 }
7736 if (varonce151) {
7737 var152 = varonce151;
7738 } else {
7739 var153 = " == NULL) {";
7740 var154 = 11;
7741 var155 = string__NativeString__to_s_with_length(var153, var154);
7742 var152 = var155;
7743 varonce151 = var152;
7744 }
7745 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
7746 { /* var156 = array_instance Array[Object] */
7747 var157 = 3;
7748 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
7749 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var147;
7750 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var_res2;
7751 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var152;
7752 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
7753 CHECK_NEW_array__Array(var156);
7754 }
7755 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
7756 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var159) /* add on <self:GlobalCompilerVisitor>*/;
7757 if (varonce160) {
7758 var161 = varonce160;
7759 } else {
7760 var162 = "Uninitialized attribute ";
7761 var163 = 24;
7762 var164 = string__NativeString__to_s_with_length(var162, var163);
7763 var161 = var164;
7764 varonce160 = var161;
7765 }
7766 var165 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__name]))(var_a) /* name on <var_a:MAttribute>*/;
7767 var166 = NEW_array__Array(&type_array__Arraykernel__Object);
7768 { /* var166 = array_instance Array[Object] */
7769 var167 = 2;
7770 var168 = NEW_array__NativeArray(var167, &type_array__NativeArraykernel__Object);
7771 ((struct instance_array__NativeArray*)var168)->values[0] = (val*) var161;
7772 ((struct instance_array__NativeArray*)var168)->values[1] = (val*) var165;
7773 ((void (*)(val*, val*, long))(var166->class->vft[COLOR_array__Array__with_native]))(var166, var168, var167) /* with_native on <var166:Array[Object]>*/;
7774 CHECK_NEW_array__Array(var166);
7775 }
7776 var169 = ((val* (*)(val*))(var166->class->vft[COLOR_string__Object__to_s]))(var166) /* to_s on <var166:Array[Object]>*/;
7777 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var169) /* add_abort on <self:GlobalCompilerVisitor>*/;
7778 if (varonce170) {
7779 var171 = varonce170;
7780 } else {
7781 var172 = "}";
7782 var173 = 1;
7783 var174 = string__NativeString__to_s_with_length(var172, var173);
7784 var171 = var174;
7785 varonce170 = var171;
7786 }
7787 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var171) /* add on <self:GlobalCompilerVisitor>*/;
7788 } else {
7789 if (varonce175) {
7790 var176 = varonce175;
7791 } else {
7792 var177 = "/*NOTYET isset on primitive attributes*/";
7793 var178 = 40;
7794 var179 = string__NativeString__to_s_with_length(var177, var178);
7795 var176 = var179;
7796 varonce175 = var176;
7797 }
7798 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var176) /* add on <self:GlobalCompilerVisitor>*/;
7799 }
7800 } else {
7801 }
7802 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__assign]))(self, var_res, var_res2) /* assign on <self:GlobalCompilerVisitor>*/;
7803 if (varonce180) {
7804 var181 = varonce180;
7805 } else {
7806 var182 = "break;";
7807 var183 = 6;
7808 var184 = string__NativeString__to_s_with_length(var182, var183);
7809 var181 = var184;
7810 varonce180 = var181;
7811 }
7812 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var181) /* add on <self:GlobalCompilerVisitor>*/;
7813 CONTINUE_label: (void)0;
7814 ((void (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__next]))(var61) /* next on <var61:Iterator[nullable Object]>*/;
7815 }
7816 BREAK_label: (void)0;
7817 var185 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
7818 var186 = ((short int (*)(val*))(var185->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var185) /* hardening on <var185:AbstractCompiler(GlobalCompiler)>*/;
7819 if (var186){
7820 if (varonce187) {
7821 var188 = varonce187;
7822 } else {
7823 var189 = "default: /* Bug */";
7824 var190 = 18;
7825 var191 = string__NativeString__to_s_with_length(var189, var190);
7826 var188 = var191;
7827 varonce187 = var188;
7828 }
7829 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
7830 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
7831 } else {
7832 }
7833 if (varonce192) {
7834 var193 = varonce192;
7835 } else {
7836 var194 = "}";
7837 var195 = 1;
7838 var196 = string__NativeString__to_s_with_length(var194, var195);
7839 var193 = var196;
7840 varonce192 = var193;
7841 }
7842 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var193) /* add on <self:GlobalCompilerVisitor>*/;
7843 var = var_res;
7844 goto RET_LABEL;
7845 RET_LABEL:;
7846 return var;
7847 }
7848 /* method global_compiler#GlobalCompilerVisitor#read_attribute for (self: Object, MAttribute, RuntimeVariable): RuntimeVariable */
7849 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__read_attribute(val* self, val* p0, val* p1) {
7850 val* var /* : RuntimeVariable */;
7851 val* var1 /* : RuntimeVariable */;
7852 var1 = global_compiler__GlobalCompilerVisitor__read_attribute(self, p0, p1);
7853 var = var1;
7854 RET_LABEL:;
7855 return var;
7856 }
7857 /* method global_compiler#GlobalCompilerVisitor#write_attribute for (self: GlobalCompilerVisitor, MAttribute, RuntimeVariable, RuntimeVariable) */
7858 void global_compiler__GlobalCompilerVisitor__write_attribute(val* self, val* p0, val* p1, val* p2) {
7859 val* var_a /* var a: MAttribute */;
7860 val* var_recv /* var recv: RuntimeVariable */;
7861 val* var_value /* var value: RuntimeVariable */;
7862 val* var /* : Array[MClassType] */;
7863 val* var_types /* var types: Array[MClassType] */;
7864 short int var1 /* : Bool */;
7865 static val* varonce;
7866 val* var2 /* : String */;
7867 char* var3 /* : NativeString */;
7868 long var4 /* : Int */;
7869 val* var5 /* : String */;
7870 val* var6 /* : String */;
7871 static val* varonce7;
7872 val* var8 /* : String */;
7873 char* var9 /* : NativeString */;
7874 long var10 /* : Int */;
7875 val* var11 /* : String */;
7876 static val* varonce12;
7877 val* var13 /* : String */;
7878 char* var14 /* : NativeString */;
7879 long var15 /* : Int */;
7880 val* var16 /* : String */;
7881 val* var17 /* : Array[Object] */;
7882 long var18 /* : Int */;
7883 val* var19 /* : NativeArray[Object] */;
7884 val* var20 /* : String */;
7885 static val* varonce21;
7886 val* var22 /* : String */;
7887 char* var23 /* : NativeString */;
7888 long var24 /* : Int */;
7889 val* var25 /* : String */;
7890 static val* varonce26;
7891 val* var27 /* : String */;
7892 char* var28 /* : NativeString */;
7893 long var29 /* : Int */;
7894 val* var30 /* : String */;
7895 val* var31 /* : String */;
7896 static val* varonce32;
7897 val* var33 /* : String */;
7898 char* var34 /* : NativeString */;
7899 long var35 /* : Int */;
7900 val* var36 /* : String */;
7901 val* var37 /* : Array[Object] */;
7902 long var38 /* : Int */;
7903 val* var39 /* : NativeArray[Object] */;
7904 val* var40 /* : String */;
7905 static val* varonce41;
7906 val* var42 /* : String */;
7907 char* var43 /* : NativeString */;
7908 long var44 /* : Int */;
7909 val* var45 /* : String */;
7910 static val* varonce46;
7911 val* var47 /* : String */;
7912 char* var48 /* : NativeString */;
7913 long var49 /* : Int */;
7914 val* var50 /* : String */;
7915 val* var51 /* : Array[Object] */;
7916 long var52 /* : Int */;
7917 val* var53 /* : NativeArray[Object] */;
7918 val* var54 /* : String */;
7919 val* var55 /* : nullable Object */;
7920 val* var_last /* var last: MClassType */;
7921 val* var56 /* : Iterator[nullable Object] */;
7922 short int var57 /* : Bool */;
7923 val* var58 /* : nullable Object */;
7924 val* var_t /* var t: MClassType */;
7925 short int var59 /* : Bool */;
7926 val* var60 /* : AbstractCompiler */;
7927 short int var61 /* : Bool */;
7928 short int var62 /* : Bool */;
7929 short int var_ /* var : Bool */;
7930 short int var63 /* : Bool */;
7931 static val* varonce64;
7932 val* var65 /* : String */;
7933 char* var66 /* : NativeString */;
7934 long var67 /* : Int */;
7935 val* var68 /* : String */;
7936 val* var69 /* : AbstractCompiler */;
7937 val* var70 /* : String */;
7938 static val* varonce71;
7939 val* var72 /* : String */;
7940 char* var73 /* : NativeString */;
7941 long var74 /* : Int */;
7942 val* var75 /* : String */;
7943 val* var76 /* : Array[Object] */;
7944 long var77 /* : Int */;
7945 val* var78 /* : NativeArray[Object] */;
7946 val* var79 /* : String */;
7947 static val* varonce80;
7948 val* var81 /* : String */;
7949 char* var82 /* : NativeString */;
7950 long var83 /* : Int */;
7951 val* var84 /* : String */;
7952 val* var85 /* : AbstractCompiler */;
7953 val* var86 /* : String */;
7954 static val* varonce87;
7955 val* var88 /* : String */;
7956 char* var89 /* : NativeString */;
7957 long var90 /* : Int */;
7958 val* var91 /* : String */;
7959 val* var92 /* : Array[Object] */;
7960 long var93 /* : Int */;
7961 val* var94 /* : NativeArray[Object] */;
7962 val* var95 /* : String */;
7963 val* var96 /* : RuntimeVariable */;
7964 val* var_recv2 /* var recv2: RuntimeVariable */;
7965 val* var97 /* : MPropDef */;
7966 val* var98 /* : nullable MType */;
7967 val* var_ta /* var ta: MType */;
7968 val* var99 /* : MType */;
7969 static val* varonce100;
7970 val* var101 /* : String */;
7971 char* var102 /* : NativeString */;
7972 long var103 /* : Int */;
7973 val* var104 /* : String */;
7974 val* var105 /* : String */;
7975 static val* varonce106;
7976 val* var107 /* : String */;
7977 char* var108 /* : NativeString */;
7978 long var109 /* : Int */;
7979 val* var110 /* : String */;
7980 static val* varonce111;
7981 val* var112 /* : String */;
7982 char* var113 /* : NativeString */;
7983 long var114 /* : Int */;
7984 val* var115 /* : String */;
7985 val* var116 /* : MPropDef */;
7986 val* var117 /* : String */;
7987 static val* varonce118;
7988 val* var119 /* : String */;
7989 char* var120 /* : NativeString */;
7990 long var121 /* : Int */;
7991 val* var122 /* : String */;
7992 val* var123 /* : RuntimeVariable */;
7993 static val* varonce124;
7994 val* var125 /* : String */;
7995 char* var126 /* : NativeString */;
7996 long var127 /* : Int */;
7997 val* var128 /* : String */;
7998 val* var129 /* : Array[Object] */;
7999 long var130 /* : Int */;
8000 val* var131 /* : NativeArray[Object] */;
8001 val* var132 /* : String */;
8002 static val* varonce133;
8003 val* var134 /* : String */;
8004 char* var135 /* : NativeString */;
8005 long var136 /* : Int */;
8006 val* var137 /* : String */;
8007 val* var138 /* : AbstractCompiler */;
8008 short int var139 /* : Bool */;
8009 static val* varonce140;
8010 val* var141 /* : String */;
8011 char* var142 /* : NativeString */;
8012 long var143 /* : Int */;
8013 val* var144 /* : String */;
8014 static val* varonce145;
8015 val* var146 /* : String */;
8016 char* var147 /* : NativeString */;
8017 long var148 /* : Int */;
8018 val* var149 /* : String */;
8019 var_a = p0;
8020 var_recv = p1;
8021 var_value = p2;
8022 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_recv_notnull]))(self, var_recv) /* check_recv_notnull on <self:GlobalCompilerVisitor>*/;
8023 var = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_recv) /* collect_types on <self:GlobalCompilerVisitor>*/;
8024 var_types = var;
8025 var1 = ((short int (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_types) /* is_empty on <var_types:Array[MClassType]>*/;
8026 if (var1){
8027 if (varonce) {
8028 var2 = varonce;
8029 } else {
8030 var3 = "/*BUG: no live types for ";
8031 var4 = 25;
8032 var5 = string__NativeString__to_s_with_length(var3, var4);
8033 var2 = var5;
8034 varonce = var2;
8035 }
8036 var6 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
8037 if (varonce7) {
8038 var8 = varonce7;
8039 } else {
8040 var9 = " . ";
8041 var10 = 3;
8042 var11 = string__NativeString__to_s_with_length(var9, var10);
8043 var8 = var11;
8044 varonce7 = var8;
8045 }
8046 if (varonce12) {
8047 var13 = varonce12;
8048 } else {
8049 var14 = "*/";
8050 var15 = 2;
8051 var16 = string__NativeString__to_s_with_length(var14, var15);
8052 var13 = var16;
8053 varonce12 = var13;
8054 }
8055 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
8056 { /* var17 = array_instance Array[Object] */
8057 var18 = 5;
8058 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
8059 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var2;
8060 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var6;
8061 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var8;
8062 ((struct instance_array__NativeArray*)var19)->values[3] = (val*) var_a;
8063 ((struct instance_array__NativeArray*)var19)->values[4] = (val*) var13;
8064 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
8065 CHECK_NEW_array__Array(var17);
8066 }
8067 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
8068 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var20) /* add on <self:GlobalCompilerVisitor>*/;
8069 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
8070 goto RET_LABEL;
8071 } else {
8072 }
8073 if (varonce21) {
8074 var22 = varonce21;
8075 } else {
8076 var23 = "/* write ";
8077 var24 = 9;
8078 var25 = string__NativeString__to_s_with_length(var23, var24);
8079 var22 = var25;
8080 varonce21 = var22;
8081 }
8082 if (varonce26) {
8083 var27 = varonce26;
8084 } else {
8085 var28 = " on ";
8086 var29 = 4;
8087 var30 = string__NativeString__to_s_with_length(var28, var29);
8088 var27 = var30;
8089 varonce26 = var27;
8090 }
8091 var31 = ((val* (*)(val*))(var_recv->class->vft[COLOR_string__Object__inspect]))(var_recv) /* inspect on <var_recv:RuntimeVariable>*/;
8092 if (varonce32) {
8093 var33 = varonce32;
8094 } else {
8095 var34 = " */";
8096 var35 = 3;
8097 var36 = string__NativeString__to_s_with_length(var34, var35);
8098 var33 = var36;
8099 varonce32 = var33;
8100 }
8101 var37 = NEW_array__Array(&type_array__Arraykernel__Object);
8102 { /* var37 = array_instance Array[Object] */
8103 var38 = 5;
8104 var39 = NEW_array__NativeArray(var38, &type_array__NativeArraykernel__Object);
8105 ((struct instance_array__NativeArray*)var39)->values[0] = (val*) var22;
8106 ((struct instance_array__NativeArray*)var39)->values[1] = (val*) var_a;
8107 ((struct instance_array__NativeArray*)var39)->values[2] = (val*) var27;
8108 ((struct instance_array__NativeArray*)var39)->values[3] = (val*) var31;
8109 ((struct instance_array__NativeArray*)var39)->values[4] = (val*) var33;
8110 ((void (*)(val*, val*, long))(var37->class->vft[COLOR_array__Array__with_native]))(var37, var39, var38) /* with_native on <var37:Array[Object]>*/;
8111 CHECK_NEW_array__Array(var37);
8112 }
8113 var40 = ((val* (*)(val*))(var37->class->vft[COLOR_string__Object__to_s]))(var37) /* to_s on <var37:Array[Object]>*/;
8114 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var40) /* add on <self:GlobalCompilerVisitor>*/;
8115 if (varonce41) {
8116 var42 = varonce41;
8117 } else {
8118 var43 = "switch(";
8119 var44 = 7;
8120 var45 = string__NativeString__to_s_with_length(var43, var44);
8121 var42 = var45;
8122 varonce41 = var42;
8123 }
8124 if (varonce46) {
8125 var47 = varonce46;
8126 } else {
8127 var48 = "->classid) {";
8128 var49 = 12;
8129 var50 = string__NativeString__to_s_with_length(var48, var49);
8130 var47 = var50;
8131 varonce46 = var47;
8132 }
8133 var51 = NEW_array__Array(&type_array__Arraykernel__Object);
8134 { /* var51 = array_instance Array[Object] */
8135 var52 = 3;
8136 var53 = NEW_array__NativeArray(var52, &type_array__NativeArraykernel__Object);
8137 ((struct instance_array__NativeArray*)var53)->values[0] = (val*) var42;
8138 ((struct instance_array__NativeArray*)var53)->values[1] = (val*) var_recv;
8139 ((struct instance_array__NativeArray*)var53)->values[2] = (val*) var47;
8140 ((void (*)(val*, val*, long))(var51->class->vft[COLOR_array__Array__with_native]))(var51, var53, var52) /* with_native on <var51:Array[Object]>*/;
8141 CHECK_NEW_array__Array(var51);
8142 }
8143 var54 = ((val* (*)(val*))(var51->class->vft[COLOR_string__Object__to_s]))(var51) /* to_s on <var51:Array[Object]>*/;
8144 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var54) /* add on <self:GlobalCompilerVisitor>*/;
8145 var55 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_types) /* last on <var_types:Array[MClassType]>*/;
8146 var_last = var55;
8147 var56 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
8148 for(;;) {
8149 var57 = ((short int (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var56) /* is_ok on <var56:Iterator[nullable Object]>*/;
8150 if(!var57) break;
8151 var58 = ((val* (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__item]))(var56) /* item on <var56:Iterator[nullable Object]>*/;
8152 var_t = var58;
8153 var60 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8154 var61 = ((short int (*)(val*))(var60->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var60) /* hardening on <var60:AbstractCompiler(GlobalCompiler)>*/;
8155 var62 = !var61;
8156 var_ = var62;
8157 if (var62){
8158 var63 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_last) /* == on <var_t:MClassType>*/;
8159 var59 = var63;
8160 } else {
8161 var59 = var_;
8162 }
8163 if (var59){
8164 if (varonce64) {
8165 var65 = varonce64;
8166 } else {
8167 var66 = "default: /*";
8168 var67 = 11;
8169 var68 = string__NativeString__to_s_with_length(var66, var67);
8170 var65 = var68;
8171 varonce64 = var65;
8172 }
8173 var69 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8174 var70 = ((val* (*)(val*, val*))(var69->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var69, var_t) /* classid on <var69:AbstractCompiler(GlobalCompiler)>*/;
8175 if (varonce71) {
8176 var72 = varonce71;
8177 } else {
8178 var73 = "*/";
8179 var74 = 2;
8180 var75 = string__NativeString__to_s_with_length(var73, var74);
8181 var72 = var75;
8182 varonce71 = var72;
8183 }
8184 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
8185 { /* var76 = array_instance Array[Object] */
8186 var77 = 3;
8187 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
8188 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var65;
8189 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var70;
8190 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var72;
8191 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
8192 CHECK_NEW_array__Array(var76);
8193 }
8194 var79 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
8195 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var79) /* add on <self:GlobalCompilerVisitor>*/;
8196 } else {
8197 if (varonce80) {
8198 var81 = varonce80;
8199 } else {
8200 var82 = "case ";
8201 var83 = 5;
8202 var84 = string__NativeString__to_s_with_length(var82, var83);
8203 var81 = var84;
8204 varonce80 = var81;
8205 }
8206 var85 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8207 var86 = ((val* (*)(val*, val*))(var85->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var85, var_t) /* classid on <var85:AbstractCompiler(GlobalCompiler)>*/;
8208 if (varonce87) {
8209 var88 = varonce87;
8210 } else {
8211 var89 = ":";
8212 var90 = 1;
8213 var91 = string__NativeString__to_s_with_length(var89, var90);
8214 var88 = var91;
8215 varonce87 = var88;
8216 }
8217 var92 = NEW_array__Array(&type_array__Arraykernel__Object);
8218 { /* var92 = array_instance Array[Object] */
8219 var93 = 3;
8220 var94 = NEW_array__NativeArray(var93, &type_array__NativeArraykernel__Object);
8221 ((struct instance_array__NativeArray*)var94)->values[0] = (val*) var81;
8222 ((struct instance_array__NativeArray*)var94)->values[1] = (val*) var86;
8223 ((struct instance_array__NativeArray*)var94)->values[2] = (val*) var88;
8224 ((void (*)(val*, val*, long))(var92->class->vft[COLOR_array__Array__with_native]))(var92, var94, var93) /* with_native on <var92:Array[Object]>*/;
8225 CHECK_NEW_array__Array(var92);
8226 }
8227 var95 = ((val* (*)(val*))(var92->class->vft[COLOR_string__Object__to_s]))(var92) /* to_s on <var92:Array[Object]>*/;
8228 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var95) /* add on <self:GlobalCompilerVisitor>*/;
8229 }
8230 var96 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autoadapt]))(self, var_recv, var_t) /* autoadapt on <self:GlobalCompilerVisitor>*/;
8231 var_recv2 = var96;
8232 var97 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
8233 var98 = ((val* (*)(val*))(var97->class->vft[COLOR_model__MAttributeDef__static_mtype]))(var97) /* static_mtype on <var97:MPropDef(MAttributeDef)>*/;
8234 if (var98 == NULL) {
8235 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 690);
8236 exit(1);
8237 }
8238 var_ta = var98;
8239 var99 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__resolve_for]))(self, var_ta, var_recv2) /* resolve_for on <self:GlobalCompilerVisitor>*/;
8240 var_ta = var99;
8241 if (varonce100) {
8242 var101 = varonce100;
8243 } else {
8244 var102 = "((struct ";
8245 var103 = 9;
8246 var104 = string__NativeString__to_s_with_length(var102, var103);
8247 var101 = var104;
8248 varonce100 = var101;
8249 }
8250 var105 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_t) /* c_name on <var_t:MClassType>*/;
8251 if (varonce106) {
8252 var107 = varonce106;
8253 } else {
8254 var108 = "*)";
8255 var109 = 2;
8256 var110 = string__NativeString__to_s_with_length(var108, var109);
8257 var107 = var110;
8258 varonce106 = var107;
8259 }
8260 if (varonce111) {
8261 var112 = varonce111;
8262 } else {
8263 var113 = ")->";
8264 var114 = 3;
8265 var115 = string__NativeString__to_s_with_length(var113, var114);
8266 var112 = var115;
8267 varonce111 = var112;
8268 }
8269 var116 = ((val* (*)(val*))(var_a->class->vft[COLOR_model__MProperty__intro]))(var_a) /* intro on <var_a:MAttribute>*/;
8270 var117 = ((val* (*)(val*))(var116->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var116) /* c_name on <var116:MPropDef(MAttributeDef)>*/;
8271 if (varonce118) {
8272 var119 = varonce118;
8273 } else {
8274 var120 = " = ";
8275 var121 = 3;
8276 var122 = string__NativeString__to_s_with_length(var120, var121);
8277 var119 = var122;
8278 varonce118 = var119;
8279 }
8280 var123 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var_value, var_ta) /* autobox on <self:GlobalCompilerVisitor>*/;
8281 if (varonce124) {
8282 var125 = varonce124;
8283 } else {
8284 var126 = ";";
8285 var127 = 1;
8286 var128 = string__NativeString__to_s_with_length(var126, var127);
8287 var125 = var128;
8288 varonce124 = var125;
8289 }
8290 var129 = NEW_array__Array(&type_array__Arraykernel__Object);
8291 { /* var129 = array_instance Array[Object] */
8292 var130 = 9;
8293 var131 = NEW_array__NativeArray(var130, &type_array__NativeArraykernel__Object);
8294 ((struct instance_array__NativeArray*)var131)->values[0] = (val*) var101;
8295 ((struct instance_array__NativeArray*)var131)->values[1] = (val*) var105;
8296 ((struct instance_array__NativeArray*)var131)->values[2] = (val*) var107;
8297 ((struct instance_array__NativeArray*)var131)->values[3] = (val*) var_recv;
8298 ((struct instance_array__NativeArray*)var131)->values[4] = (val*) var112;
8299 ((struct instance_array__NativeArray*)var131)->values[5] = (val*) var117;
8300 ((struct instance_array__NativeArray*)var131)->values[6] = (val*) var119;
8301 ((struct instance_array__NativeArray*)var131)->values[7] = (val*) var123;
8302 ((struct instance_array__NativeArray*)var131)->values[8] = (val*) var125;
8303 ((void (*)(val*, val*, long))(var129->class->vft[COLOR_array__Array__with_native]))(var129, var131, var130) /* with_native on <var129:Array[Object]>*/;
8304 CHECK_NEW_array__Array(var129);
8305 }
8306 var132 = ((val* (*)(val*))(var129->class->vft[COLOR_string__Object__to_s]))(var129) /* to_s on <var129:Array[Object]>*/;
8307 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var132) /* add on <self:GlobalCompilerVisitor>*/;
8308 if (varonce133) {
8309 var134 = varonce133;
8310 } else {
8311 var135 = "break;";
8312 var136 = 6;
8313 var137 = string__NativeString__to_s_with_length(var135, var136);
8314 var134 = var137;
8315 varonce133 = var134;
8316 }
8317 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
8318 CONTINUE_label: (void)0;
8319 ((void (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__next]))(var56) /* next on <var56:Iterator[nullable Object]>*/;
8320 }
8321 BREAK_label: (void)0;
8322 var138 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8323 var139 = ((short int (*)(val*))(var138->class->vft[COLOR_abstract_compiler__AbstractCompiler__hardening]))(var138) /* hardening on <var138:AbstractCompiler(GlobalCompiler)>*/;
8324 if (var139){
8325 if (varonce140) {
8326 var141 = varonce140;
8327 } else {
8328 var142 = "default: /* Bug*/";
8329 var143 = 17;
8330 var144 = string__NativeString__to_s_with_length(var142, var143);
8331 var141 = var144;
8332 varonce140 = var141;
8333 }
8334 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var141) /* add on <self:GlobalCompilerVisitor>*/;
8335 ((void (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__bugtype]))(self, var_recv) /* bugtype on <self:GlobalCompilerVisitor>*/;
8336 } else {
8337 }
8338 if (varonce145) {
8339 var146 = varonce145;
8340 } else {
8341 var147 = "}";
8342 var148 = 1;
8343 var149 = string__NativeString__to_s_with_length(var147, var148);
8344 var146 = var149;
8345 varonce145 = var146;
8346 }
8347 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var146) /* add on <self:GlobalCompilerVisitor>*/;
8348 RET_LABEL:;
8349 }
8350 /* method global_compiler#GlobalCompilerVisitor#write_attribute for (self: Object, MAttribute, RuntimeVariable, RuntimeVariable) */
8351 void VIRTUAL_global_compiler__GlobalCompilerVisitor__write_attribute(val* self, val* p0, val* p1, val* p2) {
8352 global_compiler__GlobalCompilerVisitor__write_attribute(self, p0, p1, p2);
8353 RET_LABEL:;
8354 }
8355 /* method global_compiler#GlobalCompilerVisitor#init_instance for (self: GlobalCompilerVisitor, MClassType): RuntimeVariable */
8356 val* global_compiler__GlobalCompilerVisitor__init_instance(val* self, val* p0) {
8357 val* var /* : RuntimeVariable */;
8358 val* var_mtype /* var mtype: MClassType */;
8359 val* var1 /* : MType */;
8360 short int var2 /* : Bool */;
8361 int cltype;
8362 int idtype;
8363 val* var3 /* : AbstractCompiler */;
8364 val* var4 /* : RapidTypeAnalysis */;
8365 val* var5 /* : HashSet[MClassType] */;
8366 short int var6 /* : Bool */;
8367 short int var7 /* : Bool */;
8368 static val* varonce;
8369 val* var8 /* : String */;
8370 char* var9 /* : NativeString */;
8371 long var10 /* : Int */;
8372 val* var11 /* : String */;
8373 static val* varonce12;
8374 val* var13 /* : String */;
8375 char* var14 /* : NativeString */;
8376 long var15 /* : Int */;
8377 val* var16 /* : String */;
8378 val* var17 /* : Array[Object] */;
8379 long var18 /* : Int */;
8380 val* var19 /* : NativeArray[Object] */;
8381 val* var20 /* : String */;
8382 static val* varonce21;
8383 val* var22 /* : String */;
8384 char* var23 /* : NativeString */;
8385 long var24 /* : Int */;
8386 val* var25 /* : String */;
8387 val* var26 /* : String */;
8388 static val* varonce27;
8389 val* var28 /* : String */;
8390 char* var29 /* : NativeString */;
8391 long var30 /* : Int */;
8392 val* var31 /* : String */;
8393 val* var32 /* : Array[Object] */;
8394 long var33 /* : Int */;
8395 val* var34 /* : NativeArray[Object] */;
8396 val* var35 /* : String */;
8397 val* var36 /* : RuntimeVariable */;
8398 val* var_res /* var res: RuntimeVariable */;
8399 short int var37 /* : Bool */;
8400 var_mtype = p0;
8401 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_mtype) /* anchor on <self:GlobalCompilerVisitor>*/;
8402 /* <var1:MType> isa MClassType */
8403 cltype = type_model__MClassType.color;
8404 idtype = type_model__MClassType.id;
8405 if(cltype >= var1->type->table_size) {
8406 var2 = 0;
8407 } else {
8408 var2 = var1->type->type_table[cltype] == idtype;
8409 }
8410 if (!var2) {
8411 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 704);
8412 exit(1);
8413 }
8414 var_mtype = var1;
8415 var3 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8416 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var3) /* runtime_type_analysis on <var3:AbstractCompiler(GlobalCompiler)>*/;
8417 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var4) /* live_types on <var4:RapidTypeAnalysis>*/;
8418 var6 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__Collection__has]))(var5, var_mtype) /* has on <var5:HashSet[MClassType]>*/;
8419 var7 = !var6;
8420 if (var7){
8421 if (varonce) {
8422 var8 = varonce;
8423 } else {
8424 var9 = "problem: ";
8425 var10 = 9;
8426 var11 = string__NativeString__to_s_with_length(var9, var10);
8427 var8 = var11;
8428 varonce = var8;
8429 }
8430 if (varonce12) {
8431 var13 = varonce12;
8432 } else {
8433 var14 = " was detected dead";
8434 var15 = 18;
8435 var16 = string__NativeString__to_s_with_length(var14, var15);
8436 var13 = var16;
8437 varonce12 = var13;
8438 }
8439 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
8440 { /* var17 = array_instance Array[Object] */
8441 var18 = 3;
8442 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
8443 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var8;
8444 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var_mtype;
8445 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var13;
8446 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
8447 CHECK_NEW_array__Array(var17);
8448 }
8449 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
8450 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var20) /* debug on <self:GlobalCompilerVisitor>*/;
8451 } else {
8452 }
8453 if (varonce21) {
8454 var22 = varonce21;
8455 } else {
8456 var23 = "NEW_";
8457 var24 = 4;
8458 var25 = string__NativeString__to_s_with_length(var23, var24);
8459 var22 = var25;
8460 varonce21 = var22;
8461 }
8462 var26 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
8463 if (varonce27) {
8464 var28 = varonce27;
8465 } else {
8466 var29 = "()";
8467 var30 = 2;
8468 var31 = string__NativeString__to_s_with_length(var29, var30);
8469 var28 = var31;
8470 varonce27 = var28;
8471 }
8472 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
8473 { /* var32 = array_instance Array[Object] */
8474 var33 = 3;
8475 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
8476 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var22;
8477 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var26;
8478 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var28;
8479 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
8480 CHECK_NEW_array__Array(var32);
8481 }
8482 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
8483 var36 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var35, var_mtype) /* new_expr on <self:GlobalCompilerVisitor>*/;
8484 var_res = var36;
8485 var37 = 1;
8486 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var37) /* is_exact= on <var_res:RuntimeVariable>*/;
8487 var = var_res;
8488 goto RET_LABEL;
8489 RET_LABEL:;
8490 return var;
8491 }
8492 /* method global_compiler#GlobalCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
8493 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__init_instance(val* self, val* p0) {
8494 val* var /* : RuntimeVariable */;
8495 val* var1 /* : RuntimeVariable */;
8496 var1 = global_compiler__GlobalCompilerVisitor__init_instance(self, p0);
8497 var = var1;
8498 RET_LABEL:;
8499 return var;
8500 }
8501 /* method global_compiler#GlobalCompilerVisitor#type_test for (self: GlobalCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
8502 val* global_compiler__GlobalCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
8503 val* var /* : RuntimeVariable */;
8504 val* var_value /* var value: RuntimeVariable */;
8505 val* var_mtype /* var mtype: MType */;
8506 val* var_tag /* var tag: String */;
8507 val* var1 /* : MType */;
8508 val* var_mclasstype /* var mclasstype: MType */;
8509 short int var2 /* : Bool */;
8510 int cltype;
8511 int idtype;
8512 val* var3 /* : MType */;
8513 short int var4 /* : Bool */;
8514 int cltype5;
8515 int idtype6;
8516 val* var7 /* : AbstractCompiler */;
8517 val* var8 /* : RapidTypeAnalysis */;
8518 val* var9 /* : HashSet[MClassType] */;
8519 short int var10 /* : Bool */;
8520 short int var11 /* : Bool */;
8521 static val* varonce;
8522 val* var12 /* : String */;
8523 char* var13 /* : NativeString */;
8524 long var14 /* : Int */;
8525 val* var15 /* : String */;
8526 static val* varonce16;
8527 val* var17 /* : String */;
8528 char* var18 /* : NativeString */;
8529 long var19 /* : Int */;
8530 val* var20 /* : String */;
8531 val* var21 /* : Array[Object] */;
8532 long var22 /* : Int */;
8533 val* var23 /* : NativeArray[Object] */;
8534 val* var24 /* : String */;
8535 val* var25 /* : Array[MClassType] */;
8536 val* var_types /* var types: Array[MClassType] */;
8537 val* var26 /* : MClassType */;
8538 val* var27 /* : RuntimeVariable */;
8539 val* var_res /* var res: RuntimeVariable */;
8540 static val* varonce28;
8541 val* var29 /* : String */;
8542 char* var30 /* : NativeString */;
8543 long var31 /* : Int */;
8544 val* var32 /* : String */;
8545 static val* varonce33;
8546 val* var34 /* : String */;
8547 char* var35 /* : NativeString */;
8548 long var36 /* : Int */;
8549 val* var37 /* : String */;
8550 val* var38 /* : String */;
8551 static val* varonce39;
8552 val* var40 /* : String */;
8553 char* var41 /* : NativeString */;
8554 long var42 /* : Int */;
8555 val* var43 /* : String */;
8556 val* var44 /* : Array[Object] */;
8557 long var45 /* : Int */;
8558 val* var46 /* : NativeArray[Object] */;
8559 val* var47 /* : String */;
8560 val* var48 /* : MType */;
8561 val* var49 /* : String */;
8562 static val* varonce50;
8563 val* var51 /* : String */;
8564 char* var52 /* : NativeString */;
8565 long var53 /* : Int */;
8566 val* var54 /* : String */;
8567 short int var55 /* : Bool */;
8568 val* var56 /* : MType */;
8569 val* var57 /* : AbstractCompiler */;
8570 val* var58 /* : MModule */;
8571 val* var59 /* : null */;
8572 short int var60 /* : Bool */;
8573 static val* varonce61;
8574 val* var62 /* : String */;
8575 char* var63 /* : NativeString */;
8576 long var64 /* : Int */;
8577 val* var65 /* : String */;
8578 val* var66 /* : Array[Object] */;
8579 long var67 /* : Int */;
8580 val* var68 /* : NativeArray[Object] */;
8581 val* var69 /* : String */;
8582 static val* varonce70;
8583 val* var71 /* : String */;
8584 char* var72 /* : NativeString */;
8585 long var73 /* : Int */;
8586 val* var74 /* : String */;
8587 val* var75 /* : Array[Object] */;
8588 long var76 /* : Int */;
8589 val* var77 /* : NativeArray[Object] */;
8590 val* var78 /* : String */;
8591 short int var79 /* : Bool */;
8592 val* var80 /* : MType */;
8593 short int var81 /* : Bool */;
8594 int cltype82;
8595 int idtype83;
8596 short int var_ /* var : Bool */;
8597 val* var84 /* : MType */;
8598 short int var85 /* : Bool */;
8599 int cltype86;
8600 int idtype87;
8601 static val* varonce88;
8602 val* var89 /* : String */;
8603 char* var90 /* : NativeString */;
8604 long var91 /* : Int */;
8605 val* var92 /* : String */;
8606 static val* varonce93;
8607 val* var94 /* : String */;
8608 char* var95 /* : NativeString */;
8609 long var96 /* : Int */;
8610 val* var97 /* : String */;
8611 val* var98 /* : Array[Object] */;
8612 long var99 /* : Int */;
8613 val* var100 /* : NativeArray[Object] */;
8614 val* var101 /* : String */;
8615 short int var102 /* : Bool */;
8616 int cltype103;
8617 int idtype104;
8618 static val* varonce105;
8619 val* var106 /* : String */;
8620 char* var107 /* : NativeString */;
8621 long var108 /* : Int */;
8622 val* var109 /* : String */;
8623 static val* varonce110;
8624 val* var111 /* : String */;
8625 char* var112 /* : NativeString */;
8626 long var113 /* : Int */;
8627 val* var114 /* : String */;
8628 val* var115 /* : Array[Object] */;
8629 long var116 /* : Int */;
8630 val* var117 /* : NativeArray[Object] */;
8631 val* var118 /* : String */;
8632 static val* varonce119;
8633 val* var120 /* : String */;
8634 char* var121 /* : NativeString */;
8635 long var122 /* : Int */;
8636 val* var123 /* : String */;
8637 static val* varonce124;
8638 val* var125 /* : String */;
8639 char* var126 /* : NativeString */;
8640 long var127 /* : Int */;
8641 val* var128 /* : String */;
8642 val* var129 /* : Array[Object] */;
8643 long var130 /* : Int */;
8644 val* var131 /* : NativeArray[Object] */;
8645 val* var132 /* : String */;
8646 static val* varonce133;
8647 val* var134 /* : String */;
8648 char* var135 /* : NativeString */;
8649 long var136 /* : Int */;
8650 val* var137 /* : String */;
8651 static val* varonce138;
8652 val* var139 /* : String */;
8653 char* var140 /* : NativeString */;
8654 long var141 /* : Int */;
8655 val* var142 /* : String */;
8656 static val* varonce143;
8657 val* var144 /* : String */;
8658 char* var145 /* : NativeString */;
8659 long var146 /* : Int */;
8660 val* var147 /* : String */;
8661 val* var148 /* : Array[Object] */;
8662 long var149 /* : Int */;
8663 val* var150 /* : NativeArray[Object] */;
8664 val* var151 /* : String */;
8665 val* var152 /* : Iterator[nullable Object] */;
8666 short int var153 /* : Bool */;
8667 val* var154 /* : nullable Object */;
8668 val* var_t /* var t: MClassType */;
8669 val* var155 /* : AbstractCompiler */;
8670 val* var156 /* : MModule */;
8671 val* var157 /* : null */;
8672 short int var158 /* : Bool */;
8673 static val* varonce159;
8674 val* var160 /* : String */;
8675 char* var161 /* : NativeString */;
8676 long var162 /* : Int */;
8677 val* var163 /* : String */;
8678 val* var164 /* : AbstractCompiler */;
8679 val* var165 /* : String */;
8680 static val* varonce166;
8681 val* var167 /* : String */;
8682 char* var168 /* : NativeString */;
8683 long var169 /* : Int */;
8684 val* var170 /* : String */;
8685 static val* varonce171;
8686 val* var172 /* : String */;
8687 char* var173 /* : NativeString */;
8688 long var174 /* : Int */;
8689 val* var175 /* : String */;
8690 val* var176 /* : Array[Object] */;
8691 long var177 /* : Int */;
8692 val* var178 /* : NativeArray[Object] */;
8693 val* var179 /* : String */;
8694 static val* varonce180;
8695 val* var181 /* : String */;
8696 char* var182 /* : NativeString */;
8697 long var183 /* : Int */;
8698 val* var184 /* : String */;
8699 val* var185 /* : Array[Object] */;
8700 long var186 /* : Int */;
8701 val* var187 /* : NativeArray[Object] */;
8702 val* var188 /* : String */;
8703 static val* varonce189;
8704 val* var190 /* : String */;
8705 char* var191 /* : NativeString */;
8706 long var192 /* : Int */;
8707 val* var193 /* : String */;
8708 static val* varonce194;
8709 val* var195 /* : String */;
8710 char* var196 /* : NativeString */;
8711 long var197 /* : Int */;
8712 val* var198 /* : String */;
8713 static val* varonce199;
8714 val* var200 /* : String */;
8715 char* var201 /* : NativeString */;
8716 long var202 /* : Int */;
8717 val* var203 /* : String */;
8718 val* var204 /* : Array[Object] */;
8719 long var205 /* : Int */;
8720 val* var206 /* : NativeArray[Object] */;
8721 val* var207 /* : String */;
8722 static val* varonce208;
8723 val* var209 /* : String */;
8724 char* var210 /* : NativeString */;
8725 long var211 /* : Int */;
8726 val* var212 /* : String */;
8727 var_value = p0;
8728 var_mtype = p1;
8729 var_tag = p2;
8730 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_mtype) /* anchor on <self:GlobalCompilerVisitor>*/;
8731 var_mtype = var1;
8732 var_mclasstype = var_mtype;
8733 /* <var_mtype:MType> isa MNullableType */
8734 cltype = type_model__MNullableType.color;
8735 idtype = type_model__MNullableType.id;
8736 if(cltype >= var_mtype->type->table_size) {
8737 var2 = 0;
8738 } else {
8739 var2 = var_mtype->type->type_table[cltype] == idtype;
8740 }
8741 if (var2){
8742 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
8743 var_mclasstype = var3;
8744 } else {
8745 }
8746 /* <var_mclasstype:MType> isa MClassType */
8747 cltype5 = type_model__MClassType.color;
8748 idtype6 = type_model__MClassType.id;
8749 if(cltype5 >= var_mclasstype->type->table_size) {
8750 var4 = 0;
8751 } else {
8752 var4 = var_mclasstype->type->type_table[cltype5] == idtype6;
8753 }
8754 if (!var4) {
8755 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/global_compiler.nit", 718);
8756 exit(1);
8757 }
8758 var7 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8759 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_global_compiler__GlobalCompiler__runtime_type_analysis]))(var7) /* runtime_type_analysis on <var7:AbstractCompiler(GlobalCompiler)>*/;
8760 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_cast_types]))(var8) /* live_cast_types on <var8:RapidTypeAnalysis>*/;
8761 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__Collection__has]))(var9, var_mclasstype) /* has on <var9:HashSet[MClassType]>*/;
8762 var11 = !var10;
8763 if (var11){
8764 if (varonce) {
8765 var12 = varonce;
8766 } else {
8767 var13 = "problem: ";
8768 var14 = 9;
8769 var15 = string__NativeString__to_s_with_length(var13, var14);
8770 var12 = var15;
8771 varonce = var12;
8772 }
8773 if (varonce16) {
8774 var17 = varonce16;
8775 } else {
8776 var18 = " was detected cast-dead";
8777 var19 = 23;
8778 var20 = string__NativeString__to_s_with_length(var18, var19);
8779 var17 = var20;
8780 varonce16 = var17;
8781 }
8782 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
8783 { /* var21 = array_instance Array[Object] */
8784 var22 = 3;
8785 var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
8786 ((struct instance_array__NativeArray*)var23)->values[0] = (val*) var12;
8787 ((struct instance_array__NativeArray*)var23)->values[1] = (val*) var_mtype;
8788 ((struct instance_array__NativeArray*)var23)->values[2] = (val*) var17;
8789 ((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
8790 CHECK_NEW_array__Array(var21);
8791 }
8792 var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
8793 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var24) /* debug on <self:GlobalCompilerVisitor>*/;
8794 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "src/global_compiler.nit", 721);
8795 exit(1);
8796 } else {
8797 }
8798 var25 = ((val* (*)(val*, val*))(self->class->vft[COLOR_global_compiler__GlobalCompilerVisitor__collect_types]))(self, var_value) /* collect_types on <self:GlobalCompilerVisitor>*/;
8799 var_types = var25;
8800 var26 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
8801 var27 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var26) /* new_var on <self:GlobalCompilerVisitor>*/;
8802 var_res = var27;
8803 if (varonce28) {
8804 var29 = varonce28;
8805 } else {
8806 var30 = "/* isa ";
8807 var31 = 7;
8808 var32 = string__NativeString__to_s_with_length(var30, var31);
8809 var29 = var32;
8810 varonce28 = var29;
8811 }
8812 if (varonce33) {
8813 var34 = varonce33;
8814 } else {
8815 var35 = " on ";
8816 var36 = 4;
8817 var37 = string__NativeString__to_s_with_length(var35, var36);
8818 var34 = var37;
8819 varonce33 = var34;
8820 }
8821 var38 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
8822 if (varonce39) {
8823 var40 = varonce39;
8824 } else {
8825 var41 = " */";
8826 var42 = 3;
8827 var43 = string__NativeString__to_s_with_length(var41, var42);
8828 var40 = var43;
8829 varonce39 = var40;
8830 }
8831 var44 = NEW_array__Array(&type_array__Arraykernel__Object);
8832 { /* var44 = array_instance Array[Object] */
8833 var45 = 5;
8834 var46 = NEW_array__NativeArray(var45, &type_array__NativeArraykernel__Object);
8835 ((struct instance_array__NativeArray*)var46)->values[0] = (val*) var29;
8836 ((struct instance_array__NativeArray*)var46)->values[1] = (val*) var_mtype;
8837 ((struct instance_array__NativeArray*)var46)->values[2] = (val*) var34;
8838 ((struct instance_array__NativeArray*)var46)->values[3] = (val*) var38;
8839 ((struct instance_array__NativeArray*)var46)->values[4] = (val*) var40;
8840 ((void (*)(val*, val*, long))(var44->class->vft[COLOR_array__Array__with_native]))(var44, var46, var45) /* with_native on <var44:Array[Object]>*/;
8841 CHECK_NEW_array__Array(var44);
8842 }
8843 var47 = ((val* (*)(val*))(var44->class->vft[COLOR_string__Object__to_s]))(var44) /* to_s on <var44:Array[Object]>*/;
8844 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var47) /* add on <self:GlobalCompilerVisitor>*/;
8845 var48 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
8846 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_abstract_compiler__MType__ctype]))(var48) /* ctype on <var48:MType>*/;
8847 if (varonce50) {
8848 var51 = varonce50;
8849 } else {
8850 var52 = "val*";
8851 var53 = 4;
8852 var54 = string__NativeString__to_s_with_length(var52, var53);
8853 var51 = var54;
8854 varonce50 = var51;
8855 }
8856 var55 = ((short int (*)(val*, val*))(var49->class->vft[COLOR_kernel__Object___33d_61d]))(var49, var51) /* != on <var49:String>*/;
8857 if (var55){
8858 var56 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
8859 var57 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
8860 var58 = ((val* (*)(val*))(var57->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var57) /* mainmodule on <var57:AbstractCompiler(GlobalCompiler)>*/;
8861 var59 = NULL;
8862 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>*/;
8863 if (var60){
8864 if (varonce61) {
8865 var62 = varonce61;
8866 } else {
8867 var63 = " = 1;";
8868 var64 = 5;
8869 var65 = string__NativeString__to_s_with_length(var63, var64);
8870 var62 = var65;
8871 varonce61 = var62;
8872 }
8873 var66 = NEW_array__Array(&type_array__Arraykernel__Object);
8874 { /* var66 = array_instance Array[Object] */
8875 var67 = 2;
8876 var68 = NEW_array__NativeArray(var67, &type_array__NativeArraykernel__Object);
8877 ((struct instance_array__NativeArray*)var68)->values[0] = (val*) var_res;
8878 ((struct instance_array__NativeArray*)var68)->values[1] = (val*) var62;
8879 ((void (*)(val*, val*, long))(var66->class->vft[COLOR_array__Array__with_native]))(var66, var68, var67) /* with_native on <var66:Array[Object]>*/;
8880 CHECK_NEW_array__Array(var66);
8881 }
8882 var69 = ((val* (*)(val*))(var66->class->vft[COLOR_string__Object__to_s]))(var66) /* to_s on <var66:Array[Object]>*/;
8883 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var69) /* add on <self:GlobalCompilerVisitor>*/;
8884 } else {
8885 if (varonce70) {
8886 var71 = varonce70;
8887 } else {
8888 var72 = " = 0;";
8889 var73 = 5;
8890 var74 = string__NativeString__to_s_with_length(var72, var73);
8891 var71 = var74;
8892 varonce70 = var71;
8893 }
8894 var75 = NEW_array__Array(&type_array__Arraykernel__Object);
8895 { /* var75 = array_instance Array[Object] */
8896 var76 = 2;
8897 var77 = NEW_array__NativeArray(var76, &type_array__NativeArraykernel__Object);
8898 ((struct instance_array__NativeArray*)var77)->values[0] = (val*) var_res;
8899 ((struct instance_array__NativeArray*)var77)->values[1] = (val*) var71;
8900 ((void (*)(val*, val*, long))(var75->class->vft[COLOR_array__Array__with_native]))(var75, var77, var76) /* with_native on <var75:Array[Object]>*/;
8901 CHECK_NEW_array__Array(var75);
8902 }
8903 var78 = ((val* (*)(val*))(var75->class->vft[COLOR_string__Object__to_s]))(var75) /* to_s on <var75:Array[Object]>*/;
8904 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var78) /* add on <self:GlobalCompilerVisitor>*/;
8905 }
8906 var = var_res;
8907 goto RET_LABEL;
8908 } else {
8909 }
8910 var80 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
8911 /* <var80:MType> isa MNullableType */
8912 cltype82 = type_model__MNullableType.color;
8913 idtype83 = type_model__MNullableType.id;
8914 if(cltype82 >= var80->type->table_size) {
8915 var81 = 0;
8916 } else {
8917 var81 = var80->type->type_table[cltype82] == idtype83;
8918 }
8919 var_ = var81;
8920 if (var81){
8921 var79 = var_;
8922 } else {
8923 var84 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
8924 /* <var84:MType> isa MNullType */
8925 cltype86 = type_model__MNullType.color;
8926 idtype87 = type_model__MNullType.id;
8927 if(cltype86 >= var84->type->table_size) {
8928 var85 = 0;
8929 } else {
8930 var85 = var84->type->type_table[cltype86] == idtype87;
8931 }
8932 var79 = var85;
8933 }
8934 if (var79){
8935 if (varonce88) {
8936 var89 = varonce88;
8937 } else {
8938 var90 = "if (";
8939 var91 = 4;
8940 var92 = string__NativeString__to_s_with_length(var90, var91);
8941 var89 = var92;
8942 varonce88 = var89;
8943 }
8944 if (varonce93) {
8945 var94 = varonce93;
8946 } else {
8947 var95 = " == NULL) {";
8948 var96 = 11;
8949 var97 = string__NativeString__to_s_with_length(var95, var96);
8950 var94 = var97;
8951 varonce93 = var94;
8952 }
8953 var98 = NEW_array__Array(&type_array__Arraykernel__Object);
8954 { /* var98 = array_instance Array[Object] */
8955 var99 = 3;
8956 var100 = NEW_array__NativeArray(var99, &type_array__NativeArraykernel__Object);
8957 ((struct instance_array__NativeArray*)var100)->values[0] = (val*) var89;
8958 ((struct instance_array__NativeArray*)var100)->values[1] = (val*) var_value;
8959 ((struct instance_array__NativeArray*)var100)->values[2] = (val*) var94;
8960 ((void (*)(val*, val*, long))(var98->class->vft[COLOR_array__Array__with_native]))(var98, var100, var99) /* with_native on <var98:Array[Object]>*/;
8961 CHECK_NEW_array__Array(var98);
8962 }
8963 var101 = ((val* (*)(val*))(var98->class->vft[COLOR_string__Object__to_s]))(var98) /* to_s on <var98:Array[Object]>*/;
8964 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var101) /* add on <self:GlobalCompilerVisitor>*/;
8965 /* <var_mtype:MType> isa MNullableType */
8966 cltype103 = type_model__MNullableType.color;
8967 idtype104 = type_model__MNullableType.id;
8968 if(cltype103 >= var_mtype->type->table_size) {
8969 var102 = 0;
8970 } else {
8971 var102 = var_mtype->type->type_table[cltype103] == idtype104;
8972 }
8973 if (var102){
8974 if (varonce105) {
8975 var106 = varonce105;
8976 } else {
8977 var107 = " = 1; /* isa ";
8978 var108 = 13;
8979 var109 = string__NativeString__to_s_with_length(var107, var108);
8980 var106 = var109;
8981 varonce105 = var106;
8982 }
8983 if (varonce110) {
8984 var111 = varonce110;
8985 } else {
8986 var112 = " */";
8987 var113 = 3;
8988 var114 = string__NativeString__to_s_with_length(var112, var113);
8989 var111 = var114;
8990 varonce110 = var111;
8991 }
8992 var115 = NEW_array__Array(&type_array__Arraykernel__Object);
8993 { /* var115 = array_instance Array[Object] */
8994 var116 = 4;
8995 var117 = NEW_array__NativeArray(var116, &type_array__NativeArraykernel__Object);
8996 ((struct instance_array__NativeArray*)var117)->values[0] = (val*) var_res;
8997 ((struct instance_array__NativeArray*)var117)->values[1] = (val*) var106;
8998 ((struct instance_array__NativeArray*)var117)->values[2] = (val*) var_mtype;
8999 ((struct instance_array__NativeArray*)var117)->values[3] = (val*) var111;
9000 ((void (*)(val*, val*, long))(var115->class->vft[COLOR_array__Array__with_native]))(var115, var117, var116) /* with_native on <var115:Array[Object]>*/;
9001 CHECK_NEW_array__Array(var115);
9002 }
9003 var118 = ((val* (*)(val*))(var115->class->vft[COLOR_string__Object__to_s]))(var115) /* to_s on <var115:Array[Object]>*/;
9004 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var118) /* add on <self:GlobalCompilerVisitor>*/;
9005 } else {
9006 if (varonce119) {
9007 var120 = varonce119;
9008 } else {
9009 var121 = " = 0; /* not isa ";
9010 var122 = 17;
9011 var123 = string__NativeString__to_s_with_length(var121, var122);
9012 var120 = var123;
9013 varonce119 = var120;
9014 }
9015 if (varonce124) {
9016 var125 = varonce124;
9017 } else {
9018 var126 = " */";
9019 var127 = 3;
9020 var128 = string__NativeString__to_s_with_length(var126, var127);
9021 var125 = var128;
9022 varonce124 = var125;
9023 }
9024 var129 = NEW_array__Array(&type_array__Arraykernel__Object);
9025 { /* var129 = array_instance Array[Object] */
9026 var130 = 4;
9027 var131 = NEW_array__NativeArray(var130, &type_array__NativeArraykernel__Object);
9028 ((struct instance_array__NativeArray*)var131)->values[0] = (val*) var_res;
9029 ((struct instance_array__NativeArray*)var131)->values[1] = (val*) var120;
9030 ((struct instance_array__NativeArray*)var131)->values[2] = (val*) var_mtype;
9031 ((struct instance_array__NativeArray*)var131)->values[3] = (val*) var125;
9032 ((void (*)(val*, val*, long))(var129->class->vft[COLOR_array__Array__with_native]))(var129, var131, var130) /* with_native on <var129:Array[Object]>*/;
9033 CHECK_NEW_array__Array(var129);
9034 }
9035 var132 = ((val* (*)(val*))(var129->class->vft[COLOR_string__Object__to_s]))(var129) /* to_s on <var129:Array[Object]>*/;
9036 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var132) /* add on <self:GlobalCompilerVisitor>*/;
9037 }
9038 if (varonce133) {
9039 var134 = varonce133;
9040 } else {
9041 var135 = "} else ";
9042 var136 = 7;
9043 var137 = string__NativeString__to_s_with_length(var135, var136);
9044 var134 = var137;
9045 varonce133 = var134;
9046 }
9047 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var134) /* add on <self:GlobalCompilerVisitor>*/;
9048 } else {
9049 }
9050 if (varonce138) {
9051 var139 = varonce138;
9052 } else {
9053 var140 = "switch(";
9054 var141 = 7;
9055 var142 = string__NativeString__to_s_with_length(var140, var141);
9056 var139 = var142;
9057 varonce138 = var139;
9058 }
9059 if (varonce143) {
9060 var144 = varonce143;
9061 } else {
9062 var145 = "->classid) {";
9063 var146 = 12;
9064 var147 = string__NativeString__to_s_with_length(var145, var146);
9065 var144 = var147;
9066 varonce143 = var144;
9067 }
9068 var148 = NEW_array__Array(&type_array__Arraykernel__Object);
9069 { /* var148 = array_instance Array[Object] */
9070 var149 = 3;
9071 var150 = NEW_array__NativeArray(var149, &type_array__NativeArraykernel__Object);
9072 ((struct instance_array__NativeArray*)var150)->values[0] = (val*) var139;
9073 ((struct instance_array__NativeArray*)var150)->values[1] = (val*) var_value;
9074 ((struct instance_array__NativeArray*)var150)->values[2] = (val*) var144;
9075 ((void (*)(val*, val*, long))(var148->class->vft[COLOR_array__Array__with_native]))(var148, var150, var149) /* with_native on <var148:Array[Object]>*/;
9076 CHECK_NEW_array__Array(var148);
9077 }
9078 var151 = ((val* (*)(val*))(var148->class->vft[COLOR_string__Object__to_s]))(var148) /* to_s on <var148:Array[Object]>*/;
9079 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var151) /* add on <self:GlobalCompilerVisitor>*/;
9080 var152 = ((val* (*)(val*))(var_types->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_types) /* iterator on <var_types:Array[MClassType]>*/;
9081 for(;;) {
9082 var153 = ((short int (*)(val*))(var152->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var152) /* is_ok on <var152:Iterator[nullable Object]>*/;
9083 if(!var153) break;
9084 var154 = ((val* (*)(val*))(var152->class->vft[COLOR_abstract_collection__Iterator__item]))(var152) /* item on <var152:Iterator[nullable Object]>*/;
9085 var_t = var154;
9086 var155 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9087 var156 = ((val* (*)(val*))(var155->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var155) /* mainmodule on <var155:AbstractCompiler(GlobalCompiler)>*/;
9088 var157 = NULL;
9089 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>*/;
9090 if (var158){
9091 if (varonce159) {
9092 var160 = varonce159;
9093 } else {
9094 var161 = "case ";
9095 var162 = 5;
9096 var163 = string__NativeString__to_s_with_length(var161, var162);
9097 var160 = var163;
9098 varonce159 = var160;
9099 }
9100 var164 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9101 var165 = ((val* (*)(val*, val*))(var164->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var164, var_t) /* classid on <var164:AbstractCompiler(GlobalCompiler)>*/;
9102 if (varonce166) {
9103 var167 = varonce166;
9104 } else {
9105 var168 = ": /* ";
9106 var169 = 5;
9107 var170 = string__NativeString__to_s_with_length(var168, var169);
9108 var167 = var170;
9109 varonce166 = var167;
9110 }
9111 if (varonce171) {
9112 var172 = varonce171;
9113 } else {
9114 var173 = " */";
9115 var174 = 3;
9116 var175 = string__NativeString__to_s_with_length(var173, var174);
9117 var172 = var175;
9118 varonce171 = var172;
9119 }
9120 var176 = NEW_array__Array(&type_array__Arraykernel__Object);
9121 { /* var176 = array_instance Array[Object] */
9122 var177 = 5;
9123 var178 = NEW_array__NativeArray(var177, &type_array__NativeArraykernel__Object);
9124 ((struct instance_array__NativeArray*)var178)->values[0] = (val*) var160;
9125 ((struct instance_array__NativeArray*)var178)->values[1] = (val*) var165;
9126 ((struct instance_array__NativeArray*)var178)->values[2] = (val*) var167;
9127 ((struct instance_array__NativeArray*)var178)->values[3] = (val*) var_t;
9128 ((struct instance_array__NativeArray*)var178)->values[4] = (val*) var172;
9129 ((void (*)(val*, val*, long))(var176->class->vft[COLOR_array__Array__with_native]))(var176, var178, var177) /* with_native on <var176:Array[Object]>*/;
9130 CHECK_NEW_array__Array(var176);
9131 }
9132 var179 = ((val* (*)(val*))(var176->class->vft[COLOR_string__Object__to_s]))(var176) /* to_s on <var176:Array[Object]>*/;
9133 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var179) /* add on <self:GlobalCompilerVisitor>*/;
9134 } else {
9135 }
9136 CONTINUE_label: (void)0;
9137 ((void (*)(val*))(var152->class->vft[COLOR_abstract_collection__Iterator__next]))(var152) /* next on <var152:Iterator[nullable Object]>*/;
9138 }
9139 BREAK_label: (void)0;
9140 if (varonce180) {
9141 var181 = varonce180;
9142 } else {
9143 var182 = " = 1;";
9144 var183 = 5;
9145 var184 = string__NativeString__to_s_with_length(var182, var183);
9146 var181 = var184;
9147 varonce180 = var181;
9148 }
9149 var185 = NEW_array__Array(&type_array__Arraykernel__Object);
9150 { /* var185 = array_instance Array[Object] */
9151 var186 = 2;
9152 var187 = NEW_array__NativeArray(var186, &type_array__NativeArraykernel__Object);
9153 ((struct instance_array__NativeArray*)var187)->values[0] = (val*) var_res;
9154 ((struct instance_array__NativeArray*)var187)->values[1] = (val*) var181;
9155 ((void (*)(val*, val*, long))(var185->class->vft[COLOR_array__Array__with_native]))(var185, var187, var186) /* with_native on <var185:Array[Object]>*/;
9156 CHECK_NEW_array__Array(var185);
9157 }
9158 var188 = ((val* (*)(val*))(var185->class->vft[COLOR_string__Object__to_s]))(var185) /* to_s on <var185:Array[Object]>*/;
9159 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var188) /* add on <self:GlobalCompilerVisitor>*/;
9160 if (varonce189) {
9161 var190 = varonce189;
9162 } else {
9163 var191 = "break;";
9164 var192 = 6;
9165 var193 = string__NativeString__to_s_with_length(var191, var192);
9166 var190 = var193;
9167 varonce189 = var190;
9168 }
9169 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var190) /* add on <self:GlobalCompilerVisitor>*/;
9170 if (varonce194) {
9171 var195 = varonce194;
9172 } else {
9173 var196 = "default:";
9174 var197 = 8;
9175 var198 = string__NativeString__to_s_with_length(var196, var197);
9176 var195 = var198;
9177 varonce194 = var195;
9178 }
9179 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var195) /* add on <self:GlobalCompilerVisitor>*/;
9180 if (varonce199) {
9181 var200 = varonce199;
9182 } else {
9183 var201 = " = 0;";
9184 var202 = 5;
9185 var203 = string__NativeString__to_s_with_length(var201, var202);
9186 var200 = var203;
9187 varonce199 = var200;
9188 }
9189 var204 = NEW_array__Array(&type_array__Arraykernel__Object);
9190 { /* var204 = array_instance Array[Object] */
9191 var205 = 2;
9192 var206 = NEW_array__NativeArray(var205, &type_array__NativeArraykernel__Object);
9193 ((struct instance_array__NativeArray*)var206)->values[0] = (val*) var_res;
9194 ((struct instance_array__NativeArray*)var206)->values[1] = (val*) var200;
9195 ((void (*)(val*, val*, long))(var204->class->vft[COLOR_array__Array__with_native]))(var204, var206, var205) /* with_native on <var204:Array[Object]>*/;
9196 CHECK_NEW_array__Array(var204);
9197 }
9198 var207 = ((val* (*)(val*))(var204->class->vft[COLOR_string__Object__to_s]))(var204) /* to_s on <var204:Array[Object]>*/;
9199 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var207) /* add on <self:GlobalCompilerVisitor>*/;
9200 if (varonce208) {
9201 var209 = varonce208;
9202 } else {
9203 var210 = "}";
9204 var211 = 1;
9205 var212 = string__NativeString__to_s_with_length(var210, var211);
9206 var209 = var212;
9207 varonce208 = var209;
9208 }
9209 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var209) /* add on <self:GlobalCompilerVisitor>*/;
9210 var = var_res;
9211 goto RET_LABEL;
9212 RET_LABEL:;
9213 return var;
9214 }
9215 /* method global_compiler#GlobalCompilerVisitor#type_test for (self: Object, RuntimeVariable, MType, String): RuntimeVariable */
9216 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
9217 val* var /* : RuntimeVariable */;
9218 val* var1 /* : RuntimeVariable */;
9219 var1 = global_compiler__GlobalCompilerVisitor__type_test(self, p0, p1, p2);
9220 var = var1;
9221 RET_LABEL:;
9222 return var;
9223 }
9224 /* method global_compiler#GlobalCompilerVisitor#is_same_type_test for (self: GlobalCompilerVisitor, RuntimeVariable, RuntimeVariable): RuntimeVariable */
9225 val* global_compiler__GlobalCompilerVisitor__is_same_type_test(val* self, val* p0, val* p1) {
9226 val* var /* : RuntimeVariable */;
9227 val* var_value1 /* var value1: RuntimeVariable */;
9228 val* var_value2 /* var value2: RuntimeVariable */;
9229 val* var1 /* : MClassType */;
9230 val* var2 /* : RuntimeVariable */;
9231 val* var_res /* var res: RuntimeVariable */;
9232 val* var3 /* : MType */;
9233 val* var4 /* : String */;
9234 static val* varonce;
9235 val* var5 /* : String */;
9236 char* var6 /* : NativeString */;
9237 long var7 /* : Int */;
9238 val* var8 /* : String */;
9239 short int var9 /* : Bool */;
9240 val* var10 /* : MType */;
9241 val* var11 /* : String */;
9242 static val* varonce12;
9243 val* var13 /* : String */;
9244 char* var14 /* : NativeString */;
9245 long var15 /* : Int */;
9246 val* var16 /* : String */;
9247 short int var17 /* : Bool */;
9248 static val* varonce18;
9249 val* var19 /* : String */;
9250 char* var20 /* : NativeString */;
9251 long var21 /* : Int */;
9252 val* var22 /* : String */;
9253 static val* varonce23;
9254 val* var24 /* : String */;
9255 char* var25 /* : NativeString */;
9256 long var26 /* : Int */;
9257 val* var27 /* : String */;
9258 static val* varonce28;
9259 val* var29 /* : String */;
9260 char* var30 /* : NativeString */;
9261 long var31 /* : Int */;
9262 val* var32 /* : String */;
9263 val* var33 /* : Array[Object] */;
9264 long var34 /* : Int */;
9265 val* var35 /* : NativeArray[Object] */;
9266 val* var36 /* : String */;
9267 static val* varonce37;
9268 val* var38 /* : String */;
9269 char* var39 /* : NativeString */;
9270 long var40 /* : Int */;
9271 val* var41 /* : String */;
9272 val* var42 /* : AbstractCompiler */;
9273 val* var43 /* : MType */;
9274 short int var44 /* : Bool */;
9275 int cltype;
9276 int idtype;
9277 val* var45 /* : String */;
9278 static val* varonce46;
9279 val* var47 /* : String */;
9280 char* var48 /* : NativeString */;
9281 long var49 /* : Int */;
9282 val* var50 /* : String */;
9283 static val* varonce51;
9284 val* var52 /* : String */;
9285 char* var53 /* : NativeString */;
9286 long var54 /* : Int */;
9287 val* var55 /* : String */;
9288 val* var56 /* : Array[Object] */;
9289 long var57 /* : Int */;
9290 val* var58 /* : NativeArray[Object] */;
9291 val* var59 /* : String */;
9292 val* var60 /* : MType */;
9293 val* var61 /* : String */;
9294 static val* varonce62;
9295 val* var63 /* : String */;
9296 char* var64 /* : NativeString */;
9297 long var65 /* : Int */;
9298 val* var66 /* : String */;
9299 short int var67 /* : Bool */;
9300 static val* varonce68;
9301 val* var69 /* : String */;
9302 char* var70 /* : NativeString */;
9303 long var71 /* : Int */;
9304 val* var72 /* : String */;
9305 static val* varonce73;
9306 val* var74 /* : String */;
9307 char* var75 /* : NativeString */;
9308 long var76 /* : Int */;
9309 val* var77 /* : String */;
9310 val* var78 /* : AbstractCompiler */;
9311 val* var79 /* : MType */;
9312 short int var80 /* : Bool */;
9313 int cltype81;
9314 int idtype82;
9315 val* var83 /* : String */;
9316 static val* varonce84;
9317 val* var85 /* : String */;
9318 char* var86 /* : NativeString */;
9319 long var87 /* : Int */;
9320 val* var88 /* : String */;
9321 val* var89 /* : Array[Object] */;
9322 long var90 /* : Int */;
9323 val* var91 /* : NativeArray[Object] */;
9324 val* var92 /* : String */;
9325 val* var93 /* : MType */;
9326 val* var94 /* : MType */;
9327 short int var95 /* : Bool */;
9328 static val* varonce96;
9329 val* var97 /* : String */;
9330 char* var98 /* : NativeString */;
9331 long var99 /* : Int */;
9332 val* var100 /* : String */;
9333 val* var101 /* : Array[Object] */;
9334 long var102 /* : Int */;
9335 val* var103 /* : NativeArray[Object] */;
9336 val* var104 /* : String */;
9337 static val* varonce105;
9338 val* var106 /* : String */;
9339 char* var107 /* : NativeString */;
9340 long var108 /* : Int */;
9341 val* var109 /* : String */;
9342 val* var110 /* : Array[Object] */;
9343 long var111 /* : Int */;
9344 val* var112 /* : NativeArray[Object] */;
9345 val* var113 /* : String */;
9346 var_value1 = p0;
9347 var_value2 = p1;
9348 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:GlobalCompilerVisitor>*/;
9349 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var1) /* new_var on <self:GlobalCompilerVisitor>*/;
9350 var_res = var2;
9351 var3 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value2) /* mtype on <var_value2:RuntimeVariable>*/;
9352 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_compiler__MType__ctype]))(var3) /* ctype on <var3:MType>*/;
9353 if (varonce) {
9354 var5 = varonce;
9355 } else {
9356 var6 = "val*";
9357 var7 = 4;
9358 var8 = string__NativeString__to_s_with_length(var6, var7);
9359 var5 = var8;
9360 varonce = var5;
9361 }
9362 var9 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_kernel__Object___61d_61d]))(var4, var5) /* == on <var4:String>*/;
9363 if (var9){
9364 var10 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9365 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__MType__ctype]))(var10) /* ctype on <var10:MType>*/;
9366 if (varonce12) {
9367 var13 = varonce12;
9368 } else {
9369 var14 = "val*";
9370 var15 = 4;
9371 var16 = string__NativeString__to_s_with_length(var14, var15);
9372 var13 = var16;
9373 varonce12 = var13;
9374 }
9375 var17 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var13) /* == on <var11:String>*/;
9376 if (var17){
9377 if (varonce18) {
9378 var19 = varonce18;
9379 } else {
9380 var20 = " = ";
9381 var21 = 3;
9382 var22 = string__NativeString__to_s_with_length(var20, var21);
9383 var19 = var22;
9384 varonce18 = var19;
9385 }
9386 if (varonce23) {
9387 var24 = varonce23;
9388 } else {
9389 var25 = "->classid == ";
9390 var26 = 13;
9391 var27 = string__NativeString__to_s_with_length(var25, var26);
9392 var24 = var27;
9393 varonce23 = var24;
9394 }
9395 if (varonce28) {
9396 var29 = varonce28;
9397 } else {
9398 var30 = "->classid;";
9399 var31 = 10;
9400 var32 = string__NativeString__to_s_with_length(var30, var31);
9401 var29 = var32;
9402 varonce28 = var29;
9403 }
9404 var33 = NEW_array__Array(&type_array__Arraykernel__Object);
9405 { /* var33 = array_instance Array[Object] */
9406 var34 = 6;
9407 var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
9408 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var_res;
9409 ((struct instance_array__NativeArray*)var35)->values[1] = (val*) var19;
9410 ((struct instance_array__NativeArray*)var35)->values[2] = (val*) var_value1;
9411 ((struct instance_array__NativeArray*)var35)->values[3] = (val*) var24;
9412 ((struct instance_array__NativeArray*)var35)->values[4] = (val*) var_value2;
9413 ((struct instance_array__NativeArray*)var35)->values[5] = (val*) var29;
9414 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
9415 CHECK_NEW_array__Array(var33);
9416 }
9417 var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
9418 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var36) /* add on <self:GlobalCompilerVisitor>*/;
9419 } else {
9420 if (varonce37) {
9421 var38 = varonce37;
9422 } else {
9423 var39 = " = ";
9424 var40 = 3;
9425 var41 = string__NativeString__to_s_with_length(var39, var40);
9426 var38 = var41;
9427 varonce37 = var38;
9428 }
9429 var42 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9430 var43 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9431 /* <var43:MType> isa MClassType */
9432 cltype = type_model__MClassType.color;
9433 idtype = type_model__MClassType.id;
9434 if(cltype >= var43->type->table_size) {
9435 var44 = 0;
9436 } else {
9437 var44 = var43->type->type_table[cltype] == idtype;
9438 }
9439 if (!var44) {
9440 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 767);
9441 exit(1);
9442 }
9443 var45 = ((val* (*)(val*, val*))(var42->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var42, var43) /* classid on <var42:AbstractCompiler(GlobalCompiler)>*/;
9444 if (varonce46) {
9445 var47 = varonce46;
9446 } else {
9447 var48 = " == ";
9448 var49 = 4;
9449 var50 = string__NativeString__to_s_with_length(var48, var49);
9450 var47 = var50;
9451 varonce46 = var47;
9452 }
9453 if (varonce51) {
9454 var52 = varonce51;
9455 } else {
9456 var53 = "->classid;";
9457 var54 = 10;
9458 var55 = string__NativeString__to_s_with_length(var53, var54);
9459 var52 = var55;
9460 varonce51 = var52;
9461 }
9462 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
9463 { /* var56 = array_instance Array[Object] */
9464 var57 = 6;
9465 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
9466 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var_res;
9467 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var38;
9468 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var45;
9469 ((struct instance_array__NativeArray*)var58)->values[3] = (val*) var47;
9470 ((struct instance_array__NativeArray*)var58)->values[4] = (val*) var_value2;
9471 ((struct instance_array__NativeArray*)var58)->values[5] = (val*) var52;
9472 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
9473 CHECK_NEW_array__Array(var56);
9474 }
9475 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
9476 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
9477 }
9478 } else {
9479 var60 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value1) /* mtype on <var_value1:RuntimeVariable>*/;
9480 var61 = ((val* (*)(val*))(var60->class->vft[COLOR_abstract_compiler__MType__ctype]))(var60) /* ctype on <var60:MType>*/;
9481 if (varonce62) {
9482 var63 = varonce62;
9483 } else {
9484 var64 = "val*";
9485 var65 = 4;
9486 var66 = string__NativeString__to_s_with_length(var64, var65);
9487 var63 = var66;
9488 varonce62 = var63;
9489 }
9490 var67 = ((short int (*)(val*, val*))(var61->class->vft[COLOR_kernel__Object___61d_61d]))(var61, var63) /* == on <var61:String>*/;
9491 if (var67){
9492 if (varonce68) {
9493 var69 = varonce68;
9494 } else {
9495 var70 = " = ";
9496 var71 = 3;
9497 var72 = string__NativeString__to_s_with_length(var70, var71);
9498 var69 = var72;
9499 varonce68 = var69;
9500 }
9501 if (varonce73) {
9502 var74 = varonce73;
9503 } else {
9504 var75 = "->classid == ";
9505 var76 = 13;
9506 var77 = string__NativeString__to_s_with_length(var75, var76);
9507 var74 = var77;
9508 varonce73 = var74;
9509 }
9510 var78 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9511 var79 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value2) /* mtype on <var_value2:RuntimeVariable>*/;
9512 /* <var79:MType> isa MClassType */
9513 cltype81 = type_model__MClassType.color;
9514 idtype82 = type_model__MClassType.id;
9515 if(cltype81 >= var79->type->table_size) {
9516 var80 = 0;
9517 } else {
9518 var80 = var79->type->type_table[cltype81] == idtype82;
9519 }
9520 if (!var80) {
9521 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 771);
9522 exit(1);
9523 }
9524 var83 = ((val* (*)(val*, val*))(var78->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var78, var79) /* classid on <var78:AbstractCompiler(GlobalCompiler)>*/;
9525 if (varonce84) {
9526 var85 = varonce84;
9527 } else {
9528 var86 = ";";
9529 var87 = 1;
9530 var88 = string__NativeString__to_s_with_length(var86, var87);
9531 var85 = var88;
9532 varonce84 = var85;
9533 }
9534 var89 = NEW_array__Array(&type_array__Arraykernel__Object);
9535 { /* var89 = array_instance Array[Object] */
9536 var90 = 6;
9537 var91 = NEW_array__NativeArray(var90, &type_array__NativeArraykernel__Object);
9538 ((struct instance_array__NativeArray*)var91)->values[0] = (val*) var_res;
9539 ((struct instance_array__NativeArray*)var91)->values[1] = (val*) var69;
9540 ((struct instance_array__NativeArray*)var91)->values[2] = (val*) var_value1;
9541 ((struct instance_array__NativeArray*)var91)->values[3] = (val*) var74;
9542 ((struct instance_array__NativeArray*)var91)->values[4] = (val*) var83;
9543 ((struct instance_array__NativeArray*)var91)->values[5] = (val*) var85;
9544 ((void (*)(val*, val*, long))(var89->class->vft[COLOR_array__Array__with_native]))(var89, var91, var90) /* with_native on <var89:Array[Object]>*/;
9545 CHECK_NEW_array__Array(var89);
9546 }
9547 var92 = ((val* (*)(val*))(var89->class->vft[COLOR_string__Object__to_s]))(var89) /* to_s on <var89:Array[Object]>*/;
9548 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var92) /* add on <self:GlobalCompilerVisitor>*/;
9549 } else {
9550 var93 = ((val* (*)(val*))(var_value1->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value1) /* mcasttype on <var_value1:RuntimeVariable>*/;
9551 var94 = ((val* (*)(val*))(var_value2->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value2) /* mcasttype on <var_value2:RuntimeVariable>*/;
9552 var95 = ((short int (*)(val*, val*))(var93->class->vft[COLOR_kernel__Object___61d_61d]))(var93, var94) /* == on <var93:MType>*/;
9553 if (var95){
9554 if (varonce96) {
9555 var97 = varonce96;
9556 } else {
9557 var98 = " = 1;";
9558 var99 = 5;
9559 var100 = string__NativeString__to_s_with_length(var98, var99);
9560 var97 = var100;
9561 varonce96 = var97;
9562 }
9563 var101 = NEW_array__Array(&type_array__Arraykernel__Object);
9564 { /* var101 = array_instance Array[Object] */
9565 var102 = 2;
9566 var103 = NEW_array__NativeArray(var102, &type_array__NativeArraykernel__Object);
9567 ((struct instance_array__NativeArray*)var103)->values[0] = (val*) var_res;
9568 ((struct instance_array__NativeArray*)var103)->values[1] = (val*) var97;
9569 ((void (*)(val*, val*, long))(var101->class->vft[COLOR_array__Array__with_native]))(var101, var103, var102) /* with_native on <var101:Array[Object]>*/;
9570 CHECK_NEW_array__Array(var101);
9571 }
9572 var104 = ((val* (*)(val*))(var101->class->vft[COLOR_string__Object__to_s]))(var101) /* to_s on <var101:Array[Object]>*/;
9573 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var104) /* add on <self:GlobalCompilerVisitor>*/;
9574 } else {
9575 if (varonce105) {
9576 var106 = varonce105;
9577 } else {
9578 var107 = " = 0;";
9579 var108 = 5;
9580 var109 = string__NativeString__to_s_with_length(var107, var108);
9581 var106 = var109;
9582 varonce105 = var106;
9583 }
9584 var110 = NEW_array__Array(&type_array__Arraykernel__Object);
9585 { /* var110 = array_instance Array[Object] */
9586 var111 = 2;
9587 var112 = NEW_array__NativeArray(var111, &type_array__NativeArraykernel__Object);
9588 ((struct instance_array__NativeArray*)var112)->values[0] = (val*) var_res;
9589 ((struct instance_array__NativeArray*)var112)->values[1] = (val*) var106;
9590 ((void (*)(val*, val*, long))(var110->class->vft[COLOR_array__Array__with_native]))(var110, var112, var111) /* with_native on <var110:Array[Object]>*/;
9591 CHECK_NEW_array__Array(var110);
9592 }
9593 var113 = ((val* (*)(val*))(var110->class->vft[COLOR_string__Object__to_s]))(var110) /* to_s on <var110:Array[Object]>*/;
9594 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var113) /* add on <self:GlobalCompilerVisitor>*/;
9595 }
9596 }
9597 }
9598 var = var_res;
9599 goto RET_LABEL;
9600 RET_LABEL:;
9601 return var;
9602 }
9603 /* method global_compiler#GlobalCompilerVisitor#is_same_type_test for (self: Object, RuntimeVariable, RuntimeVariable): RuntimeVariable */
9604 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__is_same_type_test(val* self, val* p0, val* p1) {
9605 val* var /* : RuntimeVariable */;
9606 val* var1 /* : RuntimeVariable */;
9607 var1 = global_compiler__GlobalCompilerVisitor__is_same_type_test(self, p0, p1);
9608 var = var1;
9609 RET_LABEL:;
9610 return var;
9611 }
9612 /* method global_compiler#GlobalCompilerVisitor#class_name_string for (self: GlobalCompilerVisitor, RuntimeVariable): String */
9613 val* global_compiler__GlobalCompilerVisitor__class_name_string(val* self, val* p0) {
9614 val* var /* : String */;
9615 val* var_value /* var value: RuntimeVariable */;
9616 static val* varonce;
9617 val* var1 /* : String */;
9618 char* var2 /* : NativeString */;
9619 long var3 /* : Int */;
9620 val* var4 /* : String */;
9621 val* var5 /* : String */;
9622 val* var_res /* var res: String */;
9623 static val* varonce6;
9624 val* var7 /* : String */;
9625 char* var8 /* : NativeString */;
9626 long var9 /* : Int */;
9627 val* var10 /* : String */;
9628 static val* varonce11;
9629 val* var12 /* : String */;
9630 char* var13 /* : NativeString */;
9631 long var14 /* : Int */;
9632 val* var15 /* : String */;
9633 val* var16 /* : Array[Object] */;
9634 long var17 /* : Int */;
9635 val* var18 /* : NativeArray[Object] */;
9636 val* var19 /* : String */;
9637 val* var20 /* : MType */;
9638 val* var21 /* : String */;
9639 static val* varonce22;
9640 val* var23 /* : String */;
9641 char* var24 /* : NativeString */;
9642 long var25 /* : Int */;
9643 val* var26 /* : String */;
9644 short int var27 /* : Bool */;
9645 static val* varonce28;
9646 val* var29 /* : String */;
9647 char* var30 /* : NativeString */;
9648 long var31 /* : Int */;
9649 val* var32 /* : String */;
9650 static val* varonce33;
9651 val* var34 /* : String */;
9652 char* var35 /* : NativeString */;
9653 long var36 /* : Int */;
9654 val* var37 /* : String */;
9655 val* var38 /* : Array[Object] */;
9656 long var39 /* : Int */;
9657 val* var40 /* : NativeArray[Object] */;
9658 val* var41 /* : String */;
9659 static val* varonce42;
9660 val* var43 /* : String */;
9661 char* var44 /* : NativeString */;
9662 long var45 /* : Int */;
9663 val* var46 /* : String */;
9664 val* var47 /* : AbstractCompiler */;
9665 val* var48 /* : MType */;
9666 short int var49 /* : Bool */;
9667 int cltype;
9668 int idtype;
9669 val* var50 /* : String */;
9670 static val* varonce51;
9671 val* var52 /* : String */;
9672 char* var53 /* : NativeString */;
9673 long var54 /* : Int */;
9674 val* var55 /* : String */;
9675 val* var56 /* : Array[Object] */;
9676 long var57 /* : Int */;
9677 val* var58 /* : NativeArray[Object] */;
9678 val* var59 /* : String */;
9679 var_value = p0;
9680 if (varonce) {
9681 var1 = varonce;
9682 } else {
9683 var2 = "var_class_name";
9684 var3 = 14;
9685 var4 = string__NativeString__to_s_with_length(var2, var3);
9686 var1 = var4;
9687 varonce = var1;
9688 }
9689 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var1) /* get_name on <self:GlobalCompilerVisitor>*/;
9690 var_res = var5;
9691 if (varonce6) {
9692 var7 = varonce6;
9693 } else {
9694 var8 = "const char* ";
9695 var9 = 12;
9696 var10 = string__NativeString__to_s_with_length(var8, var9);
9697 var7 = var10;
9698 varonce6 = var7;
9699 }
9700 if (varonce11) {
9701 var12 = varonce11;
9702 } else {
9703 var13 = ";";
9704 var14 = 1;
9705 var15 = string__NativeString__to_s_with_length(var13, var14);
9706 var12 = var15;
9707 varonce11 = var12;
9708 }
9709 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
9710 { /* var16 = array_instance Array[Object] */
9711 var17 = 3;
9712 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
9713 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
9714 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_res;
9715 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
9716 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
9717 CHECK_NEW_array__Array(var16);
9718 }
9719 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
9720 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var19) /* add_decl on <self:GlobalCompilerVisitor>*/;
9721 var20 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
9722 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_compiler__MType__ctype]))(var20) /* ctype on <var20:MType>*/;
9723 if (varonce22) {
9724 var23 = varonce22;
9725 } else {
9726 var24 = "val*";
9727 var25 = 4;
9728 var26 = string__NativeString__to_s_with_length(var24, var25);
9729 var23 = var26;
9730 varonce22 = var23;
9731 }
9732 var27 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var23) /* == on <var21:String>*/;
9733 if (var27){
9734 if (varonce28) {
9735 var29 = varonce28;
9736 } else {
9737 var30 = " = class_names[";
9738 var31 = 15;
9739 var32 = string__NativeString__to_s_with_length(var30, var31);
9740 var29 = var32;
9741 varonce28 = var29;
9742 }
9743 if (varonce33) {
9744 var34 = varonce33;
9745 } else {
9746 var35 = "->classid];";
9747 var36 = 11;
9748 var37 = string__NativeString__to_s_with_length(var35, var36);
9749 var34 = var37;
9750 varonce33 = var34;
9751 }
9752 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
9753 { /* var38 = array_instance Array[Object] */
9754 var39 = 4;
9755 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
9756 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var_res;
9757 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var29;
9758 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var_value;
9759 ((struct instance_array__NativeArray*)var40)->values[3] = (val*) var34;
9760 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
9761 CHECK_NEW_array__Array(var38);
9762 }
9763 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
9764 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var41) /* add on <self:GlobalCompilerVisitor>*/;
9765 } else {
9766 if (varonce42) {
9767 var43 = varonce42;
9768 } else {
9769 var44 = " = class_names[";
9770 var45 = 15;
9771 var46 = string__NativeString__to_s_with_length(var44, var45);
9772 var43 = var46;
9773 varonce42 = var43;
9774 }
9775 var47 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:GlobalCompilerVisitor>*/;
9776 var48 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
9777 /* <var48:MType> isa MClassType */
9778 cltype = type_model__MClassType.color;
9779 idtype = type_model__MClassType.id;
9780 if(cltype >= var48->type->table_size) {
9781 var49 = 0;
9782 } else {
9783 var49 = var48->type->type_table[cltype] == idtype;
9784 }
9785 if (!var49) {
9786 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/global_compiler.nit", 788);
9787 exit(1);
9788 }
9789 var50 = ((val* (*)(val*, val*))(var47->class->vft[COLOR_global_compiler__GlobalCompiler__classid]))(var47, var48) /* classid on <var47:AbstractCompiler(GlobalCompiler)>*/;
9790 if (varonce51) {
9791 var52 = varonce51;
9792 } else {
9793 var53 = "];";
9794 var54 = 2;
9795 var55 = string__NativeString__to_s_with_length(var53, var54);
9796 var52 = var55;
9797 varonce51 = var52;
9798 }
9799 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
9800 { /* var56 = array_instance Array[Object] */
9801 var57 = 4;
9802 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
9803 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var_res;
9804 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var43;
9805 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var50;
9806 ((struct instance_array__NativeArray*)var58)->values[3] = (val*) var52;
9807 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
9808 CHECK_NEW_array__Array(var56);
9809 }
9810 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
9811 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var59) /* add on <self:GlobalCompilerVisitor>*/;
9812 }
9813 var = var_res;
9814 goto RET_LABEL;
9815 RET_LABEL:;
9816 return var;
9817 }
9818 /* method global_compiler#GlobalCompilerVisitor#class_name_string for (self: Object, RuntimeVariable): String */
9819 val* VIRTUAL_global_compiler__GlobalCompilerVisitor__class_name_string(val* self, val* p0) {
9820 val* var /* : String */;
9821 val* var1 /* : String */;
9822 var1 = global_compiler__GlobalCompilerVisitor__class_name_string(self, p0);
9823 var = var1;
9824 RET_LABEL:;
9825 return var;
9826 }