64154e2b054f879e8a11bc9e419fad5896f7dc5f
[nit.git] / c_src / global___cha_analysis._sep.c
1 /* This C file is generated by NIT to compile module global___cha_analysis. */
2 #include "global___cha_analysis._sep.h"
3 val_t global___cha_analysis___ChaContext___reachable_iroutines(val_t p0){
4 struct {struct stack_frame_t me;} fra;
5 val_t REGB0;
6 val_t tmp;
7 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
8 fra.me.file = LOCATE_global___cha_analysis;
9 fra.me.line = 26;
10 fra.me.meth = LOCATE_global___cha_analysis___ChaContext___reachable_iroutines;
11 fra.me.has_broke = 0;
12 fra.me.REG_size = 1;
13 fra.me.nitni_local_ref_head = NULL;
14 fra.me.REG[0] = NIT_NULL;
15 fra.me.REG[0] = p0;
16 /* global/cha_analysis.nit:26 */
17 REGB0 = TAG_Bool(ATTR_global___cha_analysis___ChaContext____reachable_iroutines(fra.me.REG[0])!=NIT_NULL);
18 if (UNTAG_Bool(REGB0)) {
19 } else {
20 nit_abort("Uninitialized attribute %s", "_reachable_iroutines", LOCATE_global___cha_analysis, 26);
21 }
22 fra.me.REG[0] = ATTR_global___cha_analysis___ChaContext____reachable_iroutines(fra.me.REG[0]);
23 stack_frame_head = fra.me.prev;
24 return fra.me.REG[0];
25 }
26 val_t global___cha_analysis___ChaContext___is_iroutine_reachable(val_t p0, val_t p1){
27 struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
28 val_t REGB0;
29 val_t REGB1;
30 val_t tmp;
31 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
32 fra.me.file = LOCATE_global___cha_analysis;
33 fra.me.line = 28;
34 fra.me.meth = LOCATE_global___cha_analysis___ChaContext___is_iroutine_reachable;
35 fra.me.has_broke = 0;
36 fra.me.REG_size = 2;
37 fra.me.nitni_local_ref_head = NULL;
38 fra.me.REG[0] = NIT_NULL;
39 fra.me.REG[1] = NIT_NULL;
40 fra.me.REG[0] = p0;
41 fra.me.REG[1] = p1;
42 /* global/cha_analysis.nit:29 */
43 REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
44 if (UNTAG_Bool(REGB0)) {
45 } else {
46 REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
47 if (UNTAG_Bool(REGB1)) {
48 REGB1 = TAG_Bool(false);
49 REGB0 = REGB1;
50 } else {
51 REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
52 REGB0 = REGB1;
53 }
54 }
55 REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
56 if (UNTAG_Bool(REGB0)) {
57 fra.me.REG[0] = CALL_global___cha_analysis___ChaContext___reachable_iroutines(fra.me.REG[0])(fra.me.REG[0]);
58 REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
59 } else {
60 REGB1 = TAG_Bool(false);
61 REGB0 = REGB1;
62 }
63 goto label1;
64 label1: while(0);
65 stack_frame_head = fra.me.prev;
66 return REGB0;
67 }
68 val_t global___cha_analysis___ChaContext___is_method_reachable(val_t p0, val_t p1){
69 struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
70 val_t REGB0;
71 val_t tmp;
72 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
73 fra.me.file = LOCATE_global___cha_analysis;
74 fra.me.line = 32;
75 fra.me.meth = LOCATE_global___cha_analysis___ChaContext___is_method_reachable;
76 fra.me.has_broke = 0;
77 fra.me.REG_size = 2;
78 fra.me.nitni_local_ref_head = NULL;
79 fra.me.REG[0] = NIT_NULL;
80 fra.me.REG[1] = NIT_NULL;
81 fra.me.REG[0] = p0;
82 fra.me.REG[1] = p1;
83 /* global/cha_analysis.nit:33 */
84 fra.me.REG[1] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[1])(fra.me.REG[1]);
85 REGB0 = CALL_global___reachable_method_analysis___ReachableMethodAnalysis___is_iroutine_reachable(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
86 goto label1;
87 label1: while(0);
88 stack_frame_head = fra.me.prev;
89 return REGB0;
90 }
91 void global___cha_analysis___ChaContext___init(val_t p0, int* init_table){
92 int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_global___cha_analysis___ChaContext].i;
93 struct {struct stack_frame_t me;} fra;
94 val_t tmp;
95 if (init_table[itpos0]) return;
96 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
97 fra.me.file = LOCATE_global___cha_analysis;
98 fra.me.line = 0;
99 fra.me.meth = LOCATE_global___cha_analysis___ChaContext___init;
100 fra.me.has_broke = 0;
101 fra.me.REG_size = 0;
102 fra.me.nitni_local_ref_head = NULL;
103 stack_frame_head = fra.me.prev;
104 init_table[itpos0] = 1;
105 return;
106 }
107 val_t global___cha_analysis___ChaBuilder___iroutine_to_search(val_t p0){
108 struct {struct stack_frame_t me;} fra;
109 val_t REGB0;
110 val_t tmp;
111 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
112 fra.me.file = LOCATE_global___cha_analysis;
113 fra.me.line = 38;
114 fra.me.meth = LOCATE_global___cha_analysis___ChaBuilder___iroutine_to_search;
115 fra.me.has_broke = 0;
116 fra.me.REG_size = 1;
117 fra.me.nitni_local_ref_head = NULL;
118 fra.me.REG[0] = NIT_NULL;
119 fra.me.REG[0] = p0;
120 /* global/cha_analysis.nit:38 */
121 REGB0 = TAG_Bool(ATTR_global___cha_analysis___ChaBuilder____iroutine_to_search(fra.me.REG[0])!=NIT_NULL);
122 if (UNTAG_Bool(REGB0)) {
123 } else {
124 nit_abort("Uninitialized attribute %s", "_iroutine_to_search", LOCATE_global___cha_analysis, 38);
125 }
126 fra.me.REG[0] = ATTR_global___cha_analysis___ChaBuilder____iroutine_to_search(fra.me.REG[0]);
127 stack_frame_head = fra.me.prev;
128 return fra.me.REG[0];
129 }
130 val_t global___cha_analysis___ChaBuilder___context(val_t p0){
131 struct {struct stack_frame_t me;} fra;
132 val_t REGB0;
133 val_t tmp;
134 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
135 fra.me.file = LOCATE_global___cha_analysis;
136 fra.me.line = 39;
137 fra.me.meth = LOCATE_global___cha_analysis___ChaBuilder___context;
138 fra.me.has_broke = 0;
139 fra.me.REG_size = 1;
140 fra.me.nitni_local_ref_head = NULL;
141 fra.me.REG[0] = NIT_NULL;
142 fra.me.REG[0] = p0;
143 /* global/cha_analysis.nit:39 */
144 REGB0 = TAG_Bool(ATTR_global___cha_analysis___ChaBuilder____context(fra.me.REG[0])!=NIT_NULL);
145 if (UNTAG_Bool(REGB0)) {
146 } else {
147 nit_abort("Uninitialized attribute %s", "_context", LOCATE_global___cha_analysis, 39);
148 }
149 fra.me.REG[0] = ATTR_global___cha_analysis___ChaBuilder____context(fra.me.REG[0]);
150 stack_frame_head = fra.me.prev;
151 return fra.me.REG[0];
152 }
153 val_t global___cha_analysis___ChaBuilder___program(val_t p0){
154 struct {struct stack_frame_t me;} fra;
155 val_t REGB0;
156 val_t tmp;
157 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
158 fra.me.file = LOCATE_global___cha_analysis;
159 fra.me.line = 40;
160 fra.me.meth = LOCATE_global___cha_analysis___ChaBuilder___program;
161 fra.me.has_broke = 0;
162 fra.me.REG_size = 1;
163 fra.me.nitni_local_ref_head = NULL;
164 fra.me.REG[0] = NIT_NULL;
165 fra.me.REG[0] = p0;
166 /* global/cha_analysis.nit:40 */
167 REGB0 = TAG_Bool(ATTR_global___cha_analysis___ChaBuilder____program(fra.me.REG[0])!=NIT_NULL);
168 if (UNTAG_Bool(REGB0)) {
169 } else {
170 nit_abort("Uninitialized attribute %s", "_program", LOCATE_global___cha_analysis, 40);
171 }
172 fra.me.REG[0] = ATTR_global___cha_analysis___ChaBuilder____program(fra.me.REG[0]);
173 stack_frame_head = fra.me.prev;
174 return fra.me.REG[0];
175 }
176 void global___cha_analysis___ChaBuilder___init(val_t p0, val_t p1, int* init_table){
177 int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_global___cha_analysis___ChaBuilder].i;
178 struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
179 val_t tmp;
180 if (init_table[itpos1]) return;
181 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
182 fra.me.file = LOCATE_global___cha_analysis;
183 fra.me.line = 42;
184 fra.me.meth = LOCATE_global___cha_analysis___ChaBuilder___init;
185 fra.me.has_broke = 0;
186 fra.me.REG_size = 2;
187 fra.me.nitni_local_ref_head = NULL;
188 fra.me.REG[0] = NIT_NULL;
189 fra.me.REG[1] = NIT_NULL;
190 fra.me.REG[0] = p0;
191 fra.me.REG[1] = p1;
192 /* global/cha_analysis.nit:43 */
193 ATTR_global___cha_analysis___ChaBuilder____program(fra.me.REG[0]) = fra.me.REG[1];
194 /* global/cha_analysis.nit:44 */
195 fra.me.REG[1] = NEW_ChaContext_global___cha_analysis___ChaContext___init();
196 ATTR_global___cha_analysis___ChaBuilder____context(fra.me.REG[0]) = fra.me.REG[1];
197 stack_frame_head = fra.me.prev;
198 init_table[itpos1] = 1;
199 return;
200 }
201 void global___cha_analysis___ChaBuilder___add_search(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4){
202 struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
203 val_t REGB0;
204 val_t REGB1;
205 val_t REGB2;
206 val_t REGB3;
207 val_t tmp;
208 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
209 fra.me.file = LOCATE_global___cha_analysis;
210 fra.me.line = 47;
211 fra.me.meth = LOCATE_global___cha_analysis___ChaBuilder___add_search;
212 fra.me.has_broke = 0;
213 fra.me.REG_size = 4;
214 fra.me.nitni_local_ref_head = NULL;
215 fra.me.REG[0] = NIT_NULL;
216 fra.me.REG[1] = NIT_NULL;
217 fra.me.REG[2] = NIT_NULL;
218 fra.me.REG[3] = NIT_NULL;
219 fra.me.REG[0] = p0;
220 fra.me.REG[1] = p1;
221 fra.me.REG[2] = p2;
222 REGB0 = p3;
223 REGB1 = p4;
224 /* global/cha_analysis.nit:49 */
225 REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
226 if (UNTAG_Bool(REGB2)) {
227 } else {
228 REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
229 if (UNTAG_Bool(REGB3)) {
230 REGB3 = TAG_Bool(false);
231 REGB2 = REGB3;
232 } else {
233 REGB3 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
234 REGB2 = REGB3;
235 }
236 }
237 REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
238 if (UNTAG_Bool(REGB2)) {
239 fra.me.REG[3] = CALL_global___cha_analysis___ChaBuilder___context(fra.me.REG[0])(fra.me.REG[0]);
240 REGB2 = CALL_global___reachable_method_analysis___ReachableMethodAnalysis___is_iroutine_reachable(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
241 REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
242 } else {
243 REGB3 = TAG_Bool(false);
244 REGB2 = REGB3;
245 }
246 if (UNTAG_Bool(REGB2)) {
247 /* global/cha_analysis.nit:50 */
248 fra.me.REG[3] = CALL_global___cha_analysis___ChaBuilder___context(fra.me.REG[0])(fra.me.REG[0]);
249 fra.me.REG[3] = CALL_global___cha_analysis___ChaContext___reachable_iroutines(fra.me.REG[3])(fra.me.REG[3]);
250 CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
251 /* global/cha_analysis.nit:51 */
252 REGB2 = TAG_Bool(ATTR_global___cha_analysis___ChaBuilder____iroutine_to_search(fra.me.REG[0])!=NIT_NULL);
253 if (UNTAG_Bool(REGB2)) {
254 } else {
255 nit_abort("Uninitialized attribute %s", "_iroutine_to_search", LOCATE_global___cha_analysis, 51);
256 }
257 fra.me.REG[3] = ATTR_global___cha_analysis___ChaBuilder____iroutine_to_search(fra.me.REG[0]);
258 CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
259 }
260 /* global/cha_analysis.nit:54 */
261 REGB2 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
262 if (UNTAG_Bool(REGB2)) {
263 } else {
264 REGB3 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
265 if (UNTAG_Bool(REGB3)) {
266 REGB3 = TAG_Bool(false);
267 REGB2 = REGB3;
268 } else {
269 REGB3 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
270 REGB2 = REGB3;
271 }
272 }
273 REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
274 if (UNTAG_Bool(REGB2)) {
275 /* global/cha_analysis.nit:56 */
276 REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
277 if (UNTAG_Bool(REGB0)) {
278 /* global/cha_analysis.nit:57 */
279 REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
280 if (UNTAG_Bool(REGB0)) {
281 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 57);
282 }
283 fra.me.REG[2] = CALL_metamodel___abstractmetamodel___MMLocalProperty___prhe(fra.me.REG[1])(fra.me.REG[1]);
284 fra.me.REG[2] = CALL_metamodel___partial_order___PartialOrderElement___smallers(fra.me.REG[2])(fra.me.REG[2]);
285 CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_global___cha_analysis___ChaBuilder___add_search_1));
286 }
287 /* global/cha_analysis.nit:65 */
288 if (UNTAG_Bool(REGB1)) {
289 /* global/cha_analysis.nit:66 */
290 REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
291 if (UNTAG_Bool(REGB1)) {
292 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 66);
293 }
294 fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMLocalProperty___prhe(fra.me.REG[1])(fra.me.REG[1]);
295 fra.me.REG[1] = CALL_metamodel___partial_order___PartialOrderElement___greaters(fra.me.REG[1])(fra.me.REG[1]);
296 CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_global___cha_analysis___ChaBuilder___add_search_2));
297 }
298 }
299 stack_frame_head = fra.me.prev;
300 return;
301 }
302 void OC_global___cha_analysis___ChaBuilder___add_search_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
303 struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
304 val_t REGB0;
305 val_t REGB1;
306 fun_t CREG[1];
307 val_t tmp;
308 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
309 fra.me.file = LOCATE_global___cha_analysis;
310 fra.me.line = 0;
311 fra.me.meth = LOCATE_global___cha_analysis___ChaBuilder___add_search;
312 fra.me.has_broke = 0;
313 fra.me.REG_size = 2;
314 fra.me.nitni_local_ref_head = NULL;
315 fra.me.REG[0] = NIT_NULL;
316 fra.me.REG[1] = NIT_NULL;
317 fra.me.closure_ctx = closctx_param;
318 fra.me.closure_funs = CREG;
319 fra.me.REG[0] = p0;
320 CREG[0] = clos_fun0;
321 /* global/cha_analysis.nit:58 */
322 REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
323 if (UNTAG_Bool(REGB0)) {
324 /* global/cha_analysis.nit:59 */
325 fra.me.REG[1] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[0])(fra.me.REG[0]);
326 REGB0 = TAG_Bool(true);
327 REGB1 = TAG_Bool(false);
328 CALL_global___cha_analysis___ChaBuilder___add_search(closctx->REG[0])(closctx->REG[0], fra.me.REG[0], fra.me.REG[1], REGB0, REGB1);
329 }
330 stack_frame_head = fra.me.prev;
331 return;
332 }
333 void OC_global___cha_analysis___ChaBuilder___add_search_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
334 struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
335 val_t REGB0;
336 val_t REGB1;
337 fun_t CREG[1];
338 val_t tmp;
339 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
340 fra.me.file = LOCATE_global___cha_analysis;
341 fra.me.line = 0;
342 fra.me.meth = LOCATE_global___cha_analysis___ChaBuilder___add_search;
343 fra.me.has_broke = 0;
344 fra.me.REG_size = 2;
345 fra.me.nitni_local_ref_head = NULL;
346 fra.me.REG[0] = NIT_NULL;
347 fra.me.REG[1] = NIT_NULL;
348 fra.me.closure_ctx = closctx_param;
349 fra.me.closure_funs = CREG;
350 fra.me.REG[0] = p0;
351 CREG[0] = clos_fun0;
352 /* global/cha_analysis.nit:67 */
353 REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
354 if (UNTAG_Bool(REGB0)) {
355 /* global/cha_analysis.nit:68 */
356 fra.me.REG[1] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[0])(fra.me.REG[0]);
357 REGB0 = TAG_Bool(true);
358 REGB1 = TAG_Bool(false);
359 CALL_global___cha_analysis___ChaBuilder___add_search(closctx->REG[0])(closctx->REG[0], fra.me.REG[0], fra.me.REG[1], REGB0, REGB1);
360 }
361 stack_frame_head = fra.me.prev;
362 return;
363 }
364 void global___cha_analysis___ChaBuilder___work(val_t p0){
365 struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
366 val_t REGB0;
367 val_t REGB1;
368 val_t tmp;
369 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
370 fra.me.file = LOCATE_global___cha_analysis;
371 fra.me.line = 75;
372 fra.me.meth = LOCATE_global___cha_analysis___ChaBuilder___work;
373 fra.me.has_broke = 0;
374 fra.me.REG_size = 3;
375 fra.me.nitni_local_ref_head = NULL;
376 fra.me.REG[0] = NIT_NULL;
377 fra.me.REG[1] = NIT_NULL;
378 fra.me.REG[2] = NIT_NULL;
379 fra.me.REG[0] = p0;
380 /* global/cha_analysis.nit:77 */
381 fra.me.REG[1] = CALL_global___cha_analysis___ChaBuilder___program(fra.me.REG[0])(fra.me.REG[0]);
382 fra.me.REG[1] = CALL_program___Program___main_method(fra.me.REG[1])(fra.me.REG[1]);
383 /* global/cha_analysis.nit:78 */
384 REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
385 if (UNTAG_Bool(REGB0)) {
386 } else {
387 REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
388 if (UNTAG_Bool(REGB1)) {
389 REGB1 = TAG_Bool(false);
390 REGB0 = REGB1;
391 } else {
392 REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
393 REGB0 = REGB1;
394 }
395 }
396 if (UNTAG_Bool(REGB0)) {
397 goto label1;
398 }
399 /* global/cha_analysis.nit:80 */
400 REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
401 if (UNTAG_Bool(REGB0)) {
402 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 80);
403 }
404 fra.me.REG[2] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[1])(fra.me.REG[1]);
405 REGB0 = TAG_Bool(true);
406 REGB1 = TAG_Bool(false);
407 CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], REGB0, REGB1);
408 /* global/cha_analysis.nit:82 */
409 while(1) {
410 fra.me.REG[2] = CALL_global___cha_analysis___ChaBuilder___iroutine_to_search(fra.me.REG[0])(fra.me.REG[0]);
411 REGB1 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[2])(fra.me.REG[2]);
412 REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
413 if (UNTAG_Bool(REGB1)) {
414 /* global/cha_analysis.nit:83 */
415 fra.me.REG[2] = NEW_ChaVisitor_global___cha_analysis___ChaVisitor___init(fra.me.REG[0]);
416 /* global/cha_analysis.nit:84 */
417 fra.me.REG[1] = CALL_global___cha_analysis___ChaBuilder___iroutine_to_search(fra.me.REG[0])(fra.me.REG[0]);
418 fra.me.REG[1] = CALL_standard___collection___abstract_collection___Sequence___pop(fra.me.REG[1])(fra.me.REG[1]);
419 /* global/cha_analysis.nit:85 */
420 fra.me.REG[1] = CALL_icode___icode_base___IRoutine___body(fra.me.REG[1])(fra.me.REG[1]);
421 CALL_icode___icode_tools___ICodeVisitor___visit_icode(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
422 } else {
423 /* global/cha_analysis.nit:82 */
424 goto label2;
425 }
426 }
427 label2: while(0);
428 label1: while(0);
429 stack_frame_head = fra.me.prev;
430 return;
431 }
432 val_t global___cha_analysis___ChaVisitor___builder(val_t p0){
433 struct {struct stack_frame_t me;} fra;
434 val_t REGB0;
435 val_t tmp;
436 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
437 fra.me.file = LOCATE_global___cha_analysis;
438 fra.me.line = 92;
439 fra.me.meth = LOCATE_global___cha_analysis___ChaVisitor___builder;
440 fra.me.has_broke = 0;
441 fra.me.REG_size = 1;
442 fra.me.nitni_local_ref_head = NULL;
443 fra.me.REG[0] = NIT_NULL;
444 fra.me.REG[0] = p0;
445 /* global/cha_analysis.nit:92 */
446 REGB0 = TAG_Bool(ATTR_global___cha_analysis___ChaVisitor____builder(fra.me.REG[0])!=NIT_NULL);
447 if (UNTAG_Bool(REGB0)) {
448 } else {
449 nit_abort("Uninitialized attribute %s", "_builder", LOCATE_global___cha_analysis, 92);
450 }
451 fra.me.REG[0] = ATTR_global___cha_analysis___ChaVisitor____builder(fra.me.REG[0]);
452 stack_frame_head = fra.me.prev;
453 return fra.me.REG[0];
454 }
455 void global___cha_analysis___ChaVisitor___visit_icode(val_t p0, val_t p1){
456 struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
457 val_t REGB0;
458 val_t REGB1;
459 val_t tmp;
460 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
461 fra.me.file = LOCATE_global___cha_analysis;
462 fra.me.line = 94;
463 fra.me.meth = LOCATE_global___cha_analysis___ChaVisitor___visit_icode;
464 fra.me.has_broke = 0;
465 fra.me.REG_size = 7;
466 fra.me.nitni_local_ref_head = NULL;
467 fra.me.REG[0] = NIT_NULL;
468 fra.me.REG[1] = NIT_NULL;
469 fra.me.REG[2] = NIT_NULL;
470 fra.me.REG[3] = NIT_NULL;
471 fra.me.REG[4] = NIT_NULL;
472 fra.me.REG[5] = NIT_NULL;
473 fra.me.REG[6] = NIT_NULL;
474 fra.me.REG[0] = p0;
475 fra.me.REG[1] = p1;
476 /* global/cha_analysis.nit:94 */
477 fra.me.REG[2] = fra.me.REG[0];
478 fra.me.REG[3] = fra.me.REG[1];
479 /* global/cha_analysis.nit:96 */
480 REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___IStaticCall, ID_icode___icode_base___IStaticCall)) /*cast IStaticCall*/;
481 if (UNTAG_Bool(REGB0)) {
482 /* global/cha_analysis.nit:98 */
483 fra.me.REG[4] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
484 REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
485 if (UNTAG_Bool(REGB0)) {
486 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 98);
487 }
488 fra.me.REG[5] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
489 REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
490 if (UNTAG_Bool(REGB0)) {
491 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 98);
492 }
493 fra.me.REG[6] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
494 fra.me.REG[6] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[6])(fra.me.REG[6]);
495 REGB0 = TAG_Bool(true);
496 REGB1 = TAG_Bool(false);
497 CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], REGB0, REGB1);
498 } else {
499 /* global/cha_analysis.nit:99 */
500 REGB1 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___INew, ID_icode___icode_base___INew)) /*cast INew*/;
501 if (UNTAG_Bool(REGB1)) {
502 /* global/cha_analysis.nit:101 */
503 REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
504 if (UNTAG_Bool(REGB1)) {
505 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 101);
506 }
507 fra.me.REG[6] = CALL_icode___icode_base___INew___stype(fra.me.REG[3])(fra.me.REG[3]);
508 /* global/cha_analysis.nit:102 */
509 fra.me.REG[5] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
510 fra.me.REG[5] = CALL_global___cha_analysis___ChaBuilder___program(fra.me.REG[5])(fra.me.REG[5]);
511 fra.me.REG[5] = CALL_program___Program___main_module(fra.me.REG[5])(fra.me.REG[5]);
512 fra.me.REG[5] = CALL_metamodel___static_type___MMType___for_module(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
513 fra.me.REG[5] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[5])(fra.me.REG[5]);
514 /* global/cha_analysis.nit:103 */
515 fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[5])(fra.me.REG[5]);
516 REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalClass___is_extern(fra.me.REG[6])(fra.me.REG[6]);
517 REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
518 if (UNTAG_Bool(REGB1)) {
519 /* global/cha_analysis.nit:104 */
520 REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
521 if (UNTAG_Bool(REGB1)) {
522 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 104);
523 }
524 fra.me.REG[6] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
525 fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[6])(fra.me.REG[6]);
526 fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalClass_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
527 REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[6], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
528 if (UNTAG_Bool(REGB1)) {
529 } else {
530 nit_abort("Cast failed", NULL, LOCATE_global___cha_analysis, 104);
531 }
532 /* global/cha_analysis.nit:105 */
533 fra.me.REG[5] = CALL_program___MMLocalClass___new_instance_iroutine(fra.me.REG[5])(fra.me.REG[5]);
534 fra.me.REG[6] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
535 /* global/cha_analysis.nit:106 */
536 fra.me.REG[5] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
537 REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
538 if (UNTAG_Bool(REGB1)) {
539 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 106);
540 }
541 fra.me.REG[4] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
542 REGB1 = TAG_Bool(false);
543 REGB0 = TAG_Bool(false);
544 CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], REGB1, REGB0);
545 }
546 } else {
547 /* global/cha_analysis.nit:108 */
548 REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___ISuper, ID_icode___icode_base___ISuper)) /*cast ISuper*/;
549 if (UNTAG_Bool(REGB0)) {
550 /* global/cha_analysis.nit:109 */
551 fra.me.REG[6] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
552 REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
553 if (UNTAG_Bool(REGB0)) {
554 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 109);
555 }
556 fra.me.REG[4] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
557 REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
558 if (UNTAG_Bool(REGB0)) {
559 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 109);
560 }
561 fra.me.REG[5] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
562 fra.me.REG[5] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[5])(fra.me.REG[5]);
563 REGB0 = TAG_Bool(false);
564 REGB1 = TAG_Bool(true);
565 CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4], fra.me.REG[5], REGB0, REGB1);
566 } else {
567 /* global/cha_analysis.nit:110 */
568 REGB1 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___ICall, ID_icode___icode_base___ICall)) /*cast ICall*/;
569 if (UNTAG_Bool(REGB1)) {
570 /* global/cha_analysis.nit:111 */
571 fra.me.REG[5] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
572 REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
573 if (UNTAG_Bool(REGB1)) {
574 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 111);
575 }
576 fra.me.REG[4] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
577 REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
578 if (UNTAG_Bool(REGB1)) {
579 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 111);
580 }
581 fra.me.REG[6] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
582 fra.me.REG[6] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[6])(fra.me.REG[6]);
583 REGB1 = TAG_Bool(false);
584 REGB0 = TAG_Bool(false);
585 CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], REGB1, REGB0);
586 } else {
587 /* global/cha_analysis.nit:112 */
588 REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___ICheckInstance, ID_icode___icode_base___ICheckInstance)) /*cast ICheckInstance*/;
589 if (UNTAG_Bool(REGB0)) {
590 /* global/cha_analysis.nit:113 */
591 REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
592 if (UNTAG_Bool(REGB0)) {
593 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 113);
594 }
595 fra.me.REG[6] = CALL_icode___icode_base___ICheckInstance___stype(fra.me.REG[3])(fra.me.REG[3]);
596 /* global/cha_analysis.nit:114 */
597 fra.me.REG[4] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
598 fra.me.REG[4] = CALL_global___cha_analysis___ChaBuilder___program(fra.me.REG[4])(fra.me.REG[4]);
599 fra.me.REG[4] = CALL_program___Program___main_module(fra.me.REG[4])(fra.me.REG[4]);
600 fra.me.REG[4] = CALL_metamodel___static_type___MMType___for_module(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
601 fra.me.REG[4] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[4])(fra.me.REG[4]);
602 /* global/cha_analysis.nit:115 */
603 fra.me.REG[4] = CALL_program___MMLocalClass___checknew_iroutine(fra.me.REG[4])(fra.me.REG[4]);
604 /* global/cha_analysis.nit:116 */
605 fra.me.REG[6] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
606 REGB0 = TAG_Bool(true);
607 REGB1 = TAG_Bool(false);
608 CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[6])(fra.me.REG[6], NIT_NULL, fra.me.REG[4], REGB0, REGB1);
609 } else {
610 /* global/cha_analysis.nit:117 */
611 REGB1 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___IInitAttributes, ID_icode___icode_base___IInitAttributes)) /*cast IInitAttributes*/;
612 if (UNTAG_Bool(REGB1)) {
613 /* global/cha_analysis.nit:118 */
614 REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
615 if (UNTAG_Bool(REGB1)) {
616 nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 118);
617 }
618 fra.me.REG[3] = CALL_icode___icode_base___IInitAttributes___stype(fra.me.REG[3])(fra.me.REG[3]);
619 /* global/cha_analysis.nit:119 */
620 fra.me.REG[4] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
621 fra.me.REG[4] = CALL_global___cha_analysis___ChaBuilder___program(fra.me.REG[4])(fra.me.REG[4]);
622 fra.me.REG[4] = CALL_program___Program___main_module(fra.me.REG[4])(fra.me.REG[4]);
623 fra.me.REG[4] = CALL_metamodel___static_type___MMType___for_module(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
624 fra.me.REG[4] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[4])(fra.me.REG[4]);
625 /* global/cha_analysis.nit:120 */
626 fra.me.REG[4] = CALL_program___MMLocalClass___init_var_iroutine(fra.me.REG[4])(fra.me.REG[4]);
627 /* global/cha_analysis.nit:121 */
628 fra.me.REG[2] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
629 REGB1 = TAG_Bool(true);
630 REGB0 = TAG_Bool(false);
631 CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[2])(fra.me.REG[2], NIT_NULL, fra.me.REG[4], REGB1, REGB0);
632 }
633 }
634 }
635 }
636 }
637 }
638 /* global/cha_analysis.nit:123 */
639 CALL_SUPER_global___cha_analysis___ChaVisitor___visit_icode(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
640 stack_frame_head = fra.me.prev;
641 return;
642 }
643 void global___cha_analysis___ChaVisitor___init(val_t p0, val_t p1, int* init_table){
644 int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_global___cha_analysis___ChaVisitor].i;
645 struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
646 val_t tmp;
647 if (init_table[itpos2]) return;
648 fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
649 fra.me.file = LOCATE_global___cha_analysis;
650 fra.me.line = 126;
651 fra.me.meth = LOCATE_global___cha_analysis___ChaVisitor___init;
652 fra.me.has_broke = 0;
653 fra.me.REG_size = 3;
654 fra.me.nitni_local_ref_head = NULL;
655 fra.me.REG[0] = NIT_NULL;
656 fra.me.REG[1] = NIT_NULL;
657 fra.me.REG[2] = NIT_NULL;
658 fra.me.REG[0] = p0;
659 fra.me.REG[1] = p1;
660 /* global/cha_analysis.nit:126 */
661 fra.me.REG[2] = fra.me.REG[0];
662 CALL_icode___icode_tools___ICodeVisitor___init(fra.me.REG[0])(fra.me.REG[0], init_table);
663 /* global/cha_analysis.nit:128 */
664 ATTR_global___cha_analysis___ChaVisitor____builder(fra.me.REG[2]) = fra.me.REG[1];
665 stack_frame_head = fra.me.prev;
666 init_table[itpos2] = 1;
667 return;
668 }