dbc7f7b55595b9670521e9a1e276b4ba2bbd2709
[nit.git] / c_src / modelbuilder.sep.1.c
1 #include "modelbuilder.sep.0.h"
2 /* method modelbuilder#ToolContext#opt_path for (self: ToolContext): OptionArray */
3 val* modelbuilder__ToolContext__opt_path(val* self) {
4 val* var /* : OptionArray */;
5 val* var1 /* : OptionArray */;
6 var1 = self->attrs[COLOR_modelbuilder__ToolContext___64dopt_path].val; /* @opt_path on <self:ToolContext> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @opt_path", "src/modelbuilder.nit", 37);
9 exit(1);
10 }
11 var = var1;
12 RET_LABEL:;
13 return var;
14 }
15 /* method modelbuilder#ToolContext#opt_path for (self: Object): OptionArray */
16 val* VIRTUAL_modelbuilder__ToolContext__opt_path(val* self) {
17 val* var /* : OptionArray */;
18 val* var1 /* : OptionArray */;
19 var1 = modelbuilder__ToolContext__opt_path(self);
20 var = var1;
21 RET_LABEL:;
22 return var;
23 }
24 /* method modelbuilder#ToolContext#opt_path= for (self: ToolContext, OptionArray) */
25 void modelbuilder__ToolContext__opt_path_61d(val* self, val* p0) {
26 self->attrs[COLOR_modelbuilder__ToolContext___64dopt_path].val = p0; /* @opt_path on <self:ToolContext> */
27 RET_LABEL:;
28 }
29 /* method modelbuilder#ToolContext#opt_path= for (self: Object, OptionArray) */
30 void VIRTUAL_modelbuilder__ToolContext__opt_path_61d(val* self, val* p0) {
31 modelbuilder__ToolContext__opt_path_61d(self, p0);
32 RET_LABEL:;
33 }
34 /* method modelbuilder#ToolContext#opt_only_metamodel for (self: ToolContext): OptionBool */
35 val* modelbuilder__ToolContext__opt_only_metamodel(val* self) {
36 val* var /* : OptionBool */;
37 val* var1 /* : OptionBool */;
38 var1 = self->attrs[COLOR_modelbuilder__ToolContext___64dopt_only_metamodel].val; /* @opt_only_metamodel on <self:ToolContext> */
39 if (var1 == NULL) {
40 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @opt_only_metamodel", "src/modelbuilder.nit", 40);
41 exit(1);
42 }
43 var = var1;
44 RET_LABEL:;
45 return var;
46 }
47 /* method modelbuilder#ToolContext#opt_only_metamodel for (self: Object): OptionBool */
48 val* VIRTUAL_modelbuilder__ToolContext__opt_only_metamodel(val* self) {
49 val* var /* : OptionBool */;
50 val* var1 /* : OptionBool */;
51 var1 = modelbuilder__ToolContext__opt_only_metamodel(self);
52 var = var1;
53 RET_LABEL:;
54 return var;
55 }
56 /* method modelbuilder#ToolContext#opt_only_metamodel= for (self: ToolContext, OptionBool) */
57 void modelbuilder__ToolContext__opt_only_metamodel_61d(val* self, val* p0) {
58 self->attrs[COLOR_modelbuilder__ToolContext___64dopt_only_metamodel].val = p0; /* @opt_only_metamodel on <self:ToolContext> */
59 RET_LABEL:;
60 }
61 /* method modelbuilder#ToolContext#opt_only_metamodel= for (self: Object, OptionBool) */
62 void VIRTUAL_modelbuilder__ToolContext__opt_only_metamodel_61d(val* self, val* p0) {
63 modelbuilder__ToolContext__opt_only_metamodel_61d(self, p0);
64 RET_LABEL:;
65 }
66 /* method modelbuilder#ToolContext#opt_only_parse for (self: ToolContext): OptionBool */
67 val* modelbuilder__ToolContext__opt_only_parse(val* self) {
68 val* var /* : OptionBool */;
69 val* var1 /* : OptionBool */;
70 var1 = self->attrs[COLOR_modelbuilder__ToolContext___64dopt_only_parse].val; /* @opt_only_parse on <self:ToolContext> */
71 if (var1 == NULL) {
72 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @opt_only_parse", "src/modelbuilder.nit", 43);
73 exit(1);
74 }
75 var = var1;
76 RET_LABEL:;
77 return var;
78 }
79 /* method modelbuilder#ToolContext#opt_only_parse for (self: Object): OptionBool */
80 val* VIRTUAL_modelbuilder__ToolContext__opt_only_parse(val* self) {
81 val* var /* : OptionBool */;
82 val* var1 /* : OptionBool */;
83 var1 = modelbuilder__ToolContext__opt_only_parse(self);
84 var = var1;
85 RET_LABEL:;
86 return var;
87 }
88 /* method modelbuilder#ToolContext#opt_only_parse= for (self: ToolContext, OptionBool) */
89 void modelbuilder__ToolContext__opt_only_parse_61d(val* self, val* p0) {
90 self->attrs[COLOR_modelbuilder__ToolContext___64dopt_only_parse].val = p0; /* @opt_only_parse on <self:ToolContext> */
91 RET_LABEL:;
92 }
93 /* method modelbuilder#ToolContext#opt_only_parse= for (self: Object, OptionBool) */
94 void VIRTUAL_modelbuilder__ToolContext__opt_only_parse_61d(val* self, val* p0) {
95 modelbuilder__ToolContext__opt_only_parse_61d(self, p0);
96 RET_LABEL:;
97 }
98 /* method modelbuilder#ToolContext#init for (self: ToolContext) */
99 void modelbuilder__ToolContext__init(val* self) {
100 val* var /* : OptionContext */;
101 val* var1 /* : OptionArray */;
102 val* var2 /* : OptionBool */;
103 val* var3 /* : OptionBool */;
104 val* var4 /* : Array[Option] */;
105 long var5 /* : Int */;
106 val* var6 /* : NativeArray[Option] */;
107 ((void (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__init]))(self) /* init on <self:ToolContext>*/;
108 var = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
109 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__opt_path]))(self) /* opt_path on <self:ToolContext>*/;
110 var2 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__opt_only_parse]))(self) /* opt_only_parse on <self:ToolContext>*/;
111 var3 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__opt_only_metamodel]))(self) /* opt_only_metamodel on <self:ToolContext>*/;
112 var4 = NEW_array__Array(&type_array__Arrayopts__Option);
113 { /* var4 = array_instance Array[Option] */
114 var5 = 3;
115 var6 = NEW_array__NativeArray(var5, &type_array__NativeArrayopts__Option);
116 ((struct instance_array__NativeArray*)var6)->values[0] = (val*) var1;
117 ((struct instance_array__NativeArray*)var6)->values[1] = (val*) var2;
118 ((struct instance_array__NativeArray*)var6)->values[2] = (val*) var3;
119 ((void (*)(val*, val*, long))(var4->class->vft[COLOR_array__Array__with_native]))(var4, var6, var5) /* with_native on <var4:Array[Option]>*/;
120 CHECK_NEW_array__Array(var4);
121 }
122 ((void (*)(val*, val*))(var->class->vft[COLOR_opts__OptionContext__add_option]))(var, var4) /* add_option on <var:OptionContext>*/;
123 RET_LABEL:;
124 }
125 /* method modelbuilder#ToolContext#init for (self: Object) */
126 void VIRTUAL_modelbuilder__ToolContext__init(val* self) {
127 modelbuilder__ToolContext__init(self);
128 RET_LABEL:;
129 }
130 /* method modelbuilder#ToolContext#modelbuilder for (self: ToolContext): ModelBuilder */
131 val* modelbuilder__ToolContext__modelbuilder(val* self) {
132 val* var /* : ModelBuilder */;
133 val* var1 /* : nullable ModelBuilder */;
134 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__modelbuilder_real]))(self) /* modelbuilder_real on <self:ToolContext>*/;
135 if (var1 == NULL) {
136 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/modelbuilder.nit", 52);
137 exit(1);
138 }
139 var = var1;
140 goto RET_LABEL;
141 RET_LABEL:;
142 return var;
143 }
144 /* method modelbuilder#ToolContext#modelbuilder for (self: Object): ModelBuilder */
145 val* VIRTUAL_modelbuilder__ToolContext__modelbuilder(val* self) {
146 val* var /* : ModelBuilder */;
147 val* var1 /* : ModelBuilder */;
148 var1 = modelbuilder__ToolContext__modelbuilder(self);
149 var = var1;
150 RET_LABEL:;
151 return var;
152 }
153 /* method modelbuilder#ToolContext#modelbuilder_real for (self: ToolContext): nullable ModelBuilder */
154 val* modelbuilder__ToolContext__modelbuilder_real(val* self) {
155 val* var /* : nullable ModelBuilder */;
156 val* var1 /* : nullable ModelBuilder */;
157 var1 = self->attrs[COLOR_modelbuilder__ToolContext___64dmodelbuilder_real].val; /* @modelbuilder_real on <self:ToolContext> */
158 var = var1;
159 RET_LABEL:;
160 return var;
161 }
162 /* method modelbuilder#ToolContext#modelbuilder_real for (self: Object): nullable ModelBuilder */
163 val* VIRTUAL_modelbuilder__ToolContext__modelbuilder_real(val* self) {
164 val* var /* : nullable ModelBuilder */;
165 val* var1 /* : nullable ModelBuilder */;
166 var1 = modelbuilder__ToolContext__modelbuilder_real(self);
167 var = var1;
168 RET_LABEL:;
169 return var;
170 }
171 /* method modelbuilder#ToolContext#modelbuilder_real= for (self: ToolContext, nullable ModelBuilder) */
172 void modelbuilder__ToolContext__modelbuilder_real_61d(val* self, val* p0) {
173 self->attrs[COLOR_modelbuilder__ToolContext___64dmodelbuilder_real].val = p0; /* @modelbuilder_real on <self:ToolContext> */
174 RET_LABEL:;
175 }
176 /* method modelbuilder#ToolContext#modelbuilder_real= for (self: Object, nullable ModelBuilder) */
177 void VIRTUAL_modelbuilder__ToolContext__modelbuilder_real_61d(val* self, val* p0) {
178 modelbuilder__ToolContext__modelbuilder_real_61d(self, p0);
179 RET_LABEL:;
180 }
181 /* method modelbuilder#ModelBuilder#model for (self: ModelBuilder): Model */
182 val* modelbuilder__ModelBuilder__model(val* self) {
183 val* var /* : Model */;
184 val* var1 /* : Model */;
185 var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dmodel].val; /* @model on <self:ModelBuilder> */
186 if (var1 == NULL) {
187 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @model", "src/modelbuilder.nit", 59);
188 exit(1);
189 }
190 var = var1;
191 RET_LABEL:;
192 return var;
193 }
194 /* method modelbuilder#ModelBuilder#model for (self: Object): Model */
195 val* VIRTUAL_modelbuilder__ModelBuilder__model(val* self) {
196 val* var /* : Model */;
197 val* var1 /* : Model */;
198 var1 = modelbuilder__ModelBuilder__model(self);
199 var = var1;
200 RET_LABEL:;
201 return var;
202 }
203 /* method modelbuilder#ModelBuilder#model= for (self: ModelBuilder, Model) */
204 void modelbuilder__ModelBuilder__model_61d(val* self, val* p0) {
205 self->attrs[COLOR_modelbuilder__ModelBuilder___64dmodel].val = p0; /* @model on <self:ModelBuilder> */
206 RET_LABEL:;
207 }
208 /* method modelbuilder#ModelBuilder#model= for (self: Object, Model) */
209 void VIRTUAL_modelbuilder__ModelBuilder__model_61d(val* self, val* p0) {
210 modelbuilder__ModelBuilder__model_61d(self, p0);
211 RET_LABEL:;
212 }
213 /* method modelbuilder#ModelBuilder#toolcontext for (self: ModelBuilder): ToolContext */
214 val* modelbuilder__ModelBuilder__toolcontext(val* self) {
215 val* var /* : ToolContext */;
216 val* var1 /* : ToolContext */;
217 var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dtoolcontext].val; /* @toolcontext on <self:ModelBuilder> */
218 if (var1 == NULL) {
219 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @toolcontext", "src/modelbuilder.nit", 62);
220 exit(1);
221 }
222 var = var1;
223 RET_LABEL:;
224 return var;
225 }
226 /* method modelbuilder#ModelBuilder#toolcontext for (self: Object): ToolContext */
227 val* VIRTUAL_modelbuilder__ModelBuilder__toolcontext(val* self) {
228 val* var /* : ToolContext */;
229 val* var1 /* : ToolContext */;
230 var1 = modelbuilder__ModelBuilder__toolcontext(self);
231 var = var1;
232 RET_LABEL:;
233 return var;
234 }
235 /* method modelbuilder#ModelBuilder#toolcontext= for (self: ModelBuilder, ToolContext) */
236 void modelbuilder__ModelBuilder__toolcontext_61d(val* self, val* p0) {
237 self->attrs[COLOR_modelbuilder__ModelBuilder___64dtoolcontext].val = p0; /* @toolcontext on <self:ModelBuilder> */
238 RET_LABEL:;
239 }
240 /* method modelbuilder#ModelBuilder#toolcontext= for (self: Object, ToolContext) */
241 void VIRTUAL_modelbuilder__ModelBuilder__toolcontext_61d(val* self, val* p0) {
242 modelbuilder__ModelBuilder__toolcontext_61d(self, p0);
243 RET_LABEL:;
244 }
245 /* method modelbuilder#ModelBuilder#run_phases for (self: ModelBuilder) */
246 void modelbuilder__ModelBuilder__run_phases(val* self) {
247 val* var /* : Model */;
248 val* var1 /* : Array[MModule] */;
249 val* var2 /* : Array[nullable Object] */;
250 val* var_mmodules /* var mmodules: Array[MModule] */;
251 val* var3 /* : Model */;
252 val* var4 /* : POSet[MModule] */;
253 val* var5 /* : Array[AModule] */;
254 val* var_nmodules /* var nmodules: Array[AModule] */;
255 val* var6 /* : Iterator[nullable Object] */;
256 short int var7 /* : Bool */;
257 val* var8 /* : nullable Object */;
258 val* var_mm /* var mm: MModule */;
259 val* var9 /* : HashMap[MModule, AModule] */;
260 val* var10 /* : nullable Object */;
261 val* var11 /* : ToolContext */;
262 val* var12 /* : ToolContext */;
263 val* var13 /* : OptionBool */;
264 val* var14 /* : nullable Object */;
265 short int var15 /* : Bool */;
266 val* var16 /* : ToolContext */;
267 static val* varonce;
268 val* var17 /* : String */;
269 char* var18 /* : NativeString */;
270 long var19 /* : Int */;
271 val* var20 /* : String */;
272 long var21 /* : Int */;
273 long var22 /* : Int */;
274 var = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
275 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model_base__Model__mmodules]))(var) /* mmodules on <var:Model>*/;
276 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_array__Collection__to_a]))(var1) /* to_a on <var1:Array[MModule]>*/;
277 var_mmodules = var2;
278 var3 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
279 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model_base__Model__mmodule_importation_hierarchy]))(var3) /* mmodule_importation_hierarchy on <var3:Model>*/;
280 ((void (*)(val*, val*))(var4->class->vft[COLOR_sorter__AbstractSorter__sort]))(var4, var_mmodules) /* sort on <var4:POSet[MModule]>*/;
281 var5 = NEW_array__Array(&type_array__Arrayparser_nodes__AModule);
282 ((void (*)(val*))(var5->class->vft[COLOR_array__Array__init]))(var5) /* init on <var5:Array[AModule]>*/;
283 CHECK_NEW_array__Array(var5);
284 var_nmodules = var5;
285 var6 = ((val* (*)(val*))(var_mmodules->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mmodules) /* iterator on <var_mmodules:Array[MModule]>*/;
286 for(;;) {
287 var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[nullable Object]>*/;
288 if(!var7) break;
289 var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[nullable Object]>*/;
290 var_mm = var8;
291 var9 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(self) /* mmodule2nmodule on <self:ModelBuilder>*/;
292 var10 = ((val* (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var9, var_mm) /* [] on <var9:HashMap[MModule, AModule]>*/;
293 ((void (*)(val*, val*))(var_nmodules->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_nmodules, var10) /* add on <var_nmodules:Array[AModule]>*/;
294 CONTINUE_label: (void)0;
295 ((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
296 }
297 BREAK_label: (void)0;
298 var11 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
299 ((void (*)(val*, val*))(var11->class->vft[COLOR_phase__ToolContext__run_phases]))(var11, var_nmodules) /* run_phases on <var11:ToolContext>*/;
300 var12 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
301 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_modelbuilder__ToolContext__opt_only_metamodel]))(var12) /* opt_only_metamodel on <var12:ToolContext>*/;
302 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_opts__Option__value]))(var13) /* value on <var13:OptionBool>*/;
303 var15 = ((struct instance_kernel__Bool*)var14)->value; /* autounbox from nullable Object to Bool */;
304 if (var15){
305 var16 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
306 if (varonce) {
307 var17 = varonce;
308 } else {
309 var18 = "*** ONLY METAMODEL";
310 var19 = 18;
311 var20 = string__NativeString__to_s_with_length(var18, var19);
312 var17 = var20;
313 varonce = var17;
314 }
315 var21 = 1;
316 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_toolcontext__ToolContext__info]))(var16, var17, var21) /* info on <var16:ToolContext>*/;
317 var22 = 0;
318 ((void (*)(val*, long))(self->class->vft[COLOR_kernel__Object__exit]))(self, var22) /* exit on <self:ModelBuilder>*/;
319 } else {
320 }
321 RET_LABEL:;
322 }
323 /* method modelbuilder#ModelBuilder#run_phases for (self: Object) */
324 void VIRTUAL_modelbuilder__ModelBuilder__run_phases(val* self) {
325 modelbuilder__ModelBuilder__run_phases(self);
326 RET_LABEL:;
327 }
328 /* method modelbuilder#ModelBuilder#init for (self: ModelBuilder, Model, ToolContext) */
329 void modelbuilder__ModelBuilder__init(val* self, val* p0, val* p1) {
330 val* var_model /* var model: Model */;
331 val* var_toolcontext /* var toolcontext: ToolContext */;
332 val* var /* : nullable ModelBuilder */;
333 val* var1 /* : null */;
334 short int var2 /* : Bool */;
335 val* var3 /* : Array[String] */;
336 val* var4 /* : OptionArray */;
337 val* var5 /* : nullable Object */;
338 static val* varonce;
339 val* var6 /* : String */;
340 char* var7 /* : NativeString */;
341 long var8 /* : Int */;
342 val* var9 /* : String */;
343 val* var10 /* : String */;
344 val* var_path_env /* var path_env: String */;
345 short int var11 /* : Bool */;
346 short int var12 /* : Bool */;
347 val* var13 /* : Array[String] */;
348 char var14 /* : Char */;
349 val* var15 /* : Array[String] */;
350 val* var16 /* : Pattern */;
351 static val* varonce17;
352 val* var18 /* : String */;
353 char* var19 /* : NativeString */;
354 long var20 /* : Int */;
355 val* var21 /* : String */;
356 val* var22 /* : String */;
357 short int var23 /* : Bool */;
358 short int var24 /* : Bool */;
359 val* var25 /* : Array[Object] */;
360 long var26 /* : Int */;
361 val* var_ /* var : Array[Object] */;
362 static val* varonce27;
363 val* var28 /* : String */;
364 char* var29 /* : NativeString */;
365 long var30 /* : Int */;
366 val* var31 /* : String */;
367 static val* varonce32;
368 val* var33 /* : String */;
369 char* var34 /* : NativeString */;
370 long var35 /* : Int */;
371 val* var36 /* : String */;
372 val* var37 /* : String */;
373 val* var_libname /* var libname: String */;
374 short int var38 /* : Bool */;
375 val* var39 /* : Array[String] */;
376 val* var40 /* : Array[Object] */;
377 long var41 /* : Int */;
378 val* var_42 /* var : Array[Object] */;
379 static val* varonce43;
380 val* var44 /* : String */;
381 char* var45 /* : NativeString */;
382 long var46 /* : Int */;
383 val* var47 /* : String */;
384 val* var48 /* : Sys */;
385 val* var49 /* : String */;
386 val* var50 /* : String */;
387 static val* varonce51;
388 val* var52 /* : String */;
389 char* var53 /* : NativeString */;
390 long var54 /* : Int */;
391 val* var55 /* : String */;
392 val* var56 /* : String */;
393 val* var_libname57 /* var libname: String */;
394 short int var58 /* : Bool */;
395 val* var59 /* : Array[String] */;
396 val* var60 /* : String */;
397 var_model = p0;
398 var_toolcontext = p1;
399 ((void (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model_61d]))(self, var_model) /* model= on <self:ModelBuilder>*/;
400 ((void (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext_61d]))(self, var_toolcontext) /* toolcontext= on <self:ModelBuilder>*/;
401 var = ((val* (*)(val*))(var_toolcontext->class->vft[COLOR_modelbuilder__ToolContext__modelbuilder_real]))(var_toolcontext) /* modelbuilder_real on <var_toolcontext:ToolContext>*/;
402 var1 = NULL;
403 if (var == NULL) {
404 var2 = 1; /* is null */
405 } else {
406 var2 = 0; /* arg is null but recv is not */
407 }
408 if (!var2) {
409 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/modelbuilder.nit", 88);
410 exit(1);
411 }
412 ((void (*)(val*, val*))(var_toolcontext->class->vft[COLOR_modelbuilder__ToolContext__modelbuilder_real_61d]))(var_toolcontext, self) /* modelbuilder_real= on <var_toolcontext:ToolContext>*/;
413 var3 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
414 var4 = ((val* (*)(val*))(var_toolcontext->class->vft[COLOR_modelbuilder__ToolContext__opt_path]))(var_toolcontext) /* opt_path on <var_toolcontext:ToolContext>*/;
415 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_opts__Option__value]))(var4) /* value on <var4:OptionArray>*/;
416 ((void (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Sequence__append]))(var3, var5) /* append on <var3:Array[String]>*/;
417 if (varonce) {
418 var6 = varonce;
419 } else {
420 var7 = "NIT_PATH";
421 var8 = 8;
422 var9 = string__NativeString__to_s_with_length(var7, var8);
423 var6 = var9;
424 varonce = var6;
425 }
426 var10 = ((val* (*)(val*))(var6->class->vft[COLOR_environ__String__environ]))(var6) /* environ on <var6:String>*/;
427 var_path_env = var10;
428 var11 = ((short int (*)(val*))(var_path_env->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_path_env) /* is_empty on <var_path_env:String>*/;
429 var12 = !var11;
430 if (var12){
431 var13 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
432 var14 = ':';
433 var16 = BOX_kernel__Char(var14); /* autobox from Char to Pattern */
434 var15 = ((val* (*)(val*, val*))(var_path_env->class->vft[COLOR_string_search__String__split_with]))(var_path_env, var16) /* split_with on <var_path_env:String>*/;
435 ((void (*)(val*, val*))(var13->class->vft[COLOR_abstract_collection__Sequence__append]))(var13, var15) /* append on <var13:Array[String]>*/;
436 } else {
437 }
438 if (varonce17) {
439 var18 = varonce17;
440 } else {
441 var19 = "NIT_DIR";
442 var20 = 7;
443 var21 = string__NativeString__to_s_with_length(var19, var20);
444 var18 = var21;
445 varonce17 = var18;
446 }
447 var22 = ((val* (*)(val*))(var18->class->vft[COLOR_environ__String__environ]))(var18) /* environ on <var18:String>*/;
448 var_path_env = var22;
449 var23 = ((short int (*)(val*))(var_path_env->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_path_env) /* is_empty on <var_path_env:String>*/;
450 var24 = !var23;
451 if (var24){
452 var25 = NEW_array__Array(&type_array__Arraykernel__Object);
453 var26 = 3;
454 ((void (*)(val*, long))(var25->class->vft[COLOR_array__Array__with_capacity]))(var25, var26) /* with_capacity on <var25:Array[Object]>*/;
455 CHECK_NEW_array__Array(var25);
456 var_ = var25;
457 if (varonce27) {
458 var28 = varonce27;
459 } else {
460 var29 = "";
461 var30 = 0;
462 var31 = string__NativeString__to_s_with_length(var29, var30);
463 var28 = var31;
464 varonce27 = var28;
465 }
466 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var28) /* add on <var_:Array[Object]>*/;
467 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var_path_env) /* add on <var_:Array[Object]>*/;
468 if (varonce32) {
469 var33 = varonce32;
470 } else {
471 var34 = "/lib";
472 var35 = 4;
473 var36 = string__NativeString__to_s_with_length(var34, var35);
474 var33 = var36;
475 varonce32 = var33;
476 }
477 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var33) /* add on <var_:Array[Object]>*/;
478 var37 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
479 var_libname = var37;
480 var38 = ((short int (*)(val*))(var_libname->class->vft[COLOR_file__String__file_exists]))(var_libname) /* file_exists on <var_libname:String>*/;
481 if (var38){
482 var39 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
483 ((void (*)(val*, val*))(var39->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var39, var_libname) /* add on <var39:Array[String]>*/;
484 } else {
485 }
486 } else {
487 }
488 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
489 var41 = 3;
490 ((void (*)(val*, long))(var40->class->vft[COLOR_array__Array__with_capacity]))(var40, var41) /* with_capacity on <var40:Array[Object]>*/;
491 CHECK_NEW_array__Array(var40);
492 var_42 = var40;
493 if (varonce43) {
494 var44 = varonce43;
495 } else {
496 var45 = "";
497 var46 = 0;
498 var47 = string__NativeString__to_s_with_length(var45, var46);
499 var44 = var47;
500 varonce43 = var44;
501 }
502 ((void (*)(val*, val*))(var_42->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_42, var44) /* add on <var_42:Array[Object]>*/;
503 var48 = ((val* (*)(val*))(self->class->vft[COLOR_kernel__Object__sys]))(self) /* sys on <self:ModelBuilder>*/;
504 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_string__Sys__program_name]))(var48) /* program_name on <var48:Sys>*/;
505 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_file__String__dirname]))(var49) /* dirname on <var49:String>*/;
506 ((void (*)(val*, val*))(var_42->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_42, var50) /* add on <var_42:Array[Object]>*/;
507 if (varonce51) {
508 var52 = varonce51;
509 } else {
510 var53 = "/../lib";
511 var54 = 7;
512 var55 = string__NativeString__to_s_with_length(var53, var54);
513 var52 = var55;
514 varonce51 = var52;
515 }
516 ((void (*)(val*, val*))(var_42->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_42, var52) /* add on <var_42:Array[Object]>*/;
517 var56 = ((val* (*)(val*))(var_42->class->vft[COLOR_string__Object__to_s]))(var_42) /* to_s on <var_42:Array[Object]>*/;
518 var_libname57 = var56;
519 var58 = ((short int (*)(val*))(var_libname57->class->vft[COLOR_file__String__file_exists]))(var_libname57) /* file_exists on <var_libname57:String>*/;
520 if (var58){
521 var59 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
522 var60 = ((val* (*)(val*))(var_libname57->class->vft[COLOR_file__String__simplify_path]))(var_libname57) /* simplify_path on <var_libname57:String>*/;
523 ((void (*)(val*, val*))(var59->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var59, var60) /* add on <var59:Array[String]>*/;
524 } else {
525 }
526 RET_LABEL:;
527 }
528 /* method modelbuilder#ModelBuilder#init for (self: Object, Model, ToolContext) */
529 void VIRTUAL_modelbuilder__ModelBuilder__init(val* self, val* p0, val* p1) {
530 modelbuilder__ModelBuilder__init(self, p0, p1);
531 RET_LABEL:;
532 }
533 /* method modelbuilder#ModelBuilder#parse for (self: ModelBuilder, Sequence[String]): Array[MModule] */
534 val* modelbuilder__ModelBuilder__parse(val* self, val* p0) {
535 val* var /* : Array[MModule] */;
536 val* var_modules /* var modules: Sequence[String] */;
537 long var1 /* : Int */;
538 long var_time0 /* var time0: Int */;
539 val* var2 /* : ToolContext */;
540 static val* varonce;
541 val* var3 /* : String */;
542 char* var4 /* : NativeString */;
543 long var5 /* : Int */;
544 val* var6 /* : String */;
545 long var7 /* : Int */;
546 val* var8 /* : Array[MModule] */;
547 val* var_mmodules /* var mmodules: Array[MModule] */;
548 val* var9 /* : Iterator[nullable Object] */;
549 short int var10 /* : Bool */;
550 val* var11 /* : nullable Object */;
551 val* var_a /* var a: String */;
552 val* var12 /* : null */;
553 val* var13 /* : nullable AModule */;
554 val* var_nmodule /* var nmodule: nullable AModule */;
555 val* var14 /* : null */;
556 short int var15 /* : Bool */;
557 val* var16 /* : nullable MModule */;
558 long var17 /* : Int */;
559 long var_time1 /* var time1: Int */;
560 val* var18 /* : ToolContext */;
561 static val* varonce19;
562 val* var20 /* : String */;
563 char* var21 /* : NativeString */;
564 long var22 /* : Int */;
565 val* var23 /* : String */;
566 long var24 /* : Int */;
567 long var26 /* : Int */;
568 static val* varonce27;
569 val* var28 /* : String */;
570 char* var29 /* : NativeString */;
571 long var30 /* : Int */;
572 val* var31 /* : String */;
573 val* var32 /* : Array[Object] */;
574 long var33 /* : Int */;
575 val* var34 /* : NativeArray[Object] */;
576 val* var35 /* : Object */;
577 val* var36 /* : String */;
578 long var37 /* : Int */;
579 val* var38 /* : ToolContext */;
580 val* var39 /* : ToolContext */;
581 val* var40 /* : OptionBool */;
582 val* var41 /* : nullable Object */;
583 short int var42 /* : Bool */;
584 val* var43 /* : ToolContext */;
585 static val* varonce44;
586 val* var45 /* : String */;
587 char* var46 /* : NativeString */;
588 long var47 /* : Int */;
589 val* var48 /* : String */;
590 long var49 /* : Int */;
591 long var50 /* : Int */;
592 var_modules = p0;
593 var1 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
594 var_time0 = var1;
595 var2 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
596 if (varonce) {
597 var3 = varonce;
598 } else {
599 var4 = "*** PARSE ***";
600 var5 = 13;
601 var6 = string__NativeString__to_s_with_length(var4, var5);
602 var3 = var6;
603 varonce = var3;
604 }
605 var7 = 1;
606 ((void (*)(val*, val*, long))(var2->class->vft[COLOR_toolcontext__ToolContext__info]))(var2, var3, var7) /* info on <var2:ToolContext>*/;
607 var8 = NEW_array__Array(&type_array__Arraymodel_base__MModule);
608 ((void (*)(val*))(var8->class->vft[COLOR_array__Array__init]))(var8) /* init on <var8:Array[MModule]>*/;
609 CHECK_NEW_array__Array(var8);
610 var_mmodules = var8;
611 var9 = ((val* (*)(val*))(var_modules->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_modules) /* iterator on <var_modules:Sequence[String]>*/;
612 for(;;) {
613 var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
614 if(!var10) break;
615 var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
616 var_a = var11;
617 var12 = NULL;
618 var13 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__load_module]))(self, var12, var_a) /* load_module on <self:ModelBuilder>*/;
619 var_nmodule = var13;
620 var14 = NULL;
621 if (var_nmodule == NULL) {
622 var15 = 1; /* is null */
623 } else {
624 var15 = 0; /* arg is null but recv is not */
625 }
626 if (var15){
627 goto CONTINUE_label;
628 } else {
629 }
630 var16 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_nmodule) /* mmodule on <var_nmodule:nullable AModule(AModule)>*/;
631 if (var16 == NULL) {
632 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/modelbuilder.nit", 125);
633 exit(1);
634 }
635 ((void (*)(val*, val*))(var_mmodules->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_mmodules, var16) /* add on <var_mmodules:Array[MModule]>*/;
636 CONTINUE_label: (void)0;
637 ((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
638 }
639 BREAK_label: (void)0;
640 var17 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
641 var_time1 = var17;
642 var18 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
643 if (varonce19) {
644 var20 = varonce19;
645 } else {
646 var21 = "*** END PARSE: ";
647 var22 = 15;
648 var23 = string__NativeString__to_s_with_length(var21, var22);
649 var20 = var23;
650 varonce19 = var20;
651 }
652 { /* Inline kernel#Int#- (var_time1,var_time0) */
653 var26 = var_time1 - var_time0;
654 var24 = var26;
655 goto RET_LABEL25;
656 RET_LABEL25:(void)0;
657 }
658 if (varonce27) {
659 var28 = varonce27;
660 } else {
661 var29 = " ***";
662 var30 = 4;
663 var31 = string__NativeString__to_s_with_length(var29, var30);
664 var28 = var31;
665 varonce27 = var28;
666 }
667 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
668 { /* var32 = array_instance Array[Object] */
669 var33 = 3;
670 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
671 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var20;
672 var35 = BOX_kernel__Int(var24); /* autobox from Int to Object */
673 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var35;
674 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var28;
675 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
676 CHECK_NEW_array__Array(var32);
677 }
678 var36 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
679 var37 = 2;
680 ((void (*)(val*, val*, long))(var18->class->vft[COLOR_toolcontext__ToolContext__info]))(var18, var36, var37) /* info on <var18:ToolContext>*/;
681 var38 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
682 ((void (*)(val*))(var38->class->vft[COLOR_toolcontext__ToolContext__check_errors]))(var38) /* check_errors on <var38:ToolContext>*/;
683 var39 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
684 var40 = ((val* (*)(val*))(var39->class->vft[COLOR_modelbuilder__ToolContext__opt_only_parse]))(var39) /* opt_only_parse on <var39:ToolContext>*/;
685 var41 = ((val* (*)(val*))(var40->class->vft[COLOR_opts__Option__value]))(var40) /* value on <var40:OptionBool>*/;
686 var42 = ((struct instance_kernel__Bool*)var41)->value; /* autounbox from nullable Object to Bool */;
687 if (var42){
688 var43 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
689 if (varonce44) {
690 var45 = varonce44;
691 } else {
692 var46 = "*** ONLY PARSE...";
693 var47 = 17;
694 var48 = string__NativeString__to_s_with_length(var46, var47);
695 var45 = var48;
696 varonce44 = var45;
697 }
698 var49 = 1;
699 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_toolcontext__ToolContext__info]))(var43, var45, var49) /* info on <var43:ToolContext>*/;
700 var50 = 0;
701 ((void (*)(val*, long))(self->class->vft[COLOR_kernel__Object__exit]))(self, var50) /* exit on <self:ModelBuilder>*/;
702 } else {
703 }
704 var = var_mmodules;
705 goto RET_LABEL;
706 RET_LABEL:;
707 return var;
708 }
709 /* method modelbuilder#ModelBuilder#parse for (self: Object, Sequence[String]): Array[MModule] */
710 val* VIRTUAL_modelbuilder__ModelBuilder__parse(val* self, val* p0) {
711 val* var /* : Array[MModule] */;
712 val* var1 /* : Array[MModule] */;
713 var1 = modelbuilder__ModelBuilder__parse(self, p0);
714 var = var1;
715 RET_LABEL:;
716 return var;
717 }
718 /* method modelbuilder#ModelBuilder#try_get_mclass_by_name for (self: ModelBuilder, ANode, MModule, String): nullable MClass */
719 val* modelbuilder__ModelBuilder__try_get_mclass_by_name(val* self, val* p0, val* p1, val* p2) {
720 val* var /* : nullable MClass */;
721 val* var_anode /* var anode: ANode */;
722 val* var_mmodule /* var mmodule: MModule */;
723 val* var_name /* var name: String */;
724 val* var1 /* : Model */;
725 val* var2 /* : nullable Array[MClass] */;
726 val* var_classes /* var classes: nullable Array[MClass] */;
727 val* var3 /* : null */;
728 short int var4 /* : Bool */;
729 val* var5 /* : null */;
730 val* var6 /* : null */;
731 val* var_res /* var res: nullable MClass */;
732 val* var7 /* : Iterator[nullable Object] */;
733 short int var8 /* : Bool */;
734 val* var9 /* : nullable Object */;
735 val* var_mclass /* var mclass: MClass */;
736 val* var10 /* : POSetElement[MModule] */;
737 val* var11 /* : MModule */;
738 short int var12 /* : Bool */;
739 short int var13 /* : Bool */;
740 val* var14 /* : MModule */;
741 val* var15 /* : MVisibility */;
742 short int var16 /* : Bool */;
743 short int var17 /* : Bool */;
744 val* var18 /* : null */;
745 short int var19 /* : Bool */;
746 static val* varonce;
747 val* var20 /* : String */;
748 char* var21 /* : NativeString */;
749 long var22 /* : Int */;
750 val* var23 /* : String */;
751 static val* varonce24;
752 val* var25 /* : String */;
753 char* var26 /* : NativeString */;
754 long var27 /* : Int */;
755 val* var28 /* : String */;
756 val* var29 /* : String */;
757 static val* varonce30;
758 val* var31 /* : String */;
759 char* var32 /* : NativeString */;
760 long var33 /* : Int */;
761 val* var34 /* : String */;
762 val* var35 /* : String */;
763 val* var36 /* : Array[Object] */;
764 long var37 /* : Int */;
765 val* var38 /* : NativeArray[Object] */;
766 val* var39 /* : String */;
767 val* var40 /* : null */;
768 var_anode = p0;
769 var_mmodule = p1;
770 var_name = p2;
771 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
772 var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_model__Model__get_mclasses_by_name]))(var1, var_name) /* get_mclasses_by_name on <var1:Model>*/;
773 var_classes = var2;
774 var3 = NULL;
775 if (var_classes == NULL) {
776 var4 = 1; /* is null */
777 } else {
778 var4 = 0; /* arg is null but recv is not */
779 }
780 if (var4){
781 var5 = NULL;
782 var = var5;
783 goto RET_LABEL;
784 } else {
785 }
786 var6 = NULL;
787 var_res = var6;
788 var7 = ((val* (*)(val*))(var_classes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_classes) /* iterator on <var_classes:nullable Array[MClass](Array[MClass])>*/;
789 for(;;) {
790 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
791 if(!var8) break;
792 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
793 var_mclass = var9;
794 var10 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_model_base__MModule__in_importation]))(var_mmodule) /* in_importation on <var_mmodule:MModule>*/;
795 var11 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
796 var12 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_poset__POSetElement___60d_61d]))(var10, var11) /* <= on <var10:POSetElement[MModule]>*/;
797 var13 = !var12;
798 if (var13){
799 goto CONTINUE_label;
800 } else {
801 }
802 var14 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
803 var15 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__visibility]))(var_mclass) /* visibility on <var_mclass:MClass>*/;
804 var16 = ((short int (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_model_base__MModule__is_visible]))(var_mmodule, var14, var15) /* is_visible on <var_mmodule:MModule>*/;
805 var17 = !var16;
806 if (var17){
807 goto CONTINUE_label;
808 } else {
809 }
810 var18 = NULL;
811 if (var_res == NULL) {
812 var19 = 1; /* is null */
813 } else {
814 var19 = 0; /* arg is null but recv is not */
815 }
816 if (var19){
817 var_res = var_mclass;
818 } else {
819 if (varonce) {
820 var20 = varonce;
821 } else {
822 var21 = "Ambigous class name \'";
823 var22 = 21;
824 var23 = string__NativeString__to_s_with_length(var21, var22);
825 var20 = var23;
826 varonce = var20;
827 }
828 if (varonce24) {
829 var25 = varonce24;
830 } else {
831 var26 = "\'; conflict between ";
832 var27 = 20;
833 var28 = string__NativeString__to_s_with_length(var26, var27);
834 var25 = var28;
835 varonce24 = var25;
836 }
837 var29 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__full_name]))(var_mclass) /* full_name on <var_mclass:MClass>*/;
838 if (varonce30) {
839 var31 = varonce30;
840 } else {
841 var32 = " and ";
842 var33 = 5;
843 var34 = string__NativeString__to_s_with_length(var32, var33);
844 var31 = var34;
845 varonce30 = var31;
846 }
847 var35 = ((val* (*)(val*))(var_res->class->vft[COLOR_model__MClass__full_name]))(var_res) /* full_name on <var_res:nullable MClass(MClass)>*/;
848 var36 = NEW_array__Array(&type_array__Arraykernel__Object);
849 { /* var36 = array_instance Array[Object] */
850 var37 = 6;
851 var38 = NEW_array__NativeArray(var37, &type_array__NativeArraykernel__Object);
852 ((struct instance_array__NativeArray*)var38)->values[0] = (val*) var20;
853 ((struct instance_array__NativeArray*)var38)->values[1] = (val*) var_name;
854 ((struct instance_array__NativeArray*)var38)->values[2] = (val*) var25;
855 ((struct instance_array__NativeArray*)var38)->values[3] = (val*) var29;
856 ((struct instance_array__NativeArray*)var38)->values[4] = (val*) var31;
857 ((struct instance_array__NativeArray*)var38)->values[5] = (val*) var35;
858 ((void (*)(val*, val*, long))(var36->class->vft[COLOR_array__Array__with_native]))(var36, var38, var37) /* with_native on <var36:Array[Object]>*/;
859 CHECK_NEW_array__Array(var36);
860 }
861 var39 = ((val* (*)(val*))(var36->class->vft[COLOR_string__Object__to_s]))(var36) /* to_s on <var36:Array[Object]>*/;
862 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var39) /* error on <self:ModelBuilder>*/;
863 var40 = NULL;
864 var = var40;
865 goto RET_LABEL;
866 }
867 CONTINUE_label: (void)0;
868 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
869 }
870 BREAK_label: (void)0;
871 var = var_res;
872 goto RET_LABEL;
873 RET_LABEL:;
874 return var;
875 }
876 /* method modelbuilder#ModelBuilder#try_get_mclass_by_name for (self: Object, ANode, MModule, String): nullable MClass */
877 val* VIRTUAL_modelbuilder__ModelBuilder__try_get_mclass_by_name(val* self, val* p0, val* p1, val* p2) {
878 val* var /* : nullable MClass */;
879 val* var1 /* : nullable MClass */;
880 var1 = modelbuilder__ModelBuilder__try_get_mclass_by_name(self, p0, p1, p2);
881 var = var1;
882 RET_LABEL:;
883 return var;
884 }
885 /* method modelbuilder#ModelBuilder#try_get_mproperty_by_name2 for (self: ModelBuilder, ANode, MModule, MType, String): nullable MProperty */
886 val* modelbuilder__ModelBuilder__try_get_mproperty_by_name2(val* self, val* p0, val* p1, val* p2, val* p3) {
887 val* var /* : nullable MProperty */;
888 val* var_anode /* var anode: ANode */;
889 val* var_mmodule /* var mmodule: MModule */;
890 val* var_mtype /* var mtype: MType */;
891 val* var_name /* var name: String */;
892 val* var1 /* : Model */;
893 val* var2 /* : nullable Array[MProperty] */;
894 val* var_props /* var props: nullable Array[MProperty] */;
895 val* var3 /* : null */;
896 short int var4 /* : Bool */;
897 val* var5 /* : null */;
898 val* var6 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
899 val* var7 /* : nullable Object */;
900 val* var_cache /* var cache: nullable MProperty */;
901 val* var8 /* : null */;
902 short int var9 /* : Bool */;
903 val* var10 /* : null */;
904 val* var_res /* var res: nullable MProperty */;
905 val* var11 /* : null */;
906 val* var_ress /* var ress: nullable Array[MProperty] */;
907 val* var12 /* : Iterator[nullable Object] */;
908 short int var13 /* : Bool */;
909 val* var14 /* : nullable Object */;
910 val* var_mprop /* var mprop: MProperty */;
911 short int var15 /* : Bool */;
912 short int var16 /* : Bool */;
913 val* var17 /* : MClassDef */;
914 val* var18 /* : MModule */;
915 val* var19 /* : MVisibility */;
916 short int var20 /* : Bool */;
917 short int var21 /* : Bool */;
918 val* var22 /* : null */;
919 short int var23 /* : Bool */;
920 val* var24 /* : MClassDef */;
921 val* var25 /* : MClassType */;
922 val* var_restype /* var restype: MClassType */;
923 val* var26 /* : MClassDef */;
924 val* var27 /* : MClassType */;
925 val* var_mproptype /* var mproptype: MClassType */;
926 val* var28 /* : null */;
927 short int var29 /* : Bool */;
928 val* var30 /* : null */;
929 short int var31 /* : Bool */;
930 val* var32 /* : null */;
931 short int var33 /* : Bool */;
932 val* var34 /* : Array[MProperty] */;
933 val* var35 /* : null */;
934 short int var36 /* : Bool */;
935 val* var37 /* : MClassDef */;
936 val* var38 /* : MClassType */;
937 val* var_restype39 /* var restype: MClassType */;
938 val* var40 /* : Iterator[nullable Object] */;
939 short int var41 /* : Bool */;
940 val* var42 /* : nullable Object */;
941 val* var_mprop43 /* var mprop: MProperty */;
942 val* var44 /* : MClassDef */;
943 val* var45 /* : MClassType */;
944 val* var_mproptype46 /* var mproptype: MClassType */;
945 val* var47 /* : null */;
946 short int var48 /* : Bool */;
947 short int var49 /* : Bool */;
948 static val* varonce;
949 val* var50 /* : String */;
950 char* var51 /* : NativeString */;
951 long var52 /* : Int */;
952 val* var53 /* : String */;
953 static val* varonce54;
954 val* var55 /* : String */;
955 char* var56 /* : NativeString */;
956 long var57 /* : Int */;
957 val* var58 /* : String */;
958 static val* varonce59;
959 val* var60 /* : String */;
960 char* var61 /* : NativeString */;
961 long var62 /* : Int */;
962 val* var63 /* : String */;
963 val* var64 /* : String */;
964 static val* varonce65;
965 val* var66 /* : String */;
966 char* var67 /* : NativeString */;
967 long var68 /* : Int */;
968 val* var69 /* : String */;
969 val* var70 /* : String */;
970 val* var71 /* : Array[Object] */;
971 long var72 /* : Int */;
972 val* var73 /* : NativeArray[Object] */;
973 val* var74 /* : String */;
974 val* var75 /* : null */;
975 val* var77 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
976 var_anode = p0;
977 var_mmodule = p1;
978 var_mtype = p2;
979 var_name = p3;
980 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
981 var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_model__Model__get_mproperties_by_name]))(var1, var_name) /* get_mproperties_by_name on <var1:Model>*/;
982 var_props = var2;
983 var3 = NULL;
984 if (var_props == NULL) {
985 var4 = 1; /* is null */
986 } else {
987 var4 = 0; /* arg is null but recv is not */
988 }
989 if (var4){
990 var5 = NULL;
991 var = var5;
992 goto RET_LABEL;
993 } else {
994 }
995 var6 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache]))(self) /* try_get_mproperty_by_name2_cache on <self:ModelBuilder>*/;
996 var7 = ((val* (*)(val*, val*, val*, val*))(var6->class->vft[COLOR_more_collections__HashMap3___91d_93d]))(var6, var_mmodule, var_mtype, var_name) /* [] on <var6:HashMap3[MModule, MType, String, nullable MProperty]>*/;
997 var_cache = var7;
998 var8 = NULL;
999 if (var_cache == NULL) {
1000 var9 = 0; /* is null */
1001 } else {
1002 var9 = 1; /* arg is null and recv is not */
1003 }
1004 if (var9){
1005 var = var_cache;
1006 goto RET_LABEL;
1007 } else {
1008 }
1009 var10 = NULL;
1010 var_res = var10;
1011 var11 = NULL;
1012 var_ress = var11;
1013 var12 = ((val* (*)(val*))(var_props->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_props) /* iterator on <var_props:nullable Array[MProperty](Array[MProperty])>*/;
1014 for(;;) {
1015 var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var12) /* is_ok on <var12:Iterator[nullable Object]>*/;
1016 if(!var13) break;
1017 var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__item]))(var12) /* item on <var12:Iterator[nullable Object]>*/;
1018 var_mprop = var14;
1019 var15 = ((short int (*)(val*, val*, val*))(var_mtype->class->vft[COLOR_model__MType__has_mproperty]))(var_mtype, var_mmodule, var_mprop) /* has_mproperty on <var_mtype:MType>*/;
1020 var16 = !var15;
1021 if (var16){
1022 goto CONTINUE_label;
1023 } else {
1024 }
1025 var17 = ((val* (*)(val*))(var_mprop->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_mprop) /* intro_mclassdef on <var_mprop:MProperty>*/;
1026 var18 = ((val* (*)(val*))(var17->class->vft[COLOR_model__MClassDef__mmodule]))(var17) /* mmodule on <var17:MClassDef>*/;
1027 var19 = ((val* (*)(val*))(var_mprop->class->vft[COLOR_model__MProperty__visibility]))(var_mprop) /* visibility on <var_mprop:MProperty>*/;
1028 var20 = ((short int (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_model_base__MModule__is_visible]))(var_mmodule, var18, var19) /* is_visible on <var_mmodule:MModule>*/;
1029 var21 = !var20;
1030 if (var21){
1031 goto CONTINUE_label;
1032 } else {
1033 }
1034 var22 = NULL;
1035 if (var_res == NULL) {
1036 var23 = 1; /* is null */
1037 } else {
1038 var23 = 0; /* arg is null but recv is not */
1039 }
1040 if (var23){
1041 var_res = var_mprop;
1042 } else {
1043 var24 = ((val* (*)(val*))(var_res->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_res) /* intro_mclassdef on <var_res:nullable MProperty(MProperty)>*/;
1044 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_model__MClassDef__bound_mtype]))(var24) /* bound_mtype on <var24:MClassDef>*/;
1045 var_restype = var25;
1046 var26 = ((val* (*)(val*))(var_mprop->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_mprop) /* intro_mclassdef on <var_mprop:MProperty>*/;
1047 var27 = ((val* (*)(val*))(var26->class->vft[COLOR_model__MClassDef__bound_mtype]))(var26) /* bound_mtype on <var26:MClassDef>*/;
1048 var_mproptype = var27;
1049 var28 = NULL;
1050 var29 = ((short int (*)(val*, val*, val*, val*))(var_restype->class->vft[COLOR_model__MType__is_subtype]))(var_restype, var_mmodule, var28, var_mproptype) /* is_subtype on <var_restype:MClassType>*/;
1051 if (var29){
1052 } else {
1053 var30 = NULL;
1054 var31 = ((short int (*)(val*, val*, val*, val*))(var_mproptype->class->vft[COLOR_model__MType__is_subtype]))(var_mproptype, var_mmodule, var30, var_restype) /* is_subtype on <var_mproptype:MClassType>*/;
1055 if (var31){
1056 var_res = var_mprop;
1057 } else {
1058 var32 = NULL;
1059 if (var_ress == NULL) {
1060 var33 = 1; /* is null */
1061 } else {
1062 var33 = 0; /* arg is null but recv is not */
1063 }
1064 if (var33){
1065 var34 = NEW_array__Array(&type_array__Arraymodel__MProperty);
1066 ((void (*)(val*))(var34->class->vft[COLOR_array__Array__init]))(var34) /* init on <var34:Array[MProperty]>*/;
1067 CHECK_NEW_array__Array(var34);
1068 var_ress = var34;
1069 } else {
1070 }
1071 ((void (*)(val*, val*))(var_ress->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_ress, var_mprop) /* add on <var_ress:nullable Array[MProperty](Array[MProperty])>*/;
1072 }
1073 }
1074 }
1075 CONTINUE_label: (void)0;
1076 ((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__next]))(var12) /* next on <var12:Iterator[nullable Object]>*/;
1077 }
1078 BREAK_label: (void)0;
1079 var35 = NULL;
1080 if (var_ress == NULL) {
1081 var36 = 0; /* is null */
1082 } else {
1083 var36 = 1; /* arg is null and recv is not */
1084 }
1085 if (var36){
1086 if (var_res == NULL) {
1087 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/modelbuilder.nit", 203);
1088 exit(1);
1089 } else {
1090 var37 = ((val* (*)(val*))(var_res->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_res) /* intro_mclassdef on <var_res:nullable MProperty>*/;
1091 }
1092 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_model__MClassDef__bound_mtype]))(var37) /* bound_mtype on <var37:MClassDef>*/;
1093 var_restype39 = var38;
1094 var40 = ((val* (*)(val*))(var_ress->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_ress) /* iterator on <var_ress:nullable Array[MProperty](Array[MProperty])>*/;
1095 for(;;) {
1096 var41 = ((short int (*)(val*))(var40->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var40) /* is_ok on <var40:Iterator[nullable Object]>*/;
1097 if(!var41) break;
1098 var42 = ((val* (*)(val*))(var40->class->vft[COLOR_abstract_collection__Iterator__item]))(var40) /* item on <var40:Iterator[nullable Object]>*/;
1099 var_mprop43 = var42;
1100 var44 = ((val* (*)(val*))(var_mprop43->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_mprop43) /* intro_mclassdef on <var_mprop43:MProperty>*/;
1101 var45 = ((val* (*)(val*))(var44->class->vft[COLOR_model__MClassDef__bound_mtype]))(var44) /* bound_mtype on <var44:MClassDef>*/;
1102 var_mproptype46 = var45;
1103 var47 = NULL;
1104 var48 = ((short int (*)(val*, val*, val*, val*))(var_restype39->class->vft[COLOR_model__MType__is_subtype]))(var_restype39, var_mmodule, var47, var_mproptype46) /* is_subtype on <var_restype39:MClassType>*/;
1105 var49 = !var48;
1106 if (var49){
1107 if (varonce) {
1108 var50 = varonce;
1109 } else {
1110 var51 = "Ambigous property name \'";
1111 var52 = 24;
1112 var53 = string__NativeString__to_s_with_length(var51, var52);
1113 var50 = var53;
1114 varonce = var50;
1115 }
1116 if (varonce54) {
1117 var55 = varonce54;
1118 } else {
1119 var56 = "\' for ";
1120 var57 = 6;
1121 var58 = string__NativeString__to_s_with_length(var56, var57);
1122 var55 = var58;
1123 varonce54 = var55;
1124 }
1125 if (varonce59) {
1126 var60 = varonce59;
1127 } else {
1128 var61 = "; conflict between ";
1129 var62 = 19;
1130 var63 = string__NativeString__to_s_with_length(var61, var62);
1131 var60 = var63;
1132 varonce59 = var60;
1133 }
1134 var64 = ((val* (*)(val*))(var_mprop43->class->vft[COLOR_model__MProperty__full_name]))(var_mprop43) /* full_name on <var_mprop43:MProperty>*/;
1135 if (varonce65) {
1136 var66 = varonce65;
1137 } else {
1138 var67 = " and ";
1139 var68 = 5;
1140 var69 = string__NativeString__to_s_with_length(var67, var68);
1141 var66 = var69;
1142 varonce65 = var66;
1143 }
1144 if (var_res == NULL) {
1145 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/modelbuilder.nit", 207);
1146 exit(1);
1147 } else {
1148 var70 = ((val* (*)(val*))(var_res->class->vft[COLOR_model__MProperty__full_name]))(var_res) /* full_name on <var_res:nullable MProperty>*/;
1149 }
1150 var71 = NEW_array__Array(&type_array__Arraykernel__Object);
1151 { /* var71 = array_instance Array[Object] */
1152 var72 = 8;
1153 var73 = NEW_array__NativeArray(var72, &type_array__NativeArraykernel__Object);
1154 ((struct instance_array__NativeArray*)var73)->values[0] = (val*) var50;
1155 ((struct instance_array__NativeArray*)var73)->values[1] = (val*) var_name;
1156 ((struct instance_array__NativeArray*)var73)->values[2] = (val*) var55;
1157 ((struct instance_array__NativeArray*)var73)->values[3] = (val*) var_mtype;
1158 ((struct instance_array__NativeArray*)var73)->values[4] = (val*) var60;
1159 ((struct instance_array__NativeArray*)var73)->values[5] = (val*) var64;
1160 ((struct instance_array__NativeArray*)var73)->values[6] = (val*) var66;
1161 ((struct instance_array__NativeArray*)var73)->values[7] = (val*) var70;
1162 ((void (*)(val*, val*, long))(var71->class->vft[COLOR_array__Array__with_native]))(var71, var73, var72) /* with_native on <var71:Array[Object]>*/;
1163 CHECK_NEW_array__Array(var71);
1164 }
1165 var74 = ((val* (*)(val*))(var71->class->vft[COLOR_string__Object__to_s]))(var71) /* to_s on <var71:Array[Object]>*/;
1166 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var74) /* error on <self:ModelBuilder>*/;
1167 var75 = NULL;
1168 var = var75;
1169 goto RET_LABEL;
1170 } else {
1171 }
1172 CONTINUE_label76: (void)0;
1173 ((void (*)(val*))(var40->class->vft[COLOR_abstract_collection__Iterator__next]))(var40) /* next on <var40:Iterator[nullable Object]>*/;
1174 }
1175 BREAK_label76: (void)0;
1176 } else {
1177 }
1178 var77 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache]))(self) /* try_get_mproperty_by_name2_cache on <self:ModelBuilder>*/;
1179 ((void (*)(val*, val*, val*, val*, val*))(var77->class->vft[COLOR_more_collections__HashMap3___91d_93d_61d]))(var77, var_mmodule, var_mtype, var_name, var_res) /* []= on <var77:HashMap3[MModule, MType, String, nullable MProperty]>*/;
1180 var = var_res;
1181 goto RET_LABEL;
1182 RET_LABEL:;
1183 return var;
1184 }
1185 /* method modelbuilder#ModelBuilder#try_get_mproperty_by_name2 for (self: Object, ANode, MModule, MType, String): nullable MProperty */
1186 val* VIRTUAL_modelbuilder__ModelBuilder__try_get_mproperty_by_name2(val* self, val* p0, val* p1, val* p2, val* p3) {
1187 val* var /* : nullable MProperty */;
1188 val* var1 /* : nullable MProperty */;
1189 var1 = modelbuilder__ModelBuilder__try_get_mproperty_by_name2(self, p0, p1, p2, p3);
1190 var = var1;
1191 RET_LABEL:;
1192 return var;
1193 }
1194 /* method modelbuilder#ModelBuilder#try_get_mproperty_by_name2_cache for (self: ModelBuilder): HashMap3[MModule, MType, String, nullable MProperty] */
1195 val* modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache(val* self) {
1196 val* var /* : HashMap3[MModule, MType, String, nullable MProperty] */;
1197 val* var1 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
1198 var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dtry_get_mproperty_by_name2_cache].val; /* @try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
1199 if (var1 == NULL) {
1200 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @try_get_mproperty_by_name2_cache", "src/modelbuilder.nit", 217);
1201 exit(1);
1202 }
1203 var = var1;
1204 RET_LABEL:;
1205 return var;
1206 }
1207 /* method modelbuilder#ModelBuilder#try_get_mproperty_by_name2_cache for (self: Object): HashMap3[MModule, MType, String, nullable MProperty] */
1208 val* VIRTUAL_modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache(val* self) {
1209 val* var /* : HashMap3[MModule, MType, String, nullable MProperty] */;
1210 val* var1 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
1211 var1 = modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache(self);
1212 var = var1;
1213 RET_LABEL:;
1214 return var;
1215 }
1216 /* method modelbuilder#ModelBuilder#try_get_mproperty_by_name2_cache= for (self: ModelBuilder, HashMap3[MModule, MType, String, nullable MProperty]) */
1217 void modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache_61d(val* self, val* p0) {
1218 self->attrs[COLOR_modelbuilder__ModelBuilder___64dtry_get_mproperty_by_name2_cache].val = p0; /* @try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
1219 RET_LABEL:;
1220 }
1221 /* method modelbuilder#ModelBuilder#try_get_mproperty_by_name2_cache= for (self: Object, HashMap3[MModule, MType, String, nullable MProperty]) */
1222 void VIRTUAL_modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache_61d(val* self, val* p0) {
1223 modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache_61d(self, p0);
1224 RET_LABEL:;
1225 }
1226 /* method modelbuilder#ModelBuilder#try_get_mproperty_by_name for (self: ModelBuilder, ANode, MClassDef, String): nullable MProperty */
1227 val* modelbuilder__ModelBuilder__try_get_mproperty_by_name(val* self, val* p0, val* p1, val* p2) {
1228 val* var /* : nullable MProperty */;
1229 val* var_anode /* var anode: ANode */;
1230 val* var_mclassdef /* var mclassdef: MClassDef */;
1231 val* var_name /* var name: String */;
1232 val* var1 /* : MModule */;
1233 val* var2 /* : MClassType */;
1234 val* var3 /* : nullable MProperty */;
1235 var_anode = p0;
1236 var_mclassdef = p1;
1237 var_name = p2;
1238 var1 = ((val* (*)(val*))(var_mclassdef->class->vft[COLOR_model__MClassDef__mmodule]))(var_mclassdef) /* mmodule on <var_mclassdef:MClassDef>*/;
1239 var2 = ((val* (*)(val*))(var_mclassdef->class->vft[COLOR_model__MClassDef__bound_mtype]))(var_mclassdef) /* bound_mtype on <var_mclassdef:MClassDef>*/;
1240 var3 = ((val* (*)(val*, val*, val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__try_get_mproperty_by_name2]))(self, var_anode, var1, var2, var_name) /* try_get_mproperty_by_name2 on <self:ModelBuilder>*/;
1241 var = var3;
1242 goto RET_LABEL;
1243 RET_LABEL:;
1244 return var;
1245 }
1246 /* method modelbuilder#ModelBuilder#try_get_mproperty_by_name for (self: Object, ANode, MClassDef, String): nullable MProperty */
1247 val* VIRTUAL_modelbuilder__ModelBuilder__try_get_mproperty_by_name(val* self, val* p0, val* p1, val* p2) {
1248 val* var /* : nullable MProperty */;
1249 val* var1 /* : nullable MProperty */;
1250 var1 = modelbuilder__ModelBuilder__try_get_mproperty_by_name(self, p0, p1, p2);
1251 var = var1;
1252 RET_LABEL:;
1253 return var;
1254 }
1255 /* method modelbuilder#ModelBuilder#paths for (self: ModelBuilder): Array[String] */
1256 val* modelbuilder__ModelBuilder__paths(val* self) {
1257 val* var /* : Array[String] */;
1258 val* var1 /* : Array[String] */;
1259 var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dpaths].val; /* @paths on <self:ModelBuilder> */
1260 if (var1 == NULL) {
1261 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @paths", "src/modelbuilder.nit", 226);
1262 exit(1);
1263 }
1264 var = var1;
1265 RET_LABEL:;
1266 return var;
1267 }
1268 /* method modelbuilder#ModelBuilder#paths for (self: Object): Array[String] */
1269 val* VIRTUAL_modelbuilder__ModelBuilder__paths(val* self) {
1270 val* var /* : Array[String] */;
1271 val* var1 /* : Array[String] */;
1272 var1 = modelbuilder__ModelBuilder__paths(self);
1273 var = var1;
1274 RET_LABEL:;
1275 return var;
1276 }
1277 /* method modelbuilder#ModelBuilder#paths= for (self: ModelBuilder, Array[String]) */
1278 void modelbuilder__ModelBuilder__paths_61d(val* self, val* p0) {
1279 self->attrs[COLOR_modelbuilder__ModelBuilder___64dpaths].val = p0; /* @paths on <self:ModelBuilder> */
1280 RET_LABEL:;
1281 }
1282 /* method modelbuilder#ModelBuilder#paths= for (self: Object, Array[String]) */
1283 void VIRTUAL_modelbuilder__ModelBuilder__paths_61d(val* self, val* p0) {
1284 modelbuilder__ModelBuilder__paths_61d(self, p0);
1285 RET_LABEL:;
1286 }
1287 /* method modelbuilder#ModelBuilder#get_mmodule_by_name for (self: ModelBuilder, ANode, nullable MModule, String): nullable MModule */
1288 val* modelbuilder__ModelBuilder__get_mmodule_by_name(val* self, val* p0, val* p1, val* p2) {
1289 val* var /* : nullable MModule */;
1290 val* var_anode /* var anode: ANode */;
1291 val* var_mmodule /* var mmodule: nullable MModule */;
1292 val* var_name /* var name: String */;
1293 val* var_origmmodule /* var origmmodule: nullable MModule */;
1294 val* var1 /* : Model */;
1295 val* var2 /* : nullable Array[MModule] */;
1296 val* var_modules /* var modules: nullable Array[MModule] */;
1297 val* var3 /* : Array[String] */;
1298 val* var_tries /* var tries: Array[String] */;
1299 val* var_lastmodule /* var lastmodule: nullable MModule */;
1300 val* var4 /* : null */;
1301 short int var5 /* : Bool */;
1302 val* var6 /* : Location */;
1303 val* var7 /* : nullable SourceFile */;
1304 val* var8 /* : String */;
1305 val* var9 /* : String */;
1306 val* var_dirname /* var dirname: String */;
1307 static val* varonce;
1308 val* var10 /* : String */;
1309 char* var11 /* : NativeString */;
1310 long var12 /* : Int */;
1311 val* var13 /* : String */;
1312 val* var14 /* : String */;
1313 val* var15 /* : String */;
1314 short int var16 /* : Bool */;
1315 val* var17 /* : nullable MModule */;
1316 val* var_owner /* var owner: nullable MModule */;
1317 val* var18 /* : null */;
1318 short int var19 /* : Bool */;
1319 val* var20 /* : Iterator[nullable Object] */;
1320 short int var21 /* : Bool */;
1321 val* var22 /* : nullable Object */;
1322 val* var_candidate /* var candidate: MModule */;
1323 val* var23 /* : nullable MModule */;
1324 short int var24 /* : Bool */;
1325 static val* varonce25;
1326 val* var26 /* : String */;
1327 char* var27 /* : NativeString */;
1328 long var28 /* : Int */;
1329 val* var29 /* : String */;
1330 val* var30 /* : String */;
1331 val* var31 /* : String */;
1332 static val* varonce32;
1333 val* var33 /* : String */;
1334 char* var34 /* : NativeString */;
1335 long var35 /* : Int */;
1336 val* var36 /* : String */;
1337 val* var37 /* : String */;
1338 val* var_try_file /* var try_file: String */;
1339 short int var38 /* : Bool */;
1340 val* var39 /* : String */;
1341 val* var40 /* : nullable AModule */;
1342 val* var_res /* var res: nullable AModule */;
1343 val* var41 /* : null */;
1344 short int var42 /* : Bool */;
1345 val* var43 /* : null */;
1346 val* var44 /* : nullable MModule */;
1347 static val* varonce45;
1348 val* var46 /* : String */;
1349 char* var47 /* : NativeString */;
1350 long var48 /* : Int */;
1351 val* var49 /* : String */;
1352 val* var50 /* : String */;
1353 val* var51 /* : String */;
1354 static val* varonce52;
1355 val* var53 /* : String */;
1356 char* var54 /* : NativeString */;
1357 long var55 /* : Int */;
1358 val* var56 /* : String */;
1359 val* var57 /* : String */;
1360 val* var58 /* : String */;
1361 static val* varonce59;
1362 val* var60 /* : String */;
1363 char* var61 /* : NativeString */;
1364 long var62 /* : Int */;
1365 val* var63 /* : String */;
1366 val* var64 /* : String */;
1367 short int var65 /* : Bool */;
1368 val* var66 /* : String */;
1369 val* var67 /* : nullable AModule */;
1370 val* var_res68 /* var res: nullable AModule */;
1371 val* var69 /* : null */;
1372 short int var70 /* : Bool */;
1373 val* var71 /* : null */;
1374 val* var72 /* : nullable MModule */;
1375 val* var73 /* : nullable MModule */;
1376 val* var75 /* : null */;
1377 short int var76 /* : Bool */;
1378 val* var77 /* : Iterator[nullable Object] */;
1379 short int var78 /* : Bool */;
1380 val* var79 /* : nullable Object */;
1381 val* var_candidate80 /* var candidate: MModule */;
1382 val* var81 /* : nullable MModule */;
1383 val* var82 /* : null */;
1384 short int var83 /* : Bool */;
1385 val* var85 /* : Array[String] */;
1386 val* var_lookpaths /* var lookpaths: Array[String] */;
1387 val* var86 /* : null */;
1388 short int var87 /* : Bool */;
1389 val* var88 /* : Location */;
1390 val* var89 /* : nullable SourceFile */;
1391 val* var90 /* : String */;
1392 val* var91 /* : String */;
1393 val* var_dirname92 /* var dirname: String */;
1394 static val* varonce93;
1395 val* var94 /* : String */;
1396 char* var95 /* : NativeString */;
1397 long var96 /* : Int */;
1398 val* var97 /* : String */;
1399 val* var98 /* : String */;
1400 val* var99 /* : String */;
1401 short int var100 /* : Bool */;
1402 val* var101 /* : String */;
1403 short int var102 /* : Bool */;
1404 short int var103 /* : Bool */;
1405 val* var104 /* : Array[nullable Object] */;
1406 val* var105 /* : null */;
1407 val* var_candidate106 /* var candidate: nullable String */;
1408 val* var107 /* : Iterator[nullable Object] */;
1409 short int var108 /* : Bool */;
1410 val* var109 /* : nullable Object */;
1411 val* var_dirname110 /* var dirname: String */;
1412 static val* varonce111;
1413 val* var112 /* : String */;
1414 char* var113 /* : NativeString */;
1415 long var114 /* : Int */;
1416 val* var115 /* : String */;
1417 val* var116 /* : String */;
1418 val* var117 /* : String */;
1419 static val* varonce118;
1420 val* var119 /* : String */;
1421 char* var120 /* : NativeString */;
1422 long var121 /* : Int */;
1423 val* var122 /* : String */;
1424 val* var123 /* : String */;
1425 val* var124 /* : String */;
1426 val* var_try_file125 /* var try_file: String */;
1427 short int var126 /* : Bool */;
1428 val* var127 /* : null */;
1429 short int var128 /* : Bool */;
1430 short int var129 /* : Bool */;
1431 val* var130 /* : String */;
1432 val* var_abs_candidate /* var abs_candidate: String */;
1433 val* var131 /* : String */;
1434 val* var_abs_try_file /* var abs_try_file: String */;
1435 short int var132 /* : Bool */;
1436 static val* varonce133;
1437 val* var134 /* : String */;
1438 char* var135 /* : NativeString */;
1439 long var136 /* : Int */;
1440 val* var137 /* : String */;
1441 static val* varonce138;
1442 val* var139 /* : String */;
1443 char* var140 /* : NativeString */;
1444 long var141 /* : Int */;
1445 val* var142 /* : String */;
1446 static val* varonce143;
1447 val* var144 /* : String */;
1448 char* var145 /* : NativeString */;
1449 long var146 /* : Int */;
1450 val* var147 /* : String */;
1451 val* var148 /* : Array[Object] */;
1452 long var149 /* : Int */;
1453 val* var150 /* : NativeArray[Object] */;
1454 val* var151 /* : String */;
1455 static val* varonce152;
1456 val* var153 /* : String */;
1457 char* var154 /* : NativeString */;
1458 long var155 /* : Int */;
1459 val* var156 /* : String */;
1460 val* var157 /* : String */;
1461 val* var158 /* : String */;
1462 static val* varonce159;
1463 val* var160 /* : String */;
1464 char* var161 /* : NativeString */;
1465 long var162 /* : Int */;
1466 val* var163 /* : String */;
1467 val* var164 /* : String */;
1468 val* var165 /* : String */;
1469 static val* varonce166;
1470 val* var167 /* : String */;
1471 char* var168 /* : NativeString */;
1472 long var169 /* : Int */;
1473 val* var170 /* : String */;
1474 val* var171 /* : String */;
1475 val* var172 /* : String */;
1476 short int var173 /* : Bool */;
1477 val* var174 /* : null */;
1478 short int var175 /* : Bool */;
1479 short int var176 /* : Bool */;
1480 val* var177 /* : String */;
1481 val* var_abs_candidate178 /* var abs_candidate: String */;
1482 val* var179 /* : String */;
1483 val* var_abs_try_file180 /* var abs_try_file: String */;
1484 short int var181 /* : Bool */;
1485 static val* varonce182;
1486 val* var183 /* : String */;
1487 char* var184 /* : NativeString */;
1488 long var185 /* : Int */;
1489 val* var186 /* : String */;
1490 static val* varonce187;
1491 val* var188 /* : String */;
1492 char* var189 /* : NativeString */;
1493 long var190 /* : Int */;
1494 val* var191 /* : String */;
1495 static val* varonce192;
1496 val* var193 /* : String */;
1497 char* var194 /* : NativeString */;
1498 long var195 /* : Int */;
1499 val* var196 /* : String */;
1500 val* var197 /* : Array[Object] */;
1501 long var198 /* : Int */;
1502 val* var199 /* : NativeArray[Object] */;
1503 val* var200 /* : String */;
1504 val* var202 /* : null */;
1505 short int var203 /* : Bool */;
1506 val* var204 /* : null */;
1507 short int var205 /* : Bool */;
1508 static val* varonce206;
1509 val* var207 /* : String */;
1510 char* var208 /* : NativeString */;
1511 long var209 /* : Int */;
1512 val* var210 /* : String */;
1513 static val* varonce211;
1514 val* var212 /* : String */;
1515 char* var213 /* : NativeString */;
1516 long var214 /* : Int */;
1517 val* var215 /* : String */;
1518 static val* varonce216;
1519 val* var217 /* : String */;
1520 char* var218 /* : NativeString */;
1521 long var219 /* : Int */;
1522 val* var220 /* : String */;
1523 static val* varonce221;
1524 val* var222 /* : String */;
1525 char* var223 /* : NativeString */;
1526 long var224 /* : Int */;
1527 val* var225 /* : String */;
1528 val* var226 /* : String */;
1529 val* var227 /* : Array[Object] */;
1530 long var228 /* : Int */;
1531 val* var229 /* : NativeArray[Object] */;
1532 val* var230 /* : String */;
1533 static val* varonce231;
1534 val* var232 /* : String */;
1535 char* var233 /* : NativeString */;
1536 long var234 /* : Int */;
1537 val* var235 /* : String */;
1538 static val* varonce236;
1539 val* var237 /* : String */;
1540 char* var238 /* : NativeString */;
1541 long var239 /* : Int */;
1542 val* var240 /* : String */;
1543 static val* varonce241;
1544 val* var242 /* : String */;
1545 char* var243 /* : NativeString */;
1546 long var244 /* : Int */;
1547 val* var245 /* : String */;
1548 val* var246 /* : String */;
1549 val* var247 /* : Array[Object] */;
1550 long var248 /* : Int */;
1551 val* var249 /* : NativeArray[Object] */;
1552 val* var250 /* : String */;
1553 val* var251 /* : null */;
1554 val* var252 /* : nullable AModule */;
1555 val* var_res253 /* var res: nullable AModule */;
1556 val* var254 /* : null */;
1557 short int var255 /* : Bool */;
1558 val* var256 /* : null */;
1559 val* var257 /* : nullable MModule */;
1560 var_anode = p0;
1561 var_mmodule = p1;
1562 var_name = p2;
1563 var_origmmodule = var_mmodule;
1564 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
1565 var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_model_base__Model__get_mmodules_by_name]))(var1, var_name) /* get_mmodules_by_name on <var1:Model>*/;
1566 var_modules = var2;
1567 var3 = NEW_array__Array(&type_array__Arraystring__String);
1568 ((void (*)(val*))(var3->class->vft[COLOR_array__Array__init]))(var3) /* init on <var3:Array[String]>*/;
1569 CHECK_NEW_array__Array(var3);
1570 var_tries = var3;
1571 var_lastmodule = var_mmodule;
1572 for(;;) {
1573 var4 = NULL;
1574 if (var_mmodule == NULL) {
1575 var5 = 0; /* is null */
1576 } else {
1577 var5 = 1; /* arg is null and recv is not */
1578 }
1579 if (!var5) break;
1580 var6 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_model_base__MModule__location]))(var_mmodule) /* location on <var_mmodule:nullable MModule(MModule)>*/;
1581 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_location__Location__file]))(var6) /* file on <var6:Location>*/;
1582 if (var7 == NULL) {
1583 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/modelbuilder.nit", 248);
1584 exit(1);
1585 } else {
1586 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_location__SourceFile__filename]))(var7) /* filename on <var7:nullable SourceFile>*/;
1587 }
1588 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_file__String__dirname]))(var8) /* dirname on <var8:String>*/;
1589 var_dirname = var9;
1590 if (varonce) {
1591 var10 = varonce;
1592 } else {
1593 var11 = "";
1594 var12 = 0;
1595 var13 = string__NativeString__to_s_with_length(var11, var12);
1596 var10 = var13;
1597 varonce = var10;
1598 }
1599 var14 = ((val* (*)(val*, val*))(var_dirname->class->vft[COLOR_file__String__basename]))(var_dirname, var10) /* basename on <var_dirname:String>*/;
1600 var15 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_model_base__MModule__name]))(var_mmodule) /* name on <var_mmodule:nullable MModule(MModule)>*/;
1601 var16 = ((short int (*)(val*, val*))(var14->class->vft[COLOR_kernel__Object___33d_61d]))(var14, var15) /* != on <var14:String>*/;
1602 if (var16){
1603 var17 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_model_base__MModule__direct_owner]))(var_mmodule) /* direct_owner on <var_mmodule:nullable MModule(MModule)>*/;
1604 var_owner = var17;
1605 } else {
1606 var_owner = var_mmodule;
1607 }
1608 var18 = NULL;
1609 if (var_modules == NULL) {
1610 var19 = 0; /* is null */
1611 } else {
1612 var19 = 1; /* arg is null and recv is not */
1613 }
1614 if (var19){
1615 var20 = ((val* (*)(val*))(var_modules->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_modules) /* iterator on <var_modules:nullable Array[MModule](Array[MModule])>*/;
1616 for(;;) {
1617 var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
1618 if(!var21) break;
1619 var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
1620 var_candidate = var22;
1621 var23 = ((val* (*)(val*))(var_candidate->class->vft[COLOR_model_base__MModule__direct_owner]))(var_candidate) /* direct_owner on <var_candidate:MModule>*/;
1622 if (var23 == NULL) {
1623 var24 = (var_owner == NULL);
1624 } else {
1625 var24 = ((short int (*)(val*, val*))(var23->class->vft[COLOR_kernel__Object___61d_61d]))(var23, var_owner) /* == on <var23:nullable MModule>*/;
1626 }
1627 if (var24){
1628 var = var_candidate;
1629 goto RET_LABEL;
1630 } else {
1631 }
1632 CONTINUE_label: (void)0;
1633 ((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
1634 }
1635 BREAK_label: (void)0;
1636 } else {
1637 }
1638 if (varonce25) {
1639 var26 = varonce25;
1640 } else {
1641 var27 = "/";
1642 var28 = 1;
1643 var29 = string__NativeString__to_s_with_length(var27, var28);
1644 var26 = var29;
1645 varonce25 = var26;
1646 }
1647 var30 = ((val* (*)(val*, val*))(var_dirname->class->vft[COLOR_string__String___43d]))(var_dirname, var26) /* + on <var_dirname:String>*/;
1648 var31 = ((val* (*)(val*, val*))(var30->class->vft[COLOR_string__String___43d]))(var30, var_name) /* + on <var30:String>*/;
1649 if (varonce32) {
1650 var33 = varonce32;
1651 } else {
1652 var34 = ".nit";
1653 var35 = 4;
1654 var36 = string__NativeString__to_s_with_length(var34, var35);
1655 var33 = var36;
1656 varonce32 = var33;
1657 }
1658 var37 = ((val* (*)(val*, val*))(var31->class->vft[COLOR_string__String___43d]))(var31, var33) /* + on <var31:String>*/;
1659 var_try_file = var37;
1660 ((void (*)(val*, val*))(var_tries->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_tries, var_try_file) /* add on <var_tries:Array[String]>*/;
1661 var38 = ((short int (*)(val*))(var_try_file->class->vft[COLOR_file__String__file_exists]))(var_try_file) /* file_exists on <var_try_file:String>*/;
1662 if (var38){
1663 var39 = ((val* (*)(val*))(var_try_file->class->vft[COLOR_file__String__simplify_path]))(var_try_file) /* simplify_path on <var_try_file:String>*/;
1664 var40 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__load_module]))(self, var_owner, var39) /* load_module on <self:ModelBuilder>*/;
1665 var_res = var40;
1666 var41 = NULL;
1667 if (var_res == NULL) {
1668 var42 = 1; /* is null */
1669 } else {
1670 var42 = 0; /* arg is null but recv is not */
1671 }
1672 if (var42){
1673 var43 = NULL;
1674 var = var43;
1675 goto RET_LABEL;
1676 } else {
1677 }
1678 var44 = ((val* (*)(val*))(var_res->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_res) /* mmodule on <var_res:nullable AModule(AModule)>*/;
1679 if (var44 == NULL) {
1680 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/modelbuilder.nit", 273);
1681 exit(1);
1682 }
1683 var = var44;
1684 goto RET_LABEL;
1685 } else {
1686 }
1687 if (varonce45) {
1688 var46 = varonce45;
1689 } else {
1690 var47 = "/";
1691 var48 = 1;
1692 var49 = string__NativeString__to_s_with_length(var47, var48);
1693 var46 = var49;
1694 varonce45 = var46;
1695 }
1696 var50 = ((val* (*)(val*, val*))(var_dirname->class->vft[COLOR_string__String___43d]))(var_dirname, var46) /* + on <var_dirname:String>*/;
1697 var51 = ((val* (*)(val*, val*))(var50->class->vft[COLOR_string__String___43d]))(var50, var_name) /* + on <var50:String>*/;
1698 if (varonce52) {
1699 var53 = varonce52;
1700 } else {
1701 var54 = "/";
1702 var55 = 1;
1703 var56 = string__NativeString__to_s_with_length(var54, var55);
1704 var53 = var56;
1705 varonce52 = var53;
1706 }
1707 var57 = ((val* (*)(val*, val*))(var51->class->vft[COLOR_string__String___43d]))(var51, var53) /* + on <var51:String>*/;
1708 var58 = ((val* (*)(val*, val*))(var57->class->vft[COLOR_string__String___43d]))(var57, var_name) /* + on <var57:String>*/;
1709 if (varonce59) {
1710 var60 = varonce59;
1711 } else {
1712 var61 = ".nit";
1713 var62 = 4;
1714 var63 = string__NativeString__to_s_with_length(var61, var62);
1715 var60 = var63;
1716 varonce59 = var60;
1717 }
1718 var64 = ((val* (*)(val*, val*))(var58->class->vft[COLOR_string__String___43d]))(var58, var60) /* + on <var58:String>*/;
1719 var_try_file = var64;
1720 var65 = ((short int (*)(val*))(var_try_file->class->vft[COLOR_file__String__file_exists]))(var_try_file) /* file_exists on <var_try_file:String>*/;
1721 if (var65){
1722 var66 = ((val* (*)(val*))(var_try_file->class->vft[COLOR_file__String__simplify_path]))(var_try_file) /* simplify_path on <var_try_file:String>*/;
1723 var67 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__load_module]))(self, var_owner, var66) /* load_module on <self:ModelBuilder>*/;
1724 var_res68 = var67;
1725 var69 = NULL;
1726 if (var_res68 == NULL) {
1727 var70 = 1; /* is null */
1728 } else {
1729 var70 = 0; /* arg is null but recv is not */
1730 }
1731 if (var70){
1732 var71 = NULL;
1733 var = var71;
1734 goto RET_LABEL;
1735 } else {
1736 }
1737 var72 = ((val* (*)(val*))(var_res68->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_res68) /* mmodule on <var_res68:nullable AModule(AModule)>*/;
1738 if (var72 == NULL) {
1739 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/modelbuilder.nit", 281);
1740 exit(1);
1741 }
1742 var = var72;
1743 goto RET_LABEL;
1744 } else {
1745 }
1746 var_lastmodule = var_mmodule;
1747 var73 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_model_base__MModule__direct_owner]))(var_mmodule) /* direct_owner on <var_mmodule:nullable MModule(MModule)>*/;
1748 var_mmodule = var73;
1749 CONTINUE_label74: (void)0;
1750 }
1751 BREAK_label74: (void)0;
1752 var75 = NULL;
1753 if (var_modules == NULL) {
1754 var76 = 0; /* is null */
1755 } else {
1756 var76 = 1; /* arg is null and recv is not */
1757 }
1758 if (var76){
1759 var77 = ((val* (*)(val*))(var_modules->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_modules) /* iterator on <var_modules:nullable Array[MModule](Array[MModule])>*/;
1760 for(;;) {
1761 var78 = ((short int (*)(val*))(var77->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var77) /* is_ok on <var77:Iterator[nullable Object]>*/;
1762 if(!var78) break;
1763 var79 = ((val* (*)(val*))(var77->class->vft[COLOR_abstract_collection__Iterator__item]))(var77) /* item on <var77:Iterator[nullable Object]>*/;
1764 var_candidate80 = var79;
1765 var81 = ((val* (*)(val*))(var_candidate80->class->vft[COLOR_model_base__MModule__direct_owner]))(var_candidate80) /* direct_owner on <var_candidate80:MModule>*/;
1766 var82 = NULL;
1767 if (var81 == NULL) {
1768 var83 = 1; /* is null */
1769 } else {
1770 var83 = 0; /* arg is null but recv is not */
1771 }
1772 if (var83){
1773 var = var_candidate80;
1774 goto RET_LABEL;
1775 } else {
1776 }
1777 CONTINUE_label84: (void)0;
1778 ((void (*)(val*))(var77->class->vft[COLOR_abstract_collection__Iterator__next]))(var77) /* next on <var77:Iterator[nullable Object]>*/;
1779 }
1780 BREAK_label84: (void)0;
1781 } else {
1782 }
1783 var85 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
1784 var_lookpaths = var85;
1785 var86 = NULL;
1786 if (var_lastmodule == NULL) {
1787 var87 = 0; /* is null */
1788 } else {
1789 var87 = 1; /* arg is null and recv is not */
1790 }
1791 if (var87){
1792 var88 = ((val* (*)(val*))(var_lastmodule->class->vft[COLOR_model_base__MModule__location]))(var_lastmodule) /* location on <var_lastmodule:nullable MModule(MModule)>*/;
1793 var89 = ((val* (*)(val*))(var88->class->vft[COLOR_location__Location__file]))(var88) /* file on <var88:Location>*/;
1794 if (var89 == NULL) {
1795 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/modelbuilder.nit", 301);
1796 exit(1);
1797 } else {
1798 var90 = ((val* (*)(val*))(var89->class->vft[COLOR_location__SourceFile__filename]))(var89) /* filename on <var89:nullable SourceFile>*/;
1799 }
1800 var91 = ((val* (*)(val*))(var90->class->vft[COLOR_file__String__dirname]))(var90) /* dirname on <var90:String>*/;
1801 var_dirname92 = var91;
1802 if (varonce93) {
1803 var94 = varonce93;
1804 } else {
1805 var95 = "";
1806 var96 = 0;
1807 var97 = string__NativeString__to_s_with_length(var95, var96);
1808 var94 = var97;
1809 varonce93 = var94;
1810 }
1811 var98 = ((val* (*)(val*, val*))(var_dirname92->class->vft[COLOR_file__String__basename]))(var_dirname92, var94) /* basename on <var_dirname92:String>*/;
1812 var99 = ((val* (*)(val*))(var_lastmodule->class->vft[COLOR_model_base__MModule__name]))(var_lastmodule) /* name on <var_lastmodule:nullable MModule(MModule)>*/;
1813 var100 = ((short int (*)(val*, val*))(var98->class->vft[COLOR_kernel__Object___61d_61d]))(var98, var99) /* == on <var98:String>*/;
1814 if (var100){
1815 var101 = ((val* (*)(val*))(var_dirname92->class->vft[COLOR_file__String__dirname]))(var_dirname92) /* dirname on <var_dirname92:String>*/;
1816 var_dirname92 = var101;
1817 } else {
1818 }
1819 var102 = ((short int (*)(val*, val*))(var_lookpaths->class->vft[COLOR_abstract_collection__Collection__has]))(var_lookpaths, var_dirname92) /* has on <var_lookpaths:Array[String]>*/;
1820 var103 = !var102;
1821 if (var103){
1822 var104 = ((val* (*)(val*))(var_lookpaths->class->vft[COLOR_array__Collection__to_a]))(var_lookpaths) /* to_a on <var_lookpaths:Array[String]>*/;
1823 var_lookpaths = var104;
1824 ((void (*)(val*, val*))(var_lookpaths->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_lookpaths, var_dirname92) /* add on <var_lookpaths:Array[String]>*/;
1825 } else {
1826 }
1827 } else {
1828 }
1829 var105 = NULL;
1830 var_candidate106 = var105;
1831 var107 = ((val* (*)(val*))(var_lookpaths->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_lookpaths) /* iterator on <var_lookpaths:Array[String]>*/;
1832 for(;;) {
1833 var108 = ((short int (*)(val*))(var107->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var107) /* is_ok on <var107:Iterator[nullable Object]>*/;
1834 if(!var108) break;
1835 var109 = ((val* (*)(val*))(var107->class->vft[COLOR_abstract_collection__Iterator__item]))(var107) /* item on <var107:Iterator[nullable Object]>*/;
1836 var_dirname110 = var109;
1837 if (varonce111) {
1838 var112 = varonce111;
1839 } else {
1840 var113 = "/";
1841 var114 = 1;
1842 var115 = string__NativeString__to_s_with_length(var113, var114);
1843 var112 = var115;
1844 varonce111 = var112;
1845 }
1846 var116 = ((val* (*)(val*, val*))(var_dirname110->class->vft[COLOR_string__String___43d]))(var_dirname110, var112) /* + on <var_dirname110:String>*/;
1847 var117 = ((val* (*)(val*, val*))(var116->class->vft[COLOR_string__String___43d]))(var116, var_name) /* + on <var116:String>*/;
1848 if (varonce118) {
1849 var119 = varonce118;
1850 } else {
1851 var120 = ".nit";
1852 var121 = 4;
1853 var122 = string__NativeString__to_s_with_length(var120, var121);
1854 var119 = var122;
1855 varonce118 = var119;
1856 }
1857 var123 = ((val* (*)(val*, val*))(var117->class->vft[COLOR_string__String___43d]))(var117, var119) /* + on <var117:String>*/;
1858 var124 = ((val* (*)(val*))(var123->class->vft[COLOR_file__String__simplify_path]))(var123) /* simplify_path on <var123:String>*/;
1859 var_try_file125 = var124;
1860 ((void (*)(val*, val*))(var_tries->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_tries, var_try_file125) /* add on <var_tries:Array[String]>*/;
1861 var126 = ((short int (*)(val*))(var_try_file125->class->vft[COLOR_file__String__file_exists]))(var_try_file125) /* file_exists on <var_try_file125:String>*/;
1862 if (var126){
1863 var127 = NULL;
1864 if (var_candidate106 == NULL) {
1865 var128 = 1; /* is null */
1866 } else {
1867 var128 = 0; /* arg is null but recv is not */
1868 }
1869 if (var128){
1870 var_candidate106 = var_try_file125;
1871 } else {
1872 var129 = ((short int (*)(val*, val*))(var_candidate106->class->vft[COLOR_kernel__Object___33d_61d]))(var_candidate106, var_try_file125) /* != on <var_candidate106:nullable String(String)>*/;
1873 if (var129){
1874 var130 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_candidate106) /* module_absolute_path on <self:ModelBuilder>*/;
1875 var_abs_candidate = var130;
1876 var131 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_try_file125) /* module_absolute_path on <self:ModelBuilder>*/;
1877 var_abs_try_file = var131;
1878 var132 = ((short int (*)(val*, val*))(var_abs_candidate->class->vft[COLOR_kernel__Object___33d_61d]))(var_abs_candidate, var_abs_try_file) /* != on <var_abs_candidate:String>*/;
1879 if (var132){
1880 if (varonce133) {
1881 var134 = varonce133;
1882 } else {
1883 var135 = "Error: conflicting module file for ";
1884 var136 = 35;
1885 var137 = string__NativeString__to_s_with_length(var135, var136);
1886 var134 = var137;
1887 varonce133 = var134;
1888 }
1889 if (varonce138) {
1890 var139 = varonce138;
1891 } else {
1892 var140 = ": ";
1893 var141 = 2;
1894 var142 = string__NativeString__to_s_with_length(var140, var141);
1895 var139 = var142;
1896 varonce138 = var139;
1897 }
1898 if (varonce143) {
1899 var144 = varonce143;
1900 } else {
1901 var145 = " ";
1902 var146 = 1;
1903 var147 = string__NativeString__to_s_with_length(var145, var146);
1904 var144 = var147;
1905 varonce143 = var144;
1906 }
1907 var148 = NEW_array__Array(&type_array__Arraykernel__Object);
1908 { /* var148 = array_instance Array[Object] */
1909 var149 = 6;
1910 var150 = NEW_array__NativeArray(var149, &type_array__NativeArraykernel__Object);
1911 ((struct instance_array__NativeArray*)var150)->values[0] = (val*) var134;
1912 ((struct instance_array__NativeArray*)var150)->values[1] = (val*) var_name;
1913 ((struct instance_array__NativeArray*)var150)->values[2] = (val*) var139;
1914 ((struct instance_array__NativeArray*)var150)->values[3] = (val*) var_candidate106;
1915 ((struct instance_array__NativeArray*)var150)->values[4] = (val*) var144;
1916 ((struct instance_array__NativeArray*)var150)->values[5] = (val*) var_try_file125;
1917 ((void (*)(val*, val*, long))(var148->class->vft[COLOR_array__Array__with_native]))(var148, var150, var149) /* with_native on <var148:Array[Object]>*/;
1918 CHECK_NEW_array__Array(var148);
1919 }
1920 var151 = ((val* (*)(val*))(var148->class->vft[COLOR_string__Object__to_s]))(var148) /* to_s on <var148:Array[Object]>*/;
1921 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var151) /* error on <self:ModelBuilder>*/;
1922 } else {
1923 }
1924 } else {
1925 }
1926 }
1927 } else {
1928 }
1929 if (varonce152) {
1930 var153 = varonce152;
1931 } else {
1932 var154 = "/";
1933 var155 = 1;
1934 var156 = string__NativeString__to_s_with_length(var154, var155);
1935 var153 = var156;
1936 varonce152 = var153;
1937 }
1938 var157 = ((val* (*)(val*, val*))(var_dirname110->class->vft[COLOR_string__String___43d]))(var_dirname110, var153) /* + on <var_dirname110:String>*/;
1939 var158 = ((val* (*)(val*, val*))(var157->class->vft[COLOR_string__String___43d]))(var157, var_name) /* + on <var157:String>*/;
1940 if (varonce159) {
1941 var160 = varonce159;
1942 } else {
1943 var161 = "/";
1944 var162 = 1;
1945 var163 = string__NativeString__to_s_with_length(var161, var162);
1946 var160 = var163;
1947 varonce159 = var160;
1948 }
1949 var164 = ((val* (*)(val*, val*))(var158->class->vft[COLOR_string__String___43d]))(var158, var160) /* + on <var158:String>*/;
1950 var165 = ((val* (*)(val*, val*))(var164->class->vft[COLOR_string__String___43d]))(var164, var_name) /* + on <var164:String>*/;
1951 if (varonce166) {
1952 var167 = varonce166;
1953 } else {
1954 var168 = ".nit";
1955 var169 = 4;
1956 var170 = string__NativeString__to_s_with_length(var168, var169);
1957 var167 = var170;
1958 varonce166 = var167;
1959 }
1960 var171 = ((val* (*)(val*, val*))(var165->class->vft[COLOR_string__String___43d]))(var165, var167) /* + on <var165:String>*/;
1961 var172 = ((val* (*)(val*))(var171->class->vft[COLOR_file__String__simplify_path]))(var171) /* simplify_path on <var171:String>*/;
1962 var_try_file125 = var172;
1963 var173 = ((short int (*)(val*))(var_try_file125->class->vft[COLOR_file__String__file_exists]))(var_try_file125) /* file_exists on <var_try_file125:String>*/;
1964 if (var173){
1965 var174 = NULL;
1966 if (var_candidate106 == NULL) {
1967 var175 = 1; /* is null */
1968 } else {
1969 var175 = 0; /* arg is null but recv is not */
1970 }
1971 if (var175){
1972 var_candidate106 = var_try_file125;
1973 } else {
1974 var176 = ((short int (*)(val*, val*))(var_candidate106->class->vft[COLOR_kernel__Object___33d_61d]))(var_candidate106, var_try_file125) /* != on <var_candidate106:nullable String(String)>*/;
1975 if (var176){
1976 var177 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_candidate106) /* module_absolute_path on <self:ModelBuilder>*/;
1977 var_abs_candidate178 = var177;
1978 var179 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_try_file125) /* module_absolute_path on <self:ModelBuilder>*/;
1979 var_abs_try_file180 = var179;
1980 var181 = ((short int (*)(val*, val*))(var_abs_candidate178->class->vft[COLOR_kernel__Object___33d_61d]))(var_abs_candidate178, var_abs_try_file180) /* != on <var_abs_candidate178:String>*/;
1981 if (var181){
1982 if (varonce182) {
1983 var183 = varonce182;
1984 } else {
1985 var184 = "Error: conflicting module file for ";
1986 var185 = 35;
1987 var186 = string__NativeString__to_s_with_length(var184, var185);
1988 var183 = var186;
1989 varonce182 = var183;
1990 }
1991 if (varonce187) {
1992 var188 = varonce187;
1993 } else {
1994 var189 = ": ";
1995 var190 = 2;
1996 var191 = string__NativeString__to_s_with_length(var189, var190);
1997 var188 = var191;
1998 varonce187 = var188;
1999 }
2000 if (varonce192) {
2001 var193 = varonce192;
2002 } else {
2003 var194 = " ";
2004 var195 = 1;
2005 var196 = string__NativeString__to_s_with_length(var194, var195);
2006 var193 = var196;
2007 varonce192 = var193;
2008 }
2009 var197 = NEW_array__Array(&type_array__Arraykernel__Object);
2010 { /* var197 = array_instance Array[Object] */
2011 var198 = 6;
2012 var199 = NEW_array__NativeArray(var198, &type_array__NativeArraykernel__Object);
2013 ((struct instance_array__NativeArray*)var199)->values[0] = (val*) var183;
2014 ((struct instance_array__NativeArray*)var199)->values[1] = (val*) var_name;
2015 ((struct instance_array__NativeArray*)var199)->values[2] = (val*) var188;
2016 ((struct instance_array__NativeArray*)var199)->values[3] = (val*) var_candidate106;
2017 ((struct instance_array__NativeArray*)var199)->values[4] = (val*) var193;
2018 ((struct instance_array__NativeArray*)var199)->values[5] = (val*) var_try_file125;
2019 ((void (*)(val*, val*, long))(var197->class->vft[COLOR_array__Array__with_native]))(var197, var199, var198) /* with_native on <var197:Array[Object]>*/;
2020 CHECK_NEW_array__Array(var197);
2021 }
2022 var200 = ((val* (*)(val*))(var197->class->vft[COLOR_string__Object__to_s]))(var197) /* to_s on <var197:Array[Object]>*/;
2023 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var200) /* error on <self:ModelBuilder>*/;
2024 } else {
2025 }
2026 } else {
2027 }
2028 }
2029 } else {
2030 }
2031 CONTINUE_label201: (void)0;
2032 ((void (*)(val*))(var107->class->vft[COLOR_abstract_collection__Iterator__next]))(var107) /* next on <var107:Iterator[nullable Object]>*/;
2033 }
2034 BREAK_label201: (void)0;
2035 var202 = NULL;
2036 if (var_candidate106 == NULL) {
2037 var203 = 1; /* is null */
2038 } else {
2039 var203 = 0; /* arg is null but recv is not */
2040 }
2041 if (var203){
2042 var204 = NULL;
2043 if (var_origmmodule == NULL) {
2044 var205 = 0; /* is null */
2045 } else {
2046 var205 = 1; /* arg is null and recv is not */
2047 }
2048 if (var205){
2049 if (varonce206) {
2050 var207 = varonce206;
2051 } else {
2052 var208 = "Error: cannot find module ";
2053 var209 = 26;
2054 var210 = string__NativeString__to_s_with_length(var208, var209);
2055 var207 = var210;
2056 varonce206 = var207;
2057 }
2058 if (varonce211) {
2059 var212 = varonce211;
2060 } else {
2061 var213 = " from ";
2062 var214 = 6;
2063 var215 = string__NativeString__to_s_with_length(var213, var214);
2064 var212 = var215;
2065 varonce211 = var212;
2066 }
2067 if (varonce216) {
2068 var217 = varonce216;
2069 } else {
2070 var218 = ". tried ";
2071 var219 = 8;
2072 var220 = string__NativeString__to_s_with_length(var218, var219);
2073 var217 = var220;
2074 varonce216 = var217;
2075 }
2076 if (varonce221) {
2077 var222 = varonce221;
2078 } else {
2079 var223 = ", ";
2080 var224 = 2;
2081 var225 = string__NativeString__to_s_with_length(var223, var224);
2082 var222 = var225;
2083 varonce221 = var222;
2084 }
2085 var226 = ((val* (*)(val*, val*))(var_tries->class->vft[COLOR_string__Collection__join]))(var_tries, var222) /* join on <var_tries:Array[String]>*/;
2086 var227 = NEW_array__Array(&type_array__Arraykernel__Object);
2087 { /* var227 = array_instance Array[Object] */
2088 var228 = 6;
2089 var229 = NEW_array__NativeArray(var228, &type_array__NativeArraykernel__Object);
2090 ((struct instance_array__NativeArray*)var229)->values[0] = (val*) var207;
2091 ((struct instance_array__NativeArray*)var229)->values[1] = (val*) var_name;
2092 ((struct instance_array__NativeArray*)var229)->values[2] = (val*) var212;
2093 ((struct instance_array__NativeArray*)var229)->values[3] = (val*) var_origmmodule;
2094 ((struct instance_array__NativeArray*)var229)->values[4] = (val*) var217;
2095 ((struct instance_array__NativeArray*)var229)->values[5] = (val*) var226;
2096 ((void (*)(val*, val*, long))(var227->class->vft[COLOR_array__Array__with_native]))(var227, var229, var228) /* with_native on <var227:Array[Object]>*/;
2097 CHECK_NEW_array__Array(var227);
2098 }
2099 var230 = ((val* (*)(val*))(var227->class->vft[COLOR_string__Object__to_s]))(var227) /* to_s on <var227:Array[Object]>*/;
2100 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var230) /* error on <self:ModelBuilder>*/;
2101 } else {
2102 if (varonce231) {
2103 var232 = varonce231;
2104 } else {
2105 var233 = "Error: cannot find module ";
2106 var234 = 26;
2107 var235 = string__NativeString__to_s_with_length(var233, var234);
2108 var232 = var235;
2109 varonce231 = var232;
2110 }
2111 if (varonce236) {
2112 var237 = varonce236;
2113 } else {
2114 var238 = ". tried ";
2115 var239 = 8;
2116 var240 = string__NativeString__to_s_with_length(var238, var239);
2117 var237 = var240;
2118 varonce236 = var237;
2119 }
2120 if (varonce241) {
2121 var242 = varonce241;
2122 } else {
2123 var243 = ", ";
2124 var244 = 2;
2125 var245 = string__NativeString__to_s_with_length(var243, var244);
2126 var242 = var245;
2127 varonce241 = var242;
2128 }
2129 var246 = ((val* (*)(val*, val*))(var_tries->class->vft[COLOR_string__Collection__join]))(var_tries, var242) /* join on <var_tries:Array[String]>*/;
2130 var247 = NEW_array__Array(&type_array__Arraykernel__Object);
2131 { /* var247 = array_instance Array[Object] */
2132 var248 = 4;
2133 var249 = NEW_array__NativeArray(var248, &type_array__NativeArraykernel__Object);
2134 ((struct instance_array__NativeArray*)var249)->values[0] = (val*) var232;
2135 ((struct instance_array__NativeArray*)var249)->values[1] = (val*) var_name;
2136 ((struct instance_array__NativeArray*)var249)->values[2] = (val*) var237;
2137 ((struct instance_array__NativeArray*)var249)->values[3] = (val*) var246;
2138 ((void (*)(val*, val*, long))(var247->class->vft[COLOR_array__Array__with_native]))(var247, var249, var248) /* with_native on <var247:Array[Object]>*/;
2139 CHECK_NEW_array__Array(var247);
2140 }
2141 var250 = ((val* (*)(val*))(var247->class->vft[COLOR_string__Object__to_s]))(var247) /* to_s on <var247:Array[Object]>*/;
2142 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var250) /* error on <self:ModelBuilder>*/;
2143 }
2144 var251 = NULL;
2145 var = var251;
2146 goto RET_LABEL;
2147 } else {
2148 }
2149 var252 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__load_module]))(self, var_mmodule, var_candidate106) /* load_module on <self:ModelBuilder>*/;
2150 var_res253 = var252;
2151 var254 = NULL;
2152 if (var_res253 == NULL) {
2153 var255 = 1; /* is null */
2154 } else {
2155 var255 = 0; /* arg is null but recv is not */
2156 }
2157 if (var255){
2158 var256 = NULL;
2159 var = var256;
2160 goto RET_LABEL;
2161 } else {
2162 }
2163 var257 = ((val* (*)(val*))(var_res253->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_res253) /* mmodule on <var_res253:nullable AModule(AModule)>*/;
2164 if (var257 == NULL) {
2165 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/modelbuilder.nit", 351);
2166 exit(1);
2167 }
2168 var = var257;
2169 goto RET_LABEL;
2170 RET_LABEL:;
2171 return var;
2172 }
2173 /* method modelbuilder#ModelBuilder#get_mmodule_by_name for (self: Object, ANode, nullable MModule, String): nullable MModule */
2174 val* VIRTUAL_modelbuilder__ModelBuilder__get_mmodule_by_name(val* self, val* p0, val* p1, val* p2) {
2175 val* var /* : nullable MModule */;
2176 val* var1 /* : nullable MModule */;
2177 var1 = modelbuilder__ModelBuilder__get_mmodule_by_name(self, p0, p1, p2);
2178 var = var1;
2179 RET_LABEL:;
2180 return var;
2181 }
2182 /* method modelbuilder#ModelBuilder#module_absolute_path for (self: ModelBuilder, String): String */
2183 val* modelbuilder__ModelBuilder__module_absolute_path(val* self, val* p0) {
2184 val* var /* : String */;
2185 val* var_path /* var path: String */;
2186 static val* varonce;
2187 val* var1 /* : String */;
2188 char* var2 /* : NativeString */;
2189 long var3 /* : Int */;
2190 val* var4 /* : String */;
2191 short int var5 /* : Bool */;
2192 val* var6 /* : String */;
2193 val* var7 /* : String */;
2194 val* var8 /* : String */;
2195 var_path = p0;
2196 if (varonce) {
2197 var1 = varonce;
2198 } else {
2199 var2 = "..";
2200 var3 = 2;
2201 var4 = string__NativeString__to_s_with_length(var2, var3);
2202 var1 = var4;
2203 varonce = var1;
2204 }
2205 var5 = ((short int (*)(val*, val*))(var_path->class->vft[COLOR_string__AbstractString__has_prefix]))(var_path, var1) /* has_prefix on <var_path:String>*/;
2206 if (var5){
2207 var6 = ((val* (*)(val*))(self->class->vft[COLOR_file__Object__getcwd]))(self) /* getcwd on <self:ModelBuilder>*/;
2208 var7 = ((val* (*)(val*, val*))(var6->class->vft[COLOR_file__String__join_path]))(var6, var_path) /* join_path on <var6:String>*/;
2209 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_file__String__simplify_path]))(var7) /* simplify_path on <var7:String>*/;
2210 var = var8;
2211 goto RET_LABEL;
2212 } else {
2213 }
2214 var = var_path;
2215 goto RET_LABEL;
2216 RET_LABEL:;
2217 return var;
2218 }
2219 /* method modelbuilder#ModelBuilder#module_absolute_path for (self: Object, String): String */
2220 val* VIRTUAL_modelbuilder__ModelBuilder__module_absolute_path(val* self, val* p0) {
2221 val* var /* : String */;
2222 val* var1 /* : String */;
2223 var1 = modelbuilder__ModelBuilder__module_absolute_path(self, p0);
2224 var = var1;
2225 RET_LABEL:;
2226 return var;
2227 }
2228 /* method modelbuilder#ModelBuilder#loaded_nmodules for (self: ModelBuilder): HashMap[String, AModule] */
2229 val* modelbuilder__ModelBuilder__loaded_nmodules(val* self) {
2230 val* var /* : HashMap[String, AModule] */;
2231 val* var1 /* : HashMap[String, AModule] */;
2232 var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dloaded_nmodules].val; /* @loaded_nmodules on <self:ModelBuilder> */
2233 if (var1 == NULL) {
2234 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @loaded_nmodules", "src/modelbuilder.nit", 362);
2235 exit(1);
2236 }
2237 var = var1;
2238 RET_LABEL:;
2239 return var;
2240 }
2241 /* method modelbuilder#ModelBuilder#loaded_nmodules for (self: Object): HashMap[String, AModule] */
2242 val* VIRTUAL_modelbuilder__ModelBuilder__loaded_nmodules(val* self) {
2243 val* var /* : HashMap[String, AModule] */;
2244 val* var1 /* : HashMap[String, AModule] */;
2245 var1 = modelbuilder__ModelBuilder__loaded_nmodules(self);
2246 var = var1;
2247 RET_LABEL:;
2248 return var;
2249 }
2250 /* method modelbuilder#ModelBuilder#loaded_nmodules= for (self: ModelBuilder, HashMap[String, AModule]) */
2251 void modelbuilder__ModelBuilder__loaded_nmodules_61d(val* self, val* p0) {
2252 self->attrs[COLOR_modelbuilder__ModelBuilder___64dloaded_nmodules].val = p0; /* @loaded_nmodules on <self:ModelBuilder> */
2253 RET_LABEL:;
2254 }
2255 /* method modelbuilder#ModelBuilder#loaded_nmodules= for (self: Object, HashMap[String, AModule]) */
2256 void VIRTUAL_modelbuilder__ModelBuilder__loaded_nmodules_61d(val* self, val* p0) {
2257 modelbuilder__ModelBuilder__loaded_nmodules_61d(self, p0);
2258 RET_LABEL:;
2259 }
2260 /* method modelbuilder#ModelBuilder#load_module for (self: ModelBuilder, nullable MModule, String): nullable AModule */
2261 val* modelbuilder__ModelBuilder__load_module(val* self, val* p0, val* p1) {
2262 val* var /* : nullable AModule */;
2263 val* var_owner /* var owner: nullable MModule */;
2264 val* var_filename /* var filename: String */;
2265 val* var1 /* : nullable String */;
2266 static val* varonce;
2267 val* var2 /* : String */;
2268 char* var3 /* : NativeString */;
2269 long var4 /* : Int */;
2270 val* var5 /* : String */;
2271 short int var6 /* : Bool */;
2272 val* var7 /* : ToolContext */;
2273 val* var8 /* : null */;
2274 static val* varonce9;
2275 val* var10 /* : String */;
2276 char* var11 /* : NativeString */;
2277 long var12 /* : Int */;
2278 val* var13 /* : String */;
2279 static val* varonce14;
2280 val* var15 /* : String */;
2281 char* var16 /* : NativeString */;
2282 long var17 /* : Int */;
2283 val* var18 /* : String */;
2284 val* var19 /* : Array[Object] */;
2285 long var20 /* : Int */;
2286 val* var21 /* : NativeArray[Object] */;
2287 val* var22 /* : String */;
2288 val* var23 /* : null */;
2289 short int var24 /* : Bool */;
2290 short int var25 /* : Bool */;
2291 val* var26 /* : ToolContext */;
2292 val* var27 /* : null */;
2293 static val* varonce28;
2294 val* var29 /* : String */;
2295 char* var30 /* : NativeString */;
2296 long var31 /* : Int */;
2297 val* var32 /* : String */;
2298 static val* varonce33;
2299 val* var34 /* : String */;
2300 char* var35 /* : NativeString */;
2301 long var36 /* : Int */;
2302 val* var37 /* : String */;
2303 val* var38 /* : Array[Object] */;
2304 long var39 /* : Int */;
2305 val* var40 /* : NativeArray[Object] */;
2306 val* var41 /* : String */;
2307 val* var42 /* : null */;
2308 val* var43 /* : String */;
2309 val* var_module_path /* var module_path: String */;
2310 val* var44 /* : HashMap[String, AModule] */;
2311 val* var45 /* : Collection[Object] */;
2312 short int var46 /* : Bool */;
2313 val* var47 /* : HashMap[String, AModule] */;
2314 val* var48 /* : nullable Object */;
2315 val* var49 /* : String */;
2316 val* var50 /* : null */;
2317 short int var51 /* : Bool */;
2318 val* var52 /* : String */;
2319 static val* varonce53;
2320 val* var54 /* : String */;
2321 char* var55 /* : NativeString */;
2322 long var56 /* : Int */;
2323 val* var57 /* : String */;
2324 val* var_x /* var x: String */;
2325 val* var58 /* : ToolContext */;
2326 static val* varonce59;
2327 val* var60 /* : String */;
2328 char* var61 /* : NativeString */;
2329 long var62 /* : Int */;
2330 val* var63 /* : String */;
2331 static val* varonce64;
2332 val* var65 /* : String */;
2333 char* var66 /* : NativeString */;
2334 long var67 /* : Int */;
2335 val* var68 /* : String */;
2336 val* var69 /* : Array[Object] */;
2337 long var70 /* : Int */;
2338 val* var71 /* : NativeArray[Object] */;
2339 val* var72 /* : String */;
2340 long var73 /* : Int */;
2341 val* var74 /* : IFStream */;
2342 val* var_file /* var file: IFStream */;
2343 val* var75 /* : Lexer */;
2344 val* var76 /* : SourceFile */;
2345 val* var_lexer /* var lexer: Lexer */;
2346 val* var77 /* : Parser */;
2347 val* var_parser /* var parser: Parser */;
2348 val* var78 /* : Start */;
2349 val* var_tree /* var tree: Start */;
2350 val* var79 /* : nullable AModule */;
2351 val* var_nmodule /* var nmodule: nullable AModule */;
2352 val* var80 /* : null */;
2353 short int var81 /* : Bool */;
2354 val* var82 /* : EOF */;
2355 val* var_neof /* var neof: EOF */;
2356 short int var83 /* : Bool */;
2357 int cltype;
2358 int idtype;
2359 val* var84 /* : String */;
2360 val* var85 /* : null */;
2361 static val* varonce86;
2362 val* var87 /* : String */;
2363 char* var88 /* : NativeString */;
2364 long var89 /* : Int */;
2365 val* var90 /* : String */;
2366 val* var91 /* : String */;
2367 val* var_mod_name /* var mod_name: String */;
2368 val* var92 /* : nullable AModuledecl */;
2369 val* var_decl /* var decl: nullable AModuledecl */;
2370 val* var93 /* : null */;
2371 short int var94 /* : Bool */;
2372 val* var95 /* : AModuleName */;
2373 val* var96 /* : TId */;
2374 val* var97 /* : String */;
2375 val* var_decl_name /* var decl_name: String */;
2376 short int var98 /* : Bool */;
2377 val* var99 /* : AModuleName */;
2378 static val* varonce100;
2379 val* var101 /* : String */;
2380 char* var102 /* : NativeString */;
2381 long var103 /* : Int */;
2382 val* var104 /* : String */;
2383 static val* varonce105;
2384 val* var106 /* : String */;
2385 char* var107 /* : NativeString */;
2386 long var108 /* : Int */;
2387 val* var109 /* : String */;
2388 val* var110 /* : Array[Object] */;
2389 long var111 /* : Int */;
2390 val* var112 /* : NativeArray[Object] */;
2391 val* var113 /* : String */;
2392 val* var114 /* : MModule */;
2393 val* var115 /* : Model */;
2394 val* var116 /* : Location */;
2395 val* var_mmodule /* var mmodule: MModule */;
2396 val* var117 /* : Array[AModule] */;
2397 val* var118 /* : HashMap[MModule, AModule] */;
2398 val* var119 /* : HashMap[String, AModule] */;
2399 var_owner = p0;
2400 var_filename = p1;
2401 var1 = ((val* (*)(val*))(var_filename->class->vft[COLOR_file__String__file_extension]))(var_filename) /* file_extension on <var_filename:String>*/;
2402 if (varonce) {
2403 var2 = varonce;
2404 } else {
2405 var3 = "nit";
2406 var4 = 3;
2407 var5 = string__NativeString__to_s_with_length(var3, var4);
2408 var2 = var5;
2409 varonce = var2;
2410 }
2411 if (var1 == NULL) {
2412 var6 = 1; /* <var2:String> cannot be null */
2413 } else {
2414 var6 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___33d_61d]))(var1, var2) /* != on <var1:nullable String>*/;
2415 }
2416 if (var6){
2417 var7 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
2418 var8 = NULL;
2419 if (varonce9) {
2420 var10 = varonce9;
2421 } else {
2422 var11 = "Error: file ";
2423 var12 = 12;
2424 var13 = string__NativeString__to_s_with_length(var11, var12);
2425 var10 = var13;
2426 varonce9 = var10;
2427 }
2428 if (varonce14) {
2429 var15 = varonce14;
2430 } else {
2431 var16 = " is not a valid nit module.";
2432 var17 = 27;
2433 var18 = string__NativeString__to_s_with_length(var16, var17);
2434 var15 = var18;
2435 varonce14 = var15;
2436 }
2437 var19 = NEW_array__Array(&type_array__Arraykernel__Object);
2438 { /* var19 = array_instance Array[Object] */
2439 var20 = 3;
2440 var21 = NEW_array__NativeArray(var20, &type_array__NativeArraykernel__Object);
2441 ((struct instance_array__NativeArray*)var21)->values[0] = (val*) var10;
2442 ((struct instance_array__NativeArray*)var21)->values[1] = (val*) var_filename;
2443 ((struct instance_array__NativeArray*)var21)->values[2] = (val*) var15;
2444 ((void (*)(val*, val*, long))(var19->class->vft[COLOR_array__Array__with_native]))(var19, var21, var20) /* with_native on <var19:Array[Object]>*/;
2445 CHECK_NEW_array__Array(var19);
2446 }
2447 var22 = ((val* (*)(val*))(var19->class->vft[COLOR_string__Object__to_s]))(var19) /* to_s on <var19:Array[Object]>*/;
2448 ((void (*)(val*, val*, val*))(var7->class->vft[COLOR_toolcontext__ToolContext__error]))(var7, var8, var22) /* error on <var7:ToolContext>*/;
2449 var23 = NULL;
2450 var = var23;
2451 goto RET_LABEL;
2452 } else {
2453 }
2454 var24 = ((short int (*)(val*))(var_filename->class->vft[COLOR_file__String__file_exists]))(var_filename) /* file_exists on <var_filename:String>*/;
2455 var25 = !var24;
2456 if (var25){
2457 var26 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
2458 var27 = NULL;
2459 if (varonce28) {
2460 var29 = varonce28;
2461 } else {
2462 var30 = "Error: file ";
2463 var31 = 12;
2464 var32 = string__NativeString__to_s_with_length(var30, var31);
2465 var29 = var32;
2466 varonce28 = var29;
2467 }
2468 if (varonce33) {
2469 var34 = varonce33;
2470 } else {
2471 var35 = " not found.";
2472 var36 = 11;
2473 var37 = string__NativeString__to_s_with_length(var35, var36);
2474 var34 = var37;
2475 varonce33 = var34;
2476 }
2477 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
2478 { /* var38 = array_instance Array[Object] */
2479 var39 = 3;
2480 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
2481 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var29;
2482 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_filename;
2483 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var34;
2484 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
2485 CHECK_NEW_array__Array(var38);
2486 }
2487 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
2488 ((void (*)(val*, val*, val*))(var26->class->vft[COLOR_toolcontext__ToolContext__error]))(var26, var27, var41) /* error on <var26:ToolContext>*/;
2489 var42 = NULL;
2490 var = var42;
2491 goto RET_LABEL;
2492 } else {
2493 }
2494 var43 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_filename) /* module_absolute_path on <self:ModelBuilder>*/;
2495 var_module_path = var43;
2496 var44 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__loaded_nmodules]))(self) /* loaded_nmodules on <self:ModelBuilder>*/;
2497 var45 = ((val* (*)(val*))(var44->class->vft[COLOR_abstract_collection__MapRead__keys]))(var44) /* keys on <var44:HashMap[String, AModule]>*/;
2498 var46 = ((short int (*)(val*, val*))(var45->class->vft[COLOR_abstract_collection__Collection__has]))(var45, var_module_path) /* has on <var45:Collection[Object](HashMapKeys[String, AModule])>*/;
2499 if (var46){
2500 var47 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__loaded_nmodules]))(self) /* loaded_nmodules on <self:ModelBuilder>*/;
2501 var48 = ((val* (*)(val*, val*))(var47->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var47, var_module_path) /* [] on <var47:HashMap[String, AModule]>*/;
2502 var = var48;
2503 goto RET_LABEL;
2504 } else {
2505 }
2506 var50 = NULL;
2507 if (var_owner == NULL) {
2508 var51 = 0; /* is null */
2509 } else {
2510 var51 = 1; /* arg is null and recv is not */
2511 }
2512 if (var51){
2513 var52 = ((val* (*)(val*))(var_owner->class->vft[COLOR_string__Object__to_s]))(var_owner) /* to_s on <var_owner:nullable MModule(MModule)>*/;
2514 var49 = var52;
2515 } else {
2516 if (varonce53) {
2517 var54 = varonce53;
2518 } else {
2519 var55 = ".";
2520 var56 = 1;
2521 var57 = string__NativeString__to_s_with_length(var55, var56);
2522 var54 = var57;
2523 varonce53 = var54;
2524 }
2525 var49 = var54;
2526 }
2527 var_x = var49;
2528 var58 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
2529 if (varonce59) {
2530 var60 = varonce59;
2531 } else {
2532 var61 = "load module ";
2533 var62 = 12;
2534 var63 = string__NativeString__to_s_with_length(var61, var62);
2535 var60 = var63;
2536 varonce59 = var60;
2537 }
2538 if (varonce64) {
2539 var65 = varonce64;
2540 } else {
2541 var66 = " in ";
2542 var67 = 4;
2543 var68 = string__NativeString__to_s_with_length(var66, var67);
2544 var65 = var68;
2545 varonce64 = var65;
2546 }
2547 var69 = NEW_array__Array(&type_array__Arraykernel__Object);
2548 { /* var69 = array_instance Array[Object] */
2549 var70 = 4;
2550 var71 = NEW_array__NativeArray(var70, &type_array__NativeArraykernel__Object);
2551 ((struct instance_array__NativeArray*)var71)->values[0] = (val*) var60;
2552 ((struct instance_array__NativeArray*)var71)->values[1] = (val*) var_filename;
2553 ((struct instance_array__NativeArray*)var71)->values[2] = (val*) var65;
2554 ((struct instance_array__NativeArray*)var71)->values[3] = (val*) var_x;
2555 ((void (*)(val*, val*, long))(var69->class->vft[COLOR_array__Array__with_native]))(var69, var71, var70) /* with_native on <var69:Array[Object]>*/;
2556 CHECK_NEW_array__Array(var69);
2557 }
2558 var72 = ((val* (*)(val*))(var69->class->vft[COLOR_string__Object__to_s]))(var69) /* to_s on <var69:Array[Object]>*/;
2559 var73 = 2;
2560 ((void (*)(val*, val*, long))(var58->class->vft[COLOR_toolcontext__ToolContext__info]))(var58, var72, var73) /* info on <var58:ToolContext>*/;
2561 var74 = NEW_file__IFStream(&type_file__IFStream);
2562 ((void (*)(val*, val*))(var74->class->vft[COLOR_file__IFStream__open]))(var74, var_filename) /* open on <var74:IFStream>*/;
2563 CHECK_NEW_file__IFStream(var74);
2564 var_file = var74;
2565 var75 = NEW_lexer__Lexer(&type_lexer__Lexer);
2566 var76 = NEW_location__SourceFile(&type_location__SourceFile);
2567 ((void (*)(val*, val*, val*))(var76->class->vft[COLOR_location__SourceFile__init]))(var76, var_filename, var_file) /* init on <var76:SourceFile>*/;
2568 CHECK_NEW_location__SourceFile(var76);
2569 ((void (*)(val*, val*))(var75->class->vft[COLOR_lexer__Lexer__init]))(var75, var76) /* init on <var75:Lexer>*/;
2570 CHECK_NEW_lexer__Lexer(var75);
2571 var_lexer = var75;
2572 var77 = NEW_parser__Parser(&type_parser__Parser);
2573 ((void (*)(val*, val*))(var77->class->vft[COLOR_parser__Parser__init]))(var77, var_lexer) /* init on <var77:Parser>*/;
2574 CHECK_NEW_parser__Parser(var77);
2575 var_parser = var77;
2576 var78 = ((val* (*)(val*))(var_parser->class->vft[COLOR_parser__Parser__parse]))(var_parser) /* parse on <var_parser:Parser>*/;
2577 var_tree = var78;
2578 ((void (*)(val*))(var_file->class->vft[COLOR_stream__IOS__close]))(var_file) /* close on <var_file:IFStream>*/;
2579 var79 = ((val* (*)(val*))(var_tree->class->vft[COLOR_parser_nodes__Start__n_base]))(var_tree) /* n_base on <var_tree:Start>*/;
2580 var_nmodule = var79;
2581 var80 = NULL;
2582 if (var_nmodule == NULL) {
2583 var81 = 1; /* is null */
2584 } else {
2585 var81 = 0; /* arg is null but recv is not */
2586 }
2587 if (var81){
2588 var82 = ((val* (*)(val*))(var_tree->class->vft[COLOR_parser_nodes__Start__n_eof]))(var_tree) /* n_eof on <var_tree:Start>*/;
2589 var_neof = var82;
2590 /* <var_neof:EOF> isa AError */
2591 cltype = type_parser_nodes__AError.color;
2592 idtype = type_parser_nodes__AError.id;
2593 if(cltype >= var_neof->type->table_size) {
2594 var83 = 0;
2595 } else {
2596 var83 = var_neof->type->type_table[cltype] == idtype;
2597 }
2598 if (!var83) {
2599 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/modelbuilder.nit", 398);
2600 exit(1);
2601 }
2602 var84 = ((val* (*)(val*))(var_neof->class->vft[COLOR_lexer__AError__message]))(var_neof) /* message on <var_neof:EOF(AError)>*/;
2603 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_neof, var84) /* error on <self:ModelBuilder>*/;
2604 var85 = NULL;
2605 var = var85;
2606 goto RET_LABEL;
2607 } else {
2608 }
2609 if (varonce86) {
2610 var87 = varonce86;
2611 } else {
2612 var88 = ".nit";
2613 var89 = 4;
2614 var90 = string__NativeString__to_s_with_length(var88, var89);
2615 var87 = var90;
2616 varonce86 = var87;
2617 }
2618 var91 = ((val* (*)(val*, val*))(var_filename->class->vft[COLOR_file__String__basename]))(var_filename, var87) /* basename on <var_filename:String>*/;
2619 var_mod_name = var91;
2620 var92 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_parser_nodes__AModule__n_moduledecl]))(var_nmodule) /* n_moduledecl on <var_nmodule:nullable AModule(AModule)>*/;
2621 var_decl = var92;
2622 var93 = NULL;
2623 if (var_decl == NULL) {
2624 var94 = 1; /* is null */
2625 } else {
2626 var94 = 0; /* arg is null but recv is not */
2627 }
2628 if (var94){
2629 } else {
2630 var95 = ((val* (*)(val*))(var_decl->class->vft[COLOR_parser_nodes__AModuledecl__n_name]))(var_decl) /* n_name on <var_decl:nullable AModuledecl(AModuledecl)>*/;
2631 var96 = ((val* (*)(val*))(var95->class->vft[COLOR_parser_nodes__AModuleName__n_id]))(var95) /* n_id on <var95:AModuleName>*/;
2632 var97 = ((val* (*)(val*))(var96->class->vft[COLOR_parser_nodes__Token__text]))(var96) /* text on <var96:TId>*/;
2633 var_decl_name = var97;
2634 var98 = ((short int (*)(val*, val*))(var_decl_name->class->vft[COLOR_kernel__Object___33d_61d]))(var_decl_name, var_mod_name) /* != on <var_decl_name:String>*/;
2635 if (var98){
2636 var99 = ((val* (*)(val*))(var_decl->class->vft[COLOR_parser_nodes__AModuledecl__n_name]))(var_decl) /* n_name on <var_decl:nullable AModuledecl(AModuledecl)>*/;
2637 if (varonce100) {
2638 var101 = varonce100;
2639 } else {
2640 var102 = "Error: module name missmatch; declared ";
2641 var103 = 39;
2642 var104 = string__NativeString__to_s_with_length(var102, var103);
2643 var101 = var104;
2644 varonce100 = var101;
2645 }
2646 if (varonce105) {
2647 var106 = varonce105;
2648 } else {
2649 var107 = " file named ";
2650 var108 = 12;
2651 var109 = string__NativeString__to_s_with_length(var107, var108);
2652 var106 = var109;
2653 varonce105 = var106;
2654 }
2655 var110 = NEW_array__Array(&type_array__Arraykernel__Object);
2656 { /* var110 = array_instance Array[Object] */
2657 var111 = 4;
2658 var112 = NEW_array__NativeArray(var111, &type_array__NativeArraykernel__Object);
2659 ((struct instance_array__NativeArray*)var112)->values[0] = (val*) var101;
2660 ((struct instance_array__NativeArray*)var112)->values[1] = (val*) var_decl_name;
2661 ((struct instance_array__NativeArray*)var112)->values[2] = (val*) var106;
2662 ((struct instance_array__NativeArray*)var112)->values[3] = (val*) var_mod_name;
2663 ((void (*)(val*, val*, long))(var110->class->vft[COLOR_array__Array__with_native]))(var110, var112, var111) /* with_native on <var110:Array[Object]>*/;
2664 CHECK_NEW_array__Array(var110);
2665 }
2666 var113 = ((val* (*)(val*))(var110->class->vft[COLOR_string__Object__to_s]))(var110) /* to_s on <var110:Array[Object]>*/;
2667 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var99, var113) /* error on <self:ModelBuilder>*/;
2668 } else {
2669 }
2670 }
2671 var114 = NEW_model_base__MModule(&type_model_base__MModule);
2672 var115 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
2673 var116 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_parser_nodes__ANode__location]))(var_nmodule) /* location on <var_nmodule:nullable AModule(AModule)>*/;
2674 ((void (*)(val*, val*, val*, val*, val*))(var114->class->vft[COLOR_model_base__MModule__init]))(var114, var115, var_owner, var_mod_name, var116) /* init on <var114:MModule>*/;
2675 CHECK_NEW_model_base__MModule(var114);
2676 var_mmodule = var114;
2677 ((void (*)(val*, val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule_61d]))(var_nmodule, var_mmodule) /* mmodule= on <var_nmodule:nullable AModule(AModule)>*/;
2678 var117 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__nmodules]))(self) /* nmodules on <self:ModelBuilder>*/;
2679 ((void (*)(val*, val*))(var117->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var117, var_nmodule) /* add on <var117:Array[AModule]>*/;
2680 var118 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(self) /* mmodule2nmodule on <self:ModelBuilder>*/;
2681 ((void (*)(val*, val*, val*))(var118->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var118, var_mmodule, var_nmodule) /* []= on <var118:HashMap[MModule, AModule]>*/;
2682 var119 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__loaded_nmodules]))(self) /* loaded_nmodules on <self:ModelBuilder>*/;
2683 ((void (*)(val*, val*, val*))(var119->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var119, var_module_path, var_nmodule) /* []= on <var119:HashMap[String, AModule]>*/;
2684 ((void (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__build_module_importation]))(self, var_nmodule) /* build_module_importation on <self:ModelBuilder>*/;
2685 var = var_nmodule;
2686 goto RET_LABEL;
2687 RET_LABEL:;
2688 return var;
2689 }
2690 /* method modelbuilder#ModelBuilder#load_module for (self: Object, nullable MModule, String): nullable AModule */
2691 val* VIRTUAL_modelbuilder__ModelBuilder__load_module(val* self, val* p0, val* p1) {
2692 val* var /* : nullable AModule */;
2693 val* var1 /* : nullable AModule */;
2694 var1 = modelbuilder__ModelBuilder__load_module(self, p0, p1);
2695 var = var1;
2696 RET_LABEL:;
2697 return var;
2698 }
2699 /* method modelbuilder#ModelBuilder#build_module_importation for (self: ModelBuilder, AModule) */
2700 void modelbuilder__ModelBuilder__build_module_importation(val* self, val* p0) {
2701 val* var_nmodule /* var nmodule: AModule */;
2702 short int var /* : Bool */;
2703 short int var1 /* : Bool */;
2704 val* var2 /* : nullable MModule */;
2705 val* var_mmodule /* var mmodule: MModule */;
2706 short int var3 /* : Bool */;
2707 short int var_stdimport /* var stdimport: Bool */;
2708 val* var4 /* : Array[MModule] */;
2709 val* var_imported_modules /* var imported_modules: Array[MModule] */;
2710 val* var5 /* : ANodes[AImport] */;
2711 val* var6 /* : Iterator[nullable Object] */;
2712 short int var7 /* : Bool */;
2713 val* var8 /* : nullable Object */;
2714 val* var_aimport /* var aimport: AImport */;
2715 short int var9 /* : Bool */;
2716 short int var10 /* : Bool */;
2717 int cltype;
2718 int idtype;
2719 short int var11 /* : Bool */;
2720 val* var12 /* : AModuleName */;
2721 val* var13 /* : TId */;
2722 val* var14 /* : String */;
2723 val* var_mod_name /* var mod_name: String */;
2724 val* var15 /* : AModuleName */;
2725 val* var16 /* : nullable MModule */;
2726 val* var_sup /* var sup: nullable MModule */;
2727 val* var17 /* : null */;
2728 short int var18 /* : Bool */;
2729 val* var19 /* : AVisibility */;
2730 val* var20 /* : MVisibility */;
2731 val* var_mvisibility /* var mvisibility: MVisibility */;
2732 val* var21 /* : MVisibility */;
2733 short int var22 /* : Bool */;
2734 val* var23 /* : AVisibility */;
2735 static val* varonce;
2736 val* var24 /* : String */;
2737 char* var25 /* : NativeString */;
2738 long var26 /* : Int */;
2739 val* var27 /* : String */;
2740 static val* varonce28;
2741 val* var29 /* : String */;
2742 char* var30 /* : NativeString */;
2743 long var31 /* : Int */;
2744 val* var32 /* : String */;
2745 val* var_mod_name33 /* var mod_name: String */;
2746 val* var34 /* : null */;
2747 val* var35 /* : nullable MModule */;
2748 val* var_sup36 /* var sup: nullable MModule */;
2749 val* var37 /* : null */;
2750 short int var38 /* : Bool */;
2751 val* var39 /* : MVisibility */;
2752 val* var40 /* : ToolContext */;
2753 static val* varonce41;
2754 val* var42 /* : String */;
2755 char* var43 /* : NativeString */;
2756 long var44 /* : Int */;
2757 val* var45 /* : String */;
2758 static val* varonce46;
2759 val* var47 /* : String */;
2760 char* var48 /* : NativeString */;
2761 long var49 /* : Int */;
2762 val* var50 /* : String */;
2763 val* var51 /* : String */;
2764 val* var52 /* : Array[Object] */;
2765 long var53 /* : Int */;
2766 val* var54 /* : NativeArray[Object] */;
2767 val* var55 /* : String */;
2768 long var56 /* : Int */;
2769 var_nmodule = p0;
2770 var = ((short int (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__is_importation_done]))(var_nmodule) /* is_importation_done on <var_nmodule:AModule>*/;
2771 if (var){
2772 goto RET_LABEL;
2773 } else {
2774 }
2775 var1 = 1;
2776 ((void (*)(val*, short int))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__is_importation_done_61d]))(var_nmodule, var1) /* is_importation_done= on <var_nmodule:AModule>*/;
2777 var2 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_nmodule) /* mmodule on <var_nmodule:AModule>*/;
2778 if (var2 == NULL) {
2779 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/modelbuilder.nit", 432);
2780 exit(1);
2781 }
2782 var_mmodule = var2;
2783 var3 = 1;
2784 var_stdimport = var3;
2785 var4 = NEW_array__Array(&type_array__Arraymodel_base__MModule);
2786 ((void (*)(val*))(var4->class->vft[COLOR_array__Array__init]))(var4) /* init on <var4:Array[MModule]>*/;
2787 CHECK_NEW_array__Array(var4);
2788 var_imported_modules = var4;
2789 var5 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_parser_nodes__AModule__n_imports]))(var_nmodule) /* n_imports on <var_nmodule:AModule>*/;
2790 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__iterator]))(var5) /* iterator on <var5:ANodes[AImport]>*/;
2791 for(;;) {
2792 var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[nullable Object]>*/;
2793 if(!var7) break;
2794 var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[nullable Object]>*/;
2795 var_aimport = var8;
2796 var9 = 0;
2797 var_stdimport = var9;
2798 /* <var_aimport:AImport> isa AStdImport */
2799 cltype = type_parser_nodes__AStdImport.color;
2800 idtype = type_parser_nodes__AStdImport.id;
2801 if(cltype >= var_aimport->type->table_size) {
2802 var10 = 0;
2803 } else {
2804 var10 = var_aimport->type->type_table[cltype] == idtype;
2805 }
2806 var11 = !var10;
2807 if (var11){
2808 goto CONTINUE_label;
2809 } else {
2810 }
2811 var12 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_name]))(var_aimport) /* n_name on <var_aimport:AImport(AStdImport)>*/;
2812 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_parser_nodes__AModuleName__n_id]))(var12) /* n_id on <var12:AModuleName>*/;
2813 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_parser_nodes__Token__text]))(var13) /* text on <var13:TId>*/;
2814 var_mod_name = var14;
2815 var15 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_name]))(var_aimport) /* n_name on <var_aimport:AImport(AStdImport)>*/;
2816 var16 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__get_mmodule_by_name]))(self, var15, var_mmodule, var_mod_name) /* get_mmodule_by_name on <self:ModelBuilder>*/;
2817 var_sup = var16;
2818 var17 = NULL;
2819 if (var_sup == NULL) {
2820 var18 = 1; /* is null */
2821 } else {
2822 var18 = 0; /* arg is null but recv is not */
2823 }
2824 if (var18){
2825 goto CONTINUE_label;
2826 } else {
2827 }
2828 ((void (*)(val*, val*))(var_aimport->class->vft[COLOR_modelbuilder__AStdImport__mmodule_61d]))(var_aimport, var_sup) /* mmodule= on <var_aimport:AImport(AStdImport)>*/;
2829 ((void (*)(val*, val*))(var_imported_modules->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_imported_modules, var_sup) /* add on <var_imported_modules:Array[MModule]>*/;
2830 var19 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_visibility]))(var_aimport) /* n_visibility on <var_aimport:AImport(AStdImport)>*/;
2831 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_modelbuilder__AVisibility__mvisibility]))(var19) /* mvisibility on <var19:AVisibility>*/;
2832 var_mvisibility = var20;
2833 var21 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__protected_visibility]))(self) /* protected_visibility on <self:ModelBuilder>*/;
2834 var22 = ((short int (*)(val*, val*))(var_mvisibility->class->vft[COLOR_kernel__Object___61d_61d]))(var_mvisibility, var21) /* == on <var_mvisibility:MVisibility>*/;
2835 if (var22){
2836 var23 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_visibility]))(var_aimport) /* n_visibility on <var_aimport:AImport(AStdImport)>*/;
2837 if (varonce) {
2838 var24 = varonce;
2839 } else {
2840 var25 = "Error: only properties can be protected.";
2841 var26 = 40;
2842 var27 = string__NativeString__to_s_with_length(var25, var26);
2843 var24 = var27;
2844 varonce = var24;
2845 }
2846 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var23, var24) /* error on <self:ModelBuilder>*/;
2847 goto RET_LABEL;
2848 } else {
2849 }
2850 ((void (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_model_base__MModule__set_visibility_for]))(var_mmodule, var_sup, var_mvisibility) /* set_visibility_for on <var_mmodule:MModule>*/;
2851 CONTINUE_label: (void)0;
2852 ((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
2853 }
2854 BREAK_label: (void)0;
2855 if (var_stdimport){
2856 if (varonce28) {
2857 var29 = varonce28;
2858 } else {
2859 var30 = "standard";
2860 var31 = 8;
2861 var32 = string__NativeString__to_s_with_length(var30, var31);
2862 var29 = var32;
2863 varonce28 = var29;
2864 }
2865 var_mod_name33 = var29;
2866 var34 = NULL;
2867 var35 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__get_mmodule_by_name]))(self, var_nmodule, var34, var_mod_name33) /* get_mmodule_by_name on <self:ModelBuilder>*/;
2868 var_sup36 = var35;
2869 var37 = NULL;
2870 if (var_sup36 == NULL) {
2871 var38 = 0; /* is null */
2872 } else {
2873 var38 = 1; /* arg is null and recv is not */
2874 }
2875 if (var38){
2876 ((void (*)(val*, val*))(var_imported_modules->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_imported_modules, var_sup36) /* add on <var_imported_modules:Array[MModule]>*/;
2877 var39 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__public_visibility]))(self) /* public_visibility on <self:ModelBuilder>*/;
2878 ((void (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_model_base__MModule__set_visibility_for]))(var_mmodule, var_sup36, var39) /* set_visibility_for on <var_mmodule:MModule>*/;
2879 } else {
2880 }
2881 } else {
2882 }
2883 var40 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
2884 if (varonce41) {
2885 var42 = varonce41;
2886 } else {
2887 var43 = " imports ";
2888 var44 = 9;
2889 var45 = string__NativeString__to_s_with_length(var43, var44);
2890 var42 = var45;
2891 varonce41 = var42;
2892 }
2893 if (varonce46) {
2894 var47 = varonce46;
2895 } else {
2896 var48 = ", ";
2897 var49 = 2;
2898 var50 = string__NativeString__to_s_with_length(var48, var49);
2899 var47 = var50;
2900 varonce46 = var47;
2901 }
2902 var51 = ((val* (*)(val*, val*))(var_imported_modules->class->vft[COLOR_string__Collection__join]))(var_imported_modules, var47) /* join on <var_imported_modules:Array[MModule]>*/;
2903 var52 = NEW_array__Array(&type_array__Arraykernel__Object);
2904 { /* var52 = array_instance Array[Object] */
2905 var53 = 3;
2906 var54 = NEW_array__NativeArray(var53, &type_array__NativeArraykernel__Object);
2907 ((struct instance_array__NativeArray*)var54)->values[0] = (val*) var_mmodule;
2908 ((struct instance_array__NativeArray*)var54)->values[1] = (val*) var42;
2909 ((struct instance_array__NativeArray*)var54)->values[2] = (val*) var51;
2910 ((void (*)(val*, val*, long))(var52->class->vft[COLOR_array__Array__with_native]))(var52, var54, var53) /* with_native on <var52:Array[Object]>*/;
2911 CHECK_NEW_array__Array(var52);
2912 }
2913 var55 = ((val* (*)(val*))(var52->class->vft[COLOR_string__Object__to_s]))(var52) /* to_s on <var52:Array[Object]>*/;
2914 var56 = 3;
2915 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_toolcontext__ToolContext__info]))(var40, var55, var56) /* info on <var40:ToolContext>*/;
2916 ((void (*)(val*, val*))(var_mmodule->class->vft[COLOR_model_base__MModule__set_imported_mmodules]))(var_mmodule, var_imported_modules) /* set_imported_mmodules on <var_mmodule:MModule>*/;
2917 RET_LABEL:;
2918 }
2919 /* method modelbuilder#ModelBuilder#build_module_importation for (self: Object, AModule) */
2920 void VIRTUAL_modelbuilder__ModelBuilder__build_module_importation(val* self, val* p0) {
2921 modelbuilder__ModelBuilder__build_module_importation(self, p0);
2922 RET_LABEL:;
2923 }
2924 /* method modelbuilder#ModelBuilder#nmodules for (self: ModelBuilder): Array[AModule] */
2925 val* modelbuilder__ModelBuilder__nmodules(val* self) {
2926 val* var /* : Array[AModule] */;
2927 val* var1 /* : Array[AModule] */;
2928 var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dnmodules].val; /* @nmodules on <self:ModelBuilder> */
2929 if (var1 == NULL) {
2930 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @nmodules", "src/modelbuilder.nit", 464);
2931 exit(1);
2932 }
2933 var = var1;
2934 RET_LABEL:;
2935 return var;
2936 }
2937 /* method modelbuilder#ModelBuilder#nmodules for (self: Object): Array[AModule] */
2938 val* VIRTUAL_modelbuilder__ModelBuilder__nmodules(val* self) {
2939 val* var /* : Array[AModule] */;
2940 val* var1 /* : Array[AModule] */;
2941 var1 = modelbuilder__ModelBuilder__nmodules(self);
2942 var = var1;
2943 RET_LABEL:;
2944 return var;
2945 }
2946 /* method modelbuilder#ModelBuilder#nmodules= for (self: ModelBuilder, Array[AModule]) */
2947 void modelbuilder__ModelBuilder__nmodules_61d(val* self, val* p0) {
2948 self->attrs[COLOR_modelbuilder__ModelBuilder___64dnmodules].val = p0; /* @nmodules on <self:ModelBuilder> */
2949 RET_LABEL:;
2950 }
2951 /* method modelbuilder#ModelBuilder#nmodules= for (self: Object, Array[AModule]) */
2952 void VIRTUAL_modelbuilder__ModelBuilder__nmodules_61d(val* self, val* p0) {
2953 modelbuilder__ModelBuilder__nmodules_61d(self, p0);
2954 RET_LABEL:;
2955 }
2956 /* method modelbuilder#ModelBuilder#mmodule2nmodule for (self: ModelBuilder): HashMap[MModule, AModule] */
2957 val* modelbuilder__ModelBuilder__mmodule2nmodule(val* self) {
2958 val* var /* : HashMap[MModule, AModule] */;
2959 val* var1 /* : HashMap[MModule, AModule] */;
2960 var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dmmodule2nmodule].val; /* @mmodule2nmodule on <self:ModelBuilder> */
2961 if (var1 == NULL) {
2962 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule2nmodule", "src/modelbuilder.nit", 467);
2963 exit(1);
2964 }
2965 var = var1;
2966 RET_LABEL:;
2967 return var;
2968 }
2969 /* method modelbuilder#ModelBuilder#mmodule2nmodule for (self: Object): HashMap[MModule, AModule] */
2970 val* VIRTUAL_modelbuilder__ModelBuilder__mmodule2nmodule(val* self) {
2971 val* var /* : HashMap[MModule, AModule] */;
2972 val* var1 /* : HashMap[MModule, AModule] */;
2973 var1 = modelbuilder__ModelBuilder__mmodule2nmodule(self);
2974 var = var1;
2975 RET_LABEL:;
2976 return var;
2977 }
2978 /* method modelbuilder#ModelBuilder#mmodule2nmodule= for (self: ModelBuilder, HashMap[MModule, AModule]) */
2979 void modelbuilder__ModelBuilder__mmodule2nmodule_61d(val* self, val* p0) {
2980 self->attrs[COLOR_modelbuilder__ModelBuilder___64dmmodule2nmodule].val = p0; /* @mmodule2nmodule on <self:ModelBuilder> */
2981 RET_LABEL:;
2982 }
2983 /* method modelbuilder#ModelBuilder#mmodule2nmodule= for (self: Object, HashMap[MModule, AModule]) */
2984 void VIRTUAL_modelbuilder__ModelBuilder__mmodule2nmodule_61d(val* self, val* p0) {
2985 modelbuilder__ModelBuilder__mmodule2nmodule_61d(self, p0);
2986 RET_LABEL:;
2987 }
2988 /* method modelbuilder#ModelBuilder#error for (self: ModelBuilder, ANode, String) */
2989 void modelbuilder__ModelBuilder__error(val* self, val* p0, val* p1) {
2990 val* var_n /* var n: ANode */;
2991 val* var_text /* var text: String */;
2992 val* var /* : ToolContext */;
2993 val* var1 /* : Location */;
2994 var_n = p0;
2995 var_text = p1;
2996 var = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
2997 var1 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:ANode>*/;
2998 ((void (*)(val*, val*, val*))(var->class->vft[COLOR_toolcontext__ToolContext__error]))(var, var1, var_text) /* error on <var:ToolContext>*/;
2999 RET_LABEL:;
3000 }
3001 /* method modelbuilder#ModelBuilder#error for (self: Object, ANode, String) */
3002 void VIRTUAL_modelbuilder__ModelBuilder__error(val* self, val* p0, val* p1) {
3003 modelbuilder__ModelBuilder__error(self, p0, p1);
3004 RET_LABEL:;
3005 }
3006 /* method modelbuilder#ModelBuilder#warning for (self: ModelBuilder, ANode, String) */
3007 void modelbuilder__ModelBuilder__warning(val* self, val* p0, val* p1) {
3008 val* var_n /* var n: ANode */;
3009 val* var_text /* var text: String */;
3010 val* var /* : ToolContext */;
3011 val* var1 /* : Location */;
3012 var_n = p0;
3013 var_text = p1;
3014 var = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
3015 var1 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:ANode>*/;
3016 ((void (*)(val*, val*, val*))(var->class->vft[COLOR_toolcontext__ToolContext__warning]))(var, var1, var_text) /* warning on <var:ToolContext>*/;
3017 RET_LABEL:;
3018 }
3019 /* method modelbuilder#ModelBuilder#warning for (self: Object, ANode, String) */
3020 void VIRTUAL_modelbuilder__ModelBuilder__warning(val* self, val* p0, val* p1) {
3021 modelbuilder__ModelBuilder__warning(self, p0, p1);
3022 RET_LABEL:;
3023 }
3024 /* method modelbuilder#ModelBuilder#force_get_primitive_method for (self: ModelBuilder, ANode, String, MClass, MModule): MMethod */
3025 val* modelbuilder__ModelBuilder__force_get_primitive_method(val* self, val* p0, val* p1, val* p2, val* p3) {
3026 val* var /* : MMethod */;
3027 val* var_n /* var n: ANode */;
3028 val* var_name /* var name: String */;
3029 val* var_recv /* var recv: MClass */;
3030 val* var_mmodule /* var mmodule: MModule */;
3031 val* var1 /* : nullable MMethod */;
3032 val* var_res /* var res: nullable MMethod */;
3033 val* var2 /* : null */;
3034 short int var3 /* : Bool */;
3035 val* var4 /* : ToolContext */;
3036 val* var5 /* : Location */;
3037 static val* varonce;
3038 val* var6 /* : String */;
3039 char* var7 /* : NativeString */;
3040 long var8 /* : Int */;
3041 val* var9 /* : String */;
3042 static val* varonce10;
3043 val* var11 /* : String */;
3044 char* var12 /* : NativeString */;
3045 long var13 /* : Int */;
3046 val* var14 /* : String */;
3047 static val* varonce15;
3048 val* var16 /* : String */;
3049 char* var17 /* : NativeString */;
3050 long var18 /* : Int */;
3051 val* var19 /* : String */;
3052 val* var20 /* : Array[Object] */;
3053 long var21 /* : Int */;
3054 val* var22 /* : NativeArray[Object] */;
3055 val* var23 /* : String */;
3056 var_n = p0;
3057 var_name = p1;
3058 var_recv = p2;
3059 var_mmodule = p3;
3060 var1 = ((val* (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_model__MModule__try_get_primitive_method]))(var_mmodule, var_name, var_recv) /* try_get_primitive_method on <var_mmodule:MModule>*/;
3061 var_res = var1;
3062 var2 = NULL;
3063 if (var_res == NULL) {
3064 var3 = 1; /* is null */
3065 } else {
3066 var3 = 0; /* arg is null but recv is not */
3067 }
3068 if (var3){
3069 var4 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
3070 var5 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:ANode>*/;
3071 if (varonce) {
3072 var6 = varonce;
3073 } else {
3074 var7 = "Fatal Error: ";
3075 var8 = 13;
3076 var9 = string__NativeString__to_s_with_length(var7, var8);
3077 var6 = var9;
3078 varonce = var6;
3079 }
3080 if (varonce10) {
3081 var11 = varonce10;
3082 } else {
3083 var12 = " must have a property named ";
3084 var13 = 28;
3085 var14 = string__NativeString__to_s_with_length(var12, var13);
3086 var11 = var14;
3087 varonce10 = var11;
3088 }
3089 if (varonce15) {
3090 var16 = varonce15;
3091 } else {
3092 var17 = ".";
3093 var18 = 1;
3094 var19 = string__NativeString__to_s_with_length(var17, var18);
3095 var16 = var19;
3096 varonce15 = var16;
3097 }
3098 var20 = NEW_array__Array(&type_array__Arraykernel__Object);
3099 { /* var20 = array_instance Array[Object] */
3100 var21 = 5;
3101 var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
3102 ((struct instance_array__NativeArray*)var22)->values[0] = (val*) var6;
3103 ((struct instance_array__NativeArray*)var22)->values[1] = (val*) var_recv;
3104 ((struct instance_array__NativeArray*)var22)->values[2] = (val*) var11;
3105 ((struct instance_array__NativeArray*)var22)->values[3] = (val*) var_name;
3106 ((struct instance_array__NativeArray*)var22)->values[4] = (val*) var16;
3107 ((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
3108 CHECK_NEW_array__Array(var20);
3109 }
3110 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
3111 ((void (*)(val*, val*, val*))(var4->class->vft[COLOR_toolcontext__ToolContext__fatal_error]))(var4, var5, var23) /* fatal_error on <var4:ToolContext>*/;
3112 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "src/modelbuilder.nit", 491);
3113 exit(1);
3114 } else {
3115 }
3116 var = var_res;
3117 goto RET_LABEL;
3118 RET_LABEL:;
3119 return var;
3120 }
3121 /* method modelbuilder#ModelBuilder#force_get_primitive_method for (self: Object, ANode, String, MClass, MModule): MMethod */
3122 val* VIRTUAL_modelbuilder__ModelBuilder__force_get_primitive_method(val* self, val* p0, val* p1, val* p2, val* p3) {
3123 val* var /* : MMethod */;
3124 val* var1 /* : MMethod */;
3125 var1 = modelbuilder__ModelBuilder__force_get_primitive_method(self, p0, p1, p2, p3);
3126 var = var1;
3127 RET_LABEL:;
3128 return var;
3129 }
3130 /* method modelbuilder#AStdImport#mmodule for (self: AStdImport): nullable MModule */
3131 val* modelbuilder__AStdImport__mmodule(val* self) {
3132 val* var /* : nullable MModule */;
3133 val* var1 /* : nullable MModule */;
3134 var1 = self->attrs[COLOR_modelbuilder__AStdImport___64dmmodule].val; /* @mmodule on <self:AStdImport> */
3135 var = var1;
3136 RET_LABEL:;
3137 return var;
3138 }
3139 /* method modelbuilder#AStdImport#mmodule for (self: Object): nullable MModule */
3140 val* VIRTUAL_modelbuilder__AStdImport__mmodule(val* self) {
3141 val* var /* : nullable MModule */;
3142 val* var1 /* : nullable MModule */;
3143 var1 = modelbuilder__AStdImport__mmodule(self);
3144 var = var1;
3145 RET_LABEL:;
3146 return var;
3147 }
3148 /* method modelbuilder#AStdImport#mmodule= for (self: AStdImport, nullable MModule) */
3149 void modelbuilder__AStdImport__mmodule_61d(val* self, val* p0) {
3150 self->attrs[COLOR_modelbuilder__AStdImport___64dmmodule].val = p0; /* @mmodule on <self:AStdImport> */
3151 RET_LABEL:;
3152 }
3153 /* method modelbuilder#AStdImport#mmodule= for (self: Object, nullable MModule) */
3154 void VIRTUAL_modelbuilder__AStdImport__mmodule_61d(val* self, val* p0) {
3155 modelbuilder__AStdImport__mmodule_61d(self, p0);
3156 RET_LABEL:;
3157 }
3158 /* method modelbuilder#AModule#mmodule for (self: AModule): nullable MModule */
3159 val* modelbuilder__AModule__mmodule(val* self) {
3160 val* var /* : nullable MModule */;
3161 val* var1 /* : nullable MModule */;
3162 var1 = self->attrs[COLOR_modelbuilder__AModule___64dmmodule].val; /* @mmodule on <self:AModule> */
3163 var = var1;
3164 RET_LABEL:;
3165 return var;
3166 }
3167 /* method modelbuilder#AModule#mmodule for (self: Object): nullable MModule */
3168 val* VIRTUAL_modelbuilder__AModule__mmodule(val* self) {
3169 val* var /* : nullable MModule */;
3170 val* var1 /* : nullable MModule */;
3171 var1 = modelbuilder__AModule__mmodule(self);
3172 var = var1;
3173 RET_LABEL:;
3174 return var;
3175 }
3176 /* method modelbuilder#AModule#mmodule= for (self: AModule, nullable MModule) */
3177 void modelbuilder__AModule__mmodule_61d(val* self, val* p0) {
3178 self->attrs[COLOR_modelbuilder__AModule___64dmmodule].val = p0; /* @mmodule on <self:AModule> */
3179 RET_LABEL:;
3180 }
3181 /* method modelbuilder#AModule#mmodule= for (self: Object, nullable MModule) */
3182 void VIRTUAL_modelbuilder__AModule__mmodule_61d(val* self, val* p0) {
3183 modelbuilder__AModule__mmodule_61d(self, p0);
3184 RET_LABEL:;
3185 }
3186 /* method modelbuilder#AModule#is_importation_done for (self: AModule): Bool */
3187 short int modelbuilder__AModule__is_importation_done(val* self) {
3188 short int var /* : Bool */;
3189 short int var1 /* : Bool */;
3190 var1 = self->attrs[COLOR_modelbuilder__AModule___64dis_importation_done].s; /* @is_importation_done on <self:AModule> */
3191 var = var1;
3192 RET_LABEL:;
3193 return var;
3194 }
3195 /* method modelbuilder#AModule#is_importation_done for (self: Object): Bool */
3196 short int VIRTUAL_modelbuilder__AModule__is_importation_done(val* self) {
3197 short int var /* : Bool */;
3198 short int var1 /* : Bool */;
3199 var1 = modelbuilder__AModule__is_importation_done(self);
3200 var = var1;
3201 RET_LABEL:;
3202 return var;
3203 }
3204 /* method modelbuilder#AModule#is_importation_done= for (self: AModule, Bool) */
3205 void modelbuilder__AModule__is_importation_done_61d(val* self, short int p0) {
3206 self->attrs[COLOR_modelbuilder__AModule___64dis_importation_done].s = p0; /* @is_importation_done on <self:AModule> */
3207 RET_LABEL:;
3208 }
3209 /* method modelbuilder#AModule#is_importation_done= for (self: Object, Bool) */
3210 void VIRTUAL_modelbuilder__AModule__is_importation_done_61d(val* self, short int p0) {
3211 modelbuilder__AModule__is_importation_done_61d(self, p0);
3212 RET_LABEL:;
3213 }
3214 /* method modelbuilder#AVisibility#mvisibility for (self: AVisibility): MVisibility */
3215 val* modelbuilder__AVisibility__mvisibility(val* self) {
3216 val* var /* : MVisibility */;
3217 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/modelbuilder.nit", 510);
3218 exit(1);
3219 RET_LABEL:;
3220 return var;
3221 }
3222 /* method modelbuilder#AVisibility#mvisibility for (self: Object): MVisibility */
3223 val* VIRTUAL_modelbuilder__AVisibility__mvisibility(val* self) {
3224 val* var /* : MVisibility */;
3225 val* var1 /* : MVisibility */;
3226 var1 = modelbuilder__AVisibility__mvisibility(self);
3227 var = var1;
3228 RET_LABEL:;
3229 return var;
3230 }
3231 /* method modelbuilder#AIntrudeVisibility#mvisibility for (self: AIntrudeVisibility): MVisibility */
3232 val* modelbuilder__AIntrudeVisibility__mvisibility(val* self) {
3233 val* var /* : MVisibility */;
3234 val* var1 /* : MVisibility */;
3235 var1 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__intrude_visibility]))(self) /* intrude_visibility on <self:AIntrudeVisibility>*/;
3236 var = var1;
3237 goto RET_LABEL;
3238 RET_LABEL:;
3239 return var;
3240 }
3241 /* method modelbuilder#AIntrudeVisibility#mvisibility for (self: Object): MVisibility */
3242 val* VIRTUAL_modelbuilder__AIntrudeVisibility__mvisibility(val* self) {
3243 val* var /* : MVisibility */;
3244 val* var1 /* : MVisibility */;
3245 var1 = modelbuilder__AIntrudeVisibility__mvisibility(self);
3246 var = var1;
3247 RET_LABEL:;
3248 return var;
3249 }
3250 /* method modelbuilder#APublicVisibility#mvisibility for (self: APublicVisibility): MVisibility */
3251 val* modelbuilder__APublicVisibility__mvisibility(val* self) {
3252 val* var /* : MVisibility */;
3253 val* var1 /* : MVisibility */;
3254 var1 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__public_visibility]))(self) /* public_visibility on <self:APublicVisibility>*/;
3255 var = var1;
3256 goto RET_LABEL;
3257 RET_LABEL:;
3258 return var;
3259 }
3260 /* method modelbuilder#APublicVisibility#mvisibility for (self: Object): MVisibility */
3261 val* VIRTUAL_modelbuilder__APublicVisibility__mvisibility(val* self) {
3262 val* var /* : MVisibility */;
3263 val* var1 /* : MVisibility */;
3264 var1 = modelbuilder__APublicVisibility__mvisibility(self);
3265 var = var1;
3266 RET_LABEL:;
3267 return var;
3268 }
3269 /* method modelbuilder#AProtectedVisibility#mvisibility for (self: AProtectedVisibility): MVisibility */
3270 val* modelbuilder__AProtectedVisibility__mvisibility(val* self) {
3271 val* var /* : MVisibility */;
3272 val* var1 /* : MVisibility */;
3273 var1 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__protected_visibility]))(self) /* protected_visibility on <self:AProtectedVisibility>*/;
3274 var = var1;
3275 goto RET_LABEL;
3276 RET_LABEL:;
3277 return var;
3278 }
3279 /* method modelbuilder#AProtectedVisibility#mvisibility for (self: Object): MVisibility */
3280 val* VIRTUAL_modelbuilder__AProtectedVisibility__mvisibility(val* self) {
3281 val* var /* : MVisibility */;
3282 val* var1 /* : MVisibility */;
3283 var1 = modelbuilder__AProtectedVisibility__mvisibility(self);
3284 var = var1;
3285 RET_LABEL:;
3286 return var;
3287 }
3288 /* method modelbuilder#APrivateVisibility#mvisibility for (self: APrivateVisibility): MVisibility */
3289 val* modelbuilder__APrivateVisibility__mvisibility(val* self) {
3290 val* var /* : MVisibility */;
3291 val* var1 /* : MVisibility */;
3292 var1 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__private_visibility]))(self) /* private_visibility on <self:APrivateVisibility>*/;
3293 var = var1;
3294 goto RET_LABEL;
3295 RET_LABEL:;
3296 return var;
3297 }
3298 /* method modelbuilder#APrivateVisibility#mvisibility for (self: Object): MVisibility */
3299 val* VIRTUAL_modelbuilder__APrivateVisibility__mvisibility(val* self) {
3300 val* var /* : MVisibility */;
3301 val* var1 /* : MVisibility */;
3302 var1 = modelbuilder__APrivateVisibility__mvisibility(self);
3303 var = var1;
3304 RET_LABEL:;
3305 return var;
3306 }