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