nitc: fix calling extern constructors from extern code in separate compiler
[nit.git] / c_src / flow.sep.1.c
1 #include "flow.sep.0.h"
2 /* method flow#ToolContext#flow_phase for (self: ToolContext): Phase */
3 val* flow__ToolContext__flow_phase(val* self) {
4 val* var /* : Phase */;
5 val* var1 /* : Phase */;
6 var1 = self->attrs[COLOR_flow__ToolContext___flow_phase].val; /* _flow_phase on <self:ToolContext> */
7 if (unlikely(var1 == NULL)) {
8 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flow_phase");
9 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 23);
10 show_backtrace(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method flow#ToolContext#flow_phase for (self: Object): Phase */
17 val* VIRTUAL_flow__ToolContext__flow_phase(val* self) {
18 val* var /* : Phase */;
19 val* var1 /* : Phase */;
20 val* var3 /* : Phase */;
21 { /* Inline flow#ToolContext#flow_phase (self) on <self:Object(ToolContext)> */
22 var3 = self->attrs[COLOR_flow__ToolContext___flow_phase].val; /* _flow_phase on <self:Object(ToolContext)> */
23 if (unlikely(var3 == NULL)) {
24 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flow_phase");
25 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 23);
26 show_backtrace(1);
27 }
28 var1 = var3;
29 RET_LABEL2:(void)0;
30 }
31 var = var1;
32 RET_LABEL:;
33 return var;
34 }
35 /* method flow#FlowPhase#process_npropdef for (self: FlowPhase, APropdef) */
36 void flow__FlowPhase__process_npropdef(val* self, val* p0) {
37 val* var_npropdef /* var npropdef: APropdef */;
38 val* var /* : ToolContext */;
39 val* var2 /* : ToolContext */;
40 var_npropdef = p0;
41 {
42 { /* Inline phase#Phase#toolcontext (self) on <self:FlowPhase> */
43 var2 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:FlowPhase> */
44 if (unlikely(var2 == NULL)) {
45 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
46 PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
47 show_backtrace(1);
48 }
49 var = var2;
50 RET_LABEL1:(void)0;
51 }
52 }
53 {
54 flow__APropdef__do_flow(var_npropdef, var); /* Direct call flow#APropdef#do_flow on <var_npropdef:APropdef>*/
55 }
56 RET_LABEL:;
57 }
58 /* method flow#FlowPhase#process_npropdef for (self: Object, APropdef) */
59 void VIRTUAL_flow__FlowPhase__process_npropdef(val* self, val* p0) {
60 flow__FlowPhase__process_npropdef(self, p0); /* Direct call flow#FlowPhase#process_npropdef on <self:Object(FlowPhase)>*/
61 RET_LABEL:;
62 }
63 /* method flow#FlowVisitor#current_flow_context for (self: FlowVisitor): FlowContext */
64 val* flow__FlowVisitor__current_flow_context(val* self) {
65 val* var /* : FlowContext */;
66 val* var1 /* : FlowContext */;
67 var1 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
68 if (unlikely(var1 == NULL)) {
69 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
70 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
71 show_backtrace(1);
72 }
73 var = var1;
74 RET_LABEL:;
75 return var;
76 }
77 /* method flow#FlowVisitor#current_flow_context for (self: Object): FlowContext */
78 val* VIRTUAL_flow__FlowVisitor__current_flow_context(val* self) {
79 val* var /* : FlowContext */;
80 val* var1 /* : FlowContext */;
81 val* var3 /* : FlowContext */;
82 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:Object(FlowVisitor)> */
83 var3 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:Object(FlowVisitor)> */
84 if (unlikely(var3 == NULL)) {
85 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
86 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
87 show_backtrace(1);
88 }
89 var1 = var3;
90 RET_LABEL2:(void)0;
91 }
92 var = var1;
93 RET_LABEL:;
94 return var;
95 }
96 /* method flow#FlowVisitor#current_flow_context= for (self: FlowVisitor, FlowContext) */
97 void flow__FlowVisitor__current_flow_context_61d(val* self, val* p0) {
98 self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = p0; /* _current_flow_context on <self:FlowVisitor> */
99 RET_LABEL:;
100 }
101 /* method flow#FlowVisitor#current_flow_context= for (self: Object, FlowContext) */
102 void VIRTUAL_flow__FlowVisitor__current_flow_context_61d(val* self, val* p0) {
103 { /* Inline flow#FlowVisitor#current_flow_context= (self,p0) on <self:Object(FlowVisitor)> */
104 self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = p0; /* _current_flow_context on <self:Object(FlowVisitor)> */
105 RET_LABEL1:(void)0;
106 }
107 RET_LABEL:;
108 }
109 /* method flow#FlowVisitor#toolcontext for (self: FlowVisitor): ToolContext */
110 val* flow__FlowVisitor__toolcontext(val* self) {
111 val* var /* : ToolContext */;
112 val* var1 /* : ToolContext */;
113 var1 = self->attrs[COLOR_flow__FlowVisitor___toolcontext].val; /* _toolcontext on <self:FlowVisitor> */
114 if (unlikely(var1 == NULL)) {
115 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
116 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 38);
117 show_backtrace(1);
118 }
119 var = var1;
120 RET_LABEL:;
121 return var;
122 }
123 /* method flow#FlowVisitor#toolcontext for (self: Object): ToolContext */
124 val* VIRTUAL_flow__FlowVisitor__toolcontext(val* self) {
125 val* var /* : ToolContext */;
126 val* var1 /* : ToolContext */;
127 val* var3 /* : ToolContext */;
128 { /* Inline flow#FlowVisitor#toolcontext (self) on <self:Object(FlowVisitor)> */
129 var3 = self->attrs[COLOR_flow__FlowVisitor___toolcontext].val; /* _toolcontext on <self:Object(FlowVisitor)> */
130 if (unlikely(var3 == NULL)) {
131 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
132 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 38);
133 show_backtrace(1);
134 }
135 var1 = var3;
136 RET_LABEL2:(void)0;
137 }
138 var = var1;
139 RET_LABEL:;
140 return var;
141 }
142 /* method flow#FlowVisitor#toolcontext= for (self: FlowVisitor, ToolContext) */
143 void flow__FlowVisitor__toolcontext_61d(val* self, val* p0) {
144 self->attrs[COLOR_flow__FlowVisitor___toolcontext].val = p0; /* _toolcontext on <self:FlowVisitor> */
145 RET_LABEL:;
146 }
147 /* method flow#FlowVisitor#toolcontext= for (self: Object, ToolContext) */
148 void VIRTUAL_flow__FlowVisitor__toolcontext_61d(val* self, val* p0) {
149 { /* Inline flow#FlowVisitor#toolcontext= (self,p0) on <self:Object(FlowVisitor)> */
150 self->attrs[COLOR_flow__FlowVisitor___toolcontext].val = p0; /* _toolcontext on <self:Object(FlowVisitor)> */
151 RET_LABEL1:(void)0;
152 }
153 RET_LABEL:;
154 }
155 /* method flow#FlowVisitor#init for (self: FlowVisitor, ToolContext) */
156 void flow__FlowVisitor__init(val* self, val* p0) {
157 val* var_toolcontext /* var toolcontext: ToolContext */;
158 val* var /* : FlowContext */;
159 val* var3 /* : Array[FlowContext] */;
160 val* var5 /* : Array[FlowContext] */;
161 val* var6 /* : FlowContext */;
162 val* var8 /* : FlowContext */;
163 val* var9 /* : FlowContext */;
164 val* var11 /* : FlowContext */;
165 short int var12 /* : Bool */;
166 {
167 ((void (*)(val*))(self->class->vft[COLOR_kernel__Object__init]))(self) /* init on <self:FlowVisitor>*/;
168 }
169 var_toolcontext = p0;
170 {
171 { /* Inline flow#FlowVisitor#toolcontext= (self,var_toolcontext) on <self:FlowVisitor> */
172 self->attrs[COLOR_flow__FlowVisitor___toolcontext].val = var_toolcontext; /* _toolcontext on <self:FlowVisitor> */
173 RET_LABEL1:(void)0;
174 }
175 }
176 var = NEW_flow__FlowContext(&type_flow__FlowContext);
177 {
178 ((void (*)(val*))(var->class->vft[COLOR_kernel__Object__init]))(var) /* init on <var:FlowContext>*/;
179 }
180 {
181 { /* Inline flow#FlowVisitor#current_flow_context= (self,var) on <self:FlowVisitor> */
182 self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var; /* _current_flow_context on <self:FlowVisitor> */
183 RET_LABEL2:(void)0;
184 }
185 }
186 {
187 { /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
188 var5 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
189 if (unlikely(var5 == NULL)) {
190 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
191 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 77);
192 show_backtrace(1);
193 }
194 var3 = var5;
195 RET_LABEL4:(void)0;
196 }
197 }
198 {
199 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
200 var8 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
201 if (unlikely(var8 == NULL)) {
202 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
203 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
204 show_backtrace(1);
205 }
206 var6 = var8;
207 RET_LABEL7:(void)0;
208 }
209 }
210 {
211 array__Array__add(var3, var6); /* Direct call array#Array#add on <var3:Array[FlowContext]>*/
212 }
213 {
214 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
215 var11 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
216 if (unlikely(var11 == NULL)) {
217 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
218 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
219 show_backtrace(1);
220 }
221 var9 = var11;
222 RET_LABEL10:(void)0;
223 }
224 }
225 var12 = 1;
226 {
227 { /* Inline flow#FlowContext#is_start= (var9,var12) on <var9:FlowContext> */
228 var9->attrs[COLOR_flow__FlowContext___is_start].s = var12; /* _is_start on <var9:FlowContext> */
229 RET_LABEL13:(void)0;
230 }
231 }
232 RET_LABEL:;
233 }
234 /* method flow#FlowVisitor#init for (self: Object, ToolContext) */
235 void VIRTUAL_flow__FlowVisitor__init(val* self, val* p0) {
236 flow__FlowVisitor__init(self, p0); /* Direct call flow#FlowVisitor#init on <self:Object(FlowVisitor)>*/
237 RET_LABEL:;
238 }
239 /* method flow#FlowVisitor#first for (self: FlowVisitor): nullable ANode */
240 val* flow__FlowVisitor__first(val* self) {
241 val* var /* : nullable ANode */;
242 val* var1 /* : nullable ANode */;
243 var1 = self->attrs[COLOR_flow__FlowVisitor___first].val; /* _first on <self:FlowVisitor> */
244 var = var1;
245 RET_LABEL:;
246 return var;
247 }
248 /* method flow#FlowVisitor#first for (self: Object): nullable ANode */
249 val* VIRTUAL_flow__FlowVisitor__first(val* self) {
250 val* var /* : nullable ANode */;
251 val* var1 /* : nullable ANode */;
252 val* var3 /* : nullable ANode */;
253 { /* Inline flow#FlowVisitor#first (self) on <self:Object(FlowVisitor)> */
254 var3 = self->attrs[COLOR_flow__FlowVisitor___first].val; /* _first on <self:Object(FlowVisitor)> */
255 var1 = var3;
256 RET_LABEL2:(void)0;
257 }
258 var = var1;
259 RET_LABEL:;
260 return var;
261 }
262 /* method flow#FlowVisitor#first= for (self: FlowVisitor, nullable ANode) */
263 void flow__FlowVisitor__first_61d(val* self, val* p0) {
264 self->attrs[COLOR_flow__FlowVisitor___first].val = p0; /* _first on <self:FlowVisitor> */
265 RET_LABEL:;
266 }
267 /* method flow#FlowVisitor#first= for (self: Object, nullable ANode) */
268 void VIRTUAL_flow__FlowVisitor__first_61d(val* self, val* p0) {
269 { /* Inline flow#FlowVisitor#first= (self,p0) on <self:Object(FlowVisitor)> */
270 self->attrs[COLOR_flow__FlowVisitor___first].val = p0; /* _first on <self:Object(FlowVisitor)> */
271 RET_LABEL1:(void)0;
272 }
273 RET_LABEL:;
274 }
275 /* method flow#FlowVisitor#visit for (self: FlowVisitor, ANode) */
276 void flow__FlowVisitor__visit(val* self, val* p0) {
277 val* var_node /* var node: ANode */;
278 val* var /* : nullable ANode */;
279 val* var2 /* : nullable ANode */;
280 val* var3 /* : null */;
281 short int var4 /* : Bool */;
282 short int var5 /* : Bool */;
283 val* var_other /* var other: nullable Object */;
284 short int var7 /* : Bool */;
285 short int var9 /* : Bool */;
286 val* var11 /* : FlowContext */;
287 val* var13 /* : FlowContext */;
288 val* var14 /* : nullable ANode */;
289 val* var16 /* : nullable ANode */;
290 val* var17 /* : null */;
291 short int var18 /* : Bool */;
292 short int var19 /* : Bool */;
293 short int var21 /* : Bool */;
294 short int var23 /* : Bool */;
295 val* var24 /* : FlowContext */;
296 val* var26 /* : FlowContext */;
297 short int var28 /* : Bool */;
298 int cltype;
299 int idtype;
300 val* var29 /* : FlowContext */;
301 val* var31 /* : FlowContext */;
302 val* var_flow /* var flow: FlowContext */;
303 short int var33 /* : Bool */;
304 val* var34 /* : FlowContext */;
305 val* var36 /* : FlowContext */;
306 short int var37 /* : Bool */;
307 short int var38 /* : Bool */;
308 val* var_other40 /* var other: nullable Object */;
309 short int var41 /* : Bool */;
310 short int var42 /* : Bool */;
311 short int var43 /* : Bool */;
312 short int var_ /* var : Bool */;
313 val* var44 /* : FlowContext */;
314 val* var46 /* : FlowContext */;
315 short int var47 /* : Bool */;
316 short int var48 /* : Bool */;
317 short int var50 /* : Bool */;
318 short int var51 /* : Bool */;
319 short int var52 /* : Bool */;
320 val* var53 /* : FlowContext */;
321 val* var54 /* : FlowContext */;
322 val* var56 /* : FlowContext */;
323 static val* varonce;
324 val* var57 /* : String */;
325 char* var58 /* : NativeString */;
326 long var59 /* : Int */;
327 val* var60 /* : FlatString */;
328 val* var62 /* : nullable ANode */;
329 val* var64 /* : nullable ANode */;
330 short int var65 /* : Bool */;
331 short int var66 /* : Bool */;
332 short int var68 /* : Bool */;
333 short int var70 /* : Bool */;
334 var_node = p0;
335 {
336 { /* Inline flow#FlowVisitor#first (self) on <self:FlowVisitor> */
337 var2 = self->attrs[COLOR_flow__FlowVisitor___first].val; /* _first on <self:FlowVisitor> */
338 var = var2;
339 RET_LABEL1:(void)0;
340 }
341 }
342 var3 = NULL;
343 if (var == NULL) {
344 var4 = 1; /* is null */
345 } else {
346 var4 = 0; /* arg is null but recv is not */
347 }
348 if (0) {
349 { /* Inline kernel#Object#== (var,var3) on <var:nullable ANode> */
350 var_other = var3;
351 {
352 { /* Inline kernel#Object#is_same_instance (var,var_other) on <var:nullable ANode(ANode)> */
353 var9 = var == var_other;
354 var7 = var9;
355 goto RET_LABEL8;
356 RET_LABEL8:(void)0;
357 }
358 }
359 var5 = var7;
360 goto RET_LABEL6;
361 RET_LABEL6:(void)0;
362 }
363 var4 = var5;
364 }
365 if (var4){
366 {
367 { /* Inline flow#FlowVisitor#first= (self,var_node) on <self:FlowVisitor> */
368 self->attrs[COLOR_flow__FlowVisitor___first].val = var_node; /* _first on <self:FlowVisitor> */
369 RET_LABEL10:(void)0;
370 }
371 }
372 } else {
373 }
374 {
375 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
376 var13 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
377 if (unlikely(var13 == NULL)) {
378 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
379 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
380 show_backtrace(1);
381 }
382 var11 = var13;
383 RET_LABEL12:(void)0;
384 }
385 }
386 {
387 { /* Inline flow#FlowContext#node (var11) on <var11:FlowContext> */
388 var16 = var11->attrs[COLOR_flow__FlowContext___node].val; /* _node on <var11:FlowContext> */
389 var14 = var16;
390 RET_LABEL15:(void)0;
391 }
392 }
393 var17 = NULL;
394 if (var14 == NULL) {
395 var18 = 1; /* is null */
396 } else {
397 var18 = 0; /* arg is null but recv is not */
398 }
399 if (0) {
400 { /* Inline kernel#Object#== (var14,var17) on <var14:nullable ANode> */
401 var_other = var17;
402 {
403 { /* Inline kernel#Object#is_same_instance (var14,var_other) on <var14:nullable ANode(ANode)> */
404 var23 = var14 == var_other;
405 var21 = var23;
406 goto RET_LABEL22;
407 RET_LABEL22:(void)0;
408 }
409 }
410 var19 = var21;
411 goto RET_LABEL20;
412 RET_LABEL20:(void)0;
413 }
414 var18 = var19;
415 }
416 if (var18){
417 {
418 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
419 var26 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
420 if (unlikely(var26 == NULL)) {
421 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
422 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
423 show_backtrace(1);
424 }
425 var24 = var26;
426 RET_LABEL25:(void)0;
427 }
428 }
429 {
430 { /* Inline flow#FlowContext#node= (var24,var_node) on <var24:FlowContext> */
431 var24->attrs[COLOR_flow__FlowContext___node].val = var_node; /* _node on <var24:FlowContext> */
432 RET_LABEL27:(void)0;
433 }
434 }
435 } else {
436 }
437 {
438 ((void (*)(val*, val*))(var_node->class->vft[COLOR_flow__ANode__accept_flow_visitor]))(var_node, self) /* accept_flow_visitor on <var_node:ANode>*/;
439 }
440 /* <var_node:ANode> isa AExpr */
441 cltype = type_parser_nodes__AExpr.color;
442 idtype = type_parser_nodes__AExpr.id;
443 if(cltype >= var_node->type->table_size) {
444 var28 = 0;
445 } else {
446 var28 = var_node->type->type_table[cltype] == idtype;
447 }
448 if (var28){
449 {
450 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
451 var31 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
452 if (unlikely(var31 == NULL)) {
453 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
454 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
455 show_backtrace(1);
456 }
457 var29 = var31;
458 RET_LABEL30:(void)0;
459 }
460 }
461 var_flow = var29;
462 {
463 { /* Inline flow#AExpr#after_flow_context= (var_node,var_flow) on <var_node:ANode(AExpr)> */
464 var_node->attrs[COLOR_flow__AExpr___after_flow_context].val = var_flow; /* _after_flow_context on <var_node:ANode(AExpr)> */
465 RET_LABEL32:(void)0;
466 }
467 }
468 {
469 { /* Inline flow#FlowContext#when_true (var_flow) on <var_flow:FlowContext> */
470 var36 = var_flow->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_flow:FlowContext> */
471 if (unlikely(var36 == NULL)) {
472 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
473 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
474 show_backtrace(1);
475 }
476 var34 = var36;
477 RET_LABEL35:(void)0;
478 }
479 }
480 {
481 { /* Inline kernel#Object#!= (var34,var_flow) on <var34:FlowContext> */
482 var_other40 = var_flow;
483 {
484 var42 = ((short int (*)(val*, val*))(var34->class->vft[COLOR_kernel__Object___61d_61d]))(var34, var_other40) /* == on <var34:FlowContext>*/;
485 var41 = var42;
486 }
487 var43 = !var41;
488 var38 = var43;
489 goto RET_LABEL39;
490 RET_LABEL39:(void)0;
491 }
492 var37 = var38;
493 }
494 var_ = var37;
495 if (var37){
496 var33 = var_;
497 } else {
498 {
499 { /* Inline flow#FlowContext#when_false (var_flow) on <var_flow:FlowContext> */
500 var46 = var_flow->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_flow:FlowContext> */
501 if (unlikely(var46 == NULL)) {
502 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
503 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
504 show_backtrace(1);
505 }
506 var44 = var46;
507 RET_LABEL45:(void)0;
508 }
509 }
510 {
511 { /* Inline kernel#Object#!= (var44,var_flow) on <var44:FlowContext> */
512 var_other40 = var_flow;
513 {
514 var51 = ((short int (*)(val*, val*))(var44->class->vft[COLOR_kernel__Object___61d_61d]))(var44, var_other40) /* == on <var44:FlowContext>*/;
515 var50 = var51;
516 }
517 var52 = !var50;
518 var48 = var52;
519 goto RET_LABEL49;
520 RET_LABEL49:(void)0;
521 }
522 var47 = var48;
523 }
524 var33 = var47;
525 }
526 if (var33){
527 {
528 var53 = flow__FlowVisitor__make_sub_flow(self);
529 }
530 {
531 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
532 var56 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
533 if (unlikely(var56 == NULL)) {
534 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
535 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
536 show_backtrace(1);
537 }
538 var54 = var56;
539 RET_LABEL55:(void)0;
540 }
541 }
542 if (varonce) {
543 var57 = varonce;
544 } else {
545 var58 = "AUTOSUB";
546 var59 = 7;
547 var60 = string__NativeString__to_s_with_length(var58, var59);
548 var57 = var60;
549 varonce = var57;
550 }
551 {
552 { /* Inline flow#FlowContext#name= (var54,var57) on <var54:FlowContext> */
553 var54->attrs[COLOR_flow__FlowContext___name].val = var57; /* _name on <var54:FlowContext> */
554 RET_LABEL61:(void)0;
555 }
556 }
557 } else {
558 }
559 } else {
560 }
561 {
562 { /* Inline flow#FlowVisitor#first (self) on <self:FlowVisitor> */
563 var64 = self->attrs[COLOR_flow__FlowVisitor___first].val; /* _first on <self:FlowVisitor> */
564 var62 = var64;
565 RET_LABEL63:(void)0;
566 }
567 }
568 if (var62 == NULL) {
569 var65 = 0; /* <var_node:ANode> cannot be null */
570 } else {
571 { /* Inline kernel#Object#== (var62,var_node) on <var62:nullable ANode> */
572 var_other = var_node;
573 {
574 { /* Inline kernel#Object#is_same_instance (var62,var_other) on <var62:nullable ANode(ANode)> */
575 var70 = var62 == var_other;
576 var68 = var70;
577 goto RET_LABEL69;
578 RET_LABEL69:(void)0;
579 }
580 }
581 var66 = var68;
582 goto RET_LABEL67;
583 RET_LABEL67:(void)0;
584 }
585 var65 = var66;
586 }
587 if (var65){
588 } else {
589 }
590 RET_LABEL:;
591 }
592 /* method flow#FlowVisitor#visit for (self: Object, ANode) */
593 void VIRTUAL_flow__FlowVisitor__visit(val* self, val* p0) {
594 flow__FlowVisitor__visit(self, p0); /* Direct call flow#FlowVisitor#visit on <self:Object(FlowVisitor)>*/
595 RET_LABEL:;
596 }
597 /* method flow#FlowVisitor#visit_expr for (self: FlowVisitor, AExpr): FlowContext */
598 val* flow__FlowVisitor__visit_expr(val* self, val* p0) {
599 val* var /* : FlowContext */;
600 val* var_node /* var node: AExpr */;
601 val* var1 /* : nullable FlowContext */;
602 val* var3 /* : nullable FlowContext */;
603 var_node = p0;
604 {
605 parser_nodes__Visitor__enter_visit(self, var_node); /* Direct call parser_nodes#Visitor#enter_visit on <self:FlowVisitor>*/
606 }
607 {
608 { /* Inline flow#AExpr#after_flow_context (var_node) on <var_node:AExpr> */
609 var3 = var_node->attrs[COLOR_flow__AExpr___after_flow_context].val; /* _after_flow_context on <var_node:AExpr> */
610 var1 = var3;
611 RET_LABEL2:(void)0;
612 }
613 }
614 if (unlikely(var1 == NULL)) {
615 PRINT_ERROR("Runtime error: %s", "Cast failed");
616 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 74);
617 show_backtrace(1);
618 }
619 var = var1;
620 goto RET_LABEL;
621 RET_LABEL:;
622 return var;
623 }
624 /* method flow#FlowVisitor#visit_expr for (self: Object, AExpr): FlowContext */
625 val* VIRTUAL_flow__FlowVisitor__visit_expr(val* self, val* p0) {
626 val* var /* : FlowContext */;
627 val* var1 /* : FlowContext */;
628 var1 = flow__FlowVisitor__visit_expr(self, p0);
629 var = var1;
630 RET_LABEL:;
631 return var;
632 }
633 /* method flow#FlowVisitor#flows for (self: FlowVisitor): Array[FlowContext] */
634 val* flow__FlowVisitor__flows(val* self) {
635 val* var /* : Array[FlowContext] */;
636 val* var1 /* : Array[FlowContext] */;
637 var1 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
638 if (unlikely(var1 == NULL)) {
639 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
640 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 77);
641 show_backtrace(1);
642 }
643 var = var1;
644 RET_LABEL:;
645 return var;
646 }
647 /* method flow#FlowVisitor#flows for (self: Object): Array[FlowContext] */
648 val* VIRTUAL_flow__FlowVisitor__flows(val* self) {
649 val* var /* : Array[FlowContext] */;
650 val* var1 /* : Array[FlowContext] */;
651 val* var3 /* : Array[FlowContext] */;
652 { /* Inline flow#FlowVisitor#flows (self) on <self:Object(FlowVisitor)> */
653 var3 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:Object(FlowVisitor)> */
654 if (unlikely(var3 == NULL)) {
655 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
656 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 77);
657 show_backtrace(1);
658 }
659 var1 = var3;
660 RET_LABEL2:(void)0;
661 }
662 var = var1;
663 RET_LABEL:;
664 return var;
665 }
666 /* method flow#FlowVisitor#make_sub_flow for (self: FlowVisitor): FlowContext */
667 val* flow__FlowVisitor__make_sub_flow(val* self) {
668 val* var /* : FlowContext */;
669 val* var1 /* : FlowContext */;
670 val* var_flow /* var flow: FlowContext */;
671 val* var2 /* : Array[FlowContext] */;
672 val* var4 /* : Array[FlowContext] */;
673 val* var5 /* : nullable ANode */;
674 val* var7 /* : nullable ANode */;
675 val* var9 /* : FlowContext */;
676 val* var11 /* : FlowContext */;
677 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
678 {
679 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:FlowContext>*/;
680 }
681 var_flow = var1;
682 {
683 { /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
684 var4 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
685 if (unlikely(var4 == NULL)) {
686 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
687 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 77);
688 show_backtrace(1);
689 }
690 var2 = var4;
691 RET_LABEL3:(void)0;
692 }
693 }
694 {
695 array__Array__add(var2, var_flow); /* Direct call array#Array#add on <var2:Array[FlowContext]>*/
696 }
697 {
698 { /* Inline parser_nodes#Visitor#current_node (self) on <self:FlowVisitor> */
699 var7 = self->attrs[COLOR_parser_nodes__Visitor___current_node].val; /* _current_node on <self:FlowVisitor> */
700 var5 = var7;
701 RET_LABEL6:(void)0;
702 }
703 }
704 {
705 { /* Inline flow#FlowContext#node= (var_flow,var5) on <var_flow:FlowContext> */
706 var_flow->attrs[COLOR_flow__FlowContext___node].val = var5; /* _node on <var_flow:FlowContext> */
707 RET_LABEL8:(void)0;
708 }
709 }
710 {
711 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
712 var11 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
713 if (unlikely(var11 == NULL)) {
714 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
715 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
716 show_backtrace(1);
717 }
718 var9 = var11;
719 RET_LABEL10:(void)0;
720 }
721 }
722 {
723 flow__FlowContext__add_previous(var_flow, var9); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
724 }
725 {
726 { /* Inline flow#FlowVisitor#current_flow_context= (self,var_flow) on <self:FlowVisitor> */
727 self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_flow; /* _current_flow_context on <self:FlowVisitor> */
728 RET_LABEL12:(void)0;
729 }
730 }
731 var = var_flow;
732 goto RET_LABEL;
733 RET_LABEL:;
734 return var;
735 }
736 /* method flow#FlowVisitor#make_sub_flow for (self: Object): FlowContext */
737 val* VIRTUAL_flow__FlowVisitor__make_sub_flow(val* self) {
738 val* var /* : FlowContext */;
739 val* var1 /* : FlowContext */;
740 var1 = flow__FlowVisitor__make_sub_flow(self);
741 var = var1;
742 RET_LABEL:;
743 return var;
744 }
745 /* method flow#FlowVisitor#make_merge_flow for (self: FlowVisitor, FlowContext, FlowContext): FlowContext */
746 val* flow__FlowVisitor__make_merge_flow(val* self, val* p0, val* p1) {
747 val* var /* : FlowContext */;
748 val* var_flow1 /* var flow1: FlowContext */;
749 val* var_flow2 /* var flow2: FlowContext */;
750 val* var1 /* : FlowContext */;
751 val* var_flow /* var flow: FlowContext */;
752 val* var2 /* : Array[FlowContext] */;
753 val* var4 /* : Array[FlowContext] */;
754 val* var5 /* : nullable ANode */;
755 val* var7 /* : nullable ANode */;
756 var_flow1 = p0;
757 var_flow2 = p1;
758 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
759 {
760 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:FlowContext>*/;
761 }
762 var_flow = var1;
763 {
764 { /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
765 var4 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
766 if (unlikely(var4 == NULL)) {
767 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
768 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 77);
769 show_backtrace(1);
770 }
771 var2 = var4;
772 RET_LABEL3:(void)0;
773 }
774 }
775 {
776 array__Array__add(var2, var_flow); /* Direct call array#Array#add on <var2:Array[FlowContext]>*/
777 }
778 {
779 { /* Inline parser_nodes#Visitor#current_node (self) on <self:FlowVisitor> */
780 var7 = self->attrs[COLOR_parser_nodes__Visitor___current_node].val; /* _current_node on <self:FlowVisitor> */
781 var5 = var7;
782 RET_LABEL6:(void)0;
783 }
784 }
785 {
786 { /* Inline flow#FlowContext#node= (var_flow,var5) on <var_flow:FlowContext> */
787 var_flow->attrs[COLOR_flow__FlowContext___node].val = var5; /* _node on <var_flow:FlowContext> */
788 RET_LABEL8:(void)0;
789 }
790 }
791 {
792 flow__FlowContext__add_previous(var_flow, var_flow1); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
793 }
794 {
795 flow__FlowContext__add_previous(var_flow, var_flow2); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
796 }
797 {
798 { /* Inline flow#FlowVisitor#current_flow_context= (self,var_flow) on <self:FlowVisitor> */
799 self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_flow; /* _current_flow_context on <self:FlowVisitor> */
800 RET_LABEL9:(void)0;
801 }
802 }
803 var = var_flow;
804 goto RET_LABEL;
805 RET_LABEL:;
806 return var;
807 }
808 /* method flow#FlowVisitor#make_merge_flow for (self: Object, FlowContext, FlowContext): FlowContext */
809 val* VIRTUAL_flow__FlowVisitor__make_merge_flow(val* self, val* p0, val* p1) {
810 val* var /* : FlowContext */;
811 val* var1 /* : FlowContext */;
812 var1 = flow__FlowVisitor__make_merge_flow(self, p0, p1);
813 var = var1;
814 RET_LABEL:;
815 return var;
816 }
817 /* method flow#FlowVisitor#make_true_false_flow for (self: FlowVisitor, FlowContext, FlowContext): FlowContext */
818 val* flow__FlowVisitor__make_true_false_flow(val* self, val* p0, val* p1) {
819 val* var /* : FlowContext */;
820 val* var_true_flow /* var true_flow: FlowContext */;
821 val* var_false_flow /* var false_flow: FlowContext */;
822 val* var1 /* : FlowContext */;
823 val* var_flow /* var flow: FlowContext */;
824 val* var2 /* : Array[FlowContext] */;
825 val* var4 /* : Array[FlowContext] */;
826 val* var5 /* : nullable ANode */;
827 val* var7 /* : nullable ANode */;
828 var_true_flow = p0;
829 var_false_flow = p1;
830 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
831 {
832 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:FlowContext>*/;
833 }
834 var_flow = var1;
835 {
836 { /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
837 var4 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
838 if (unlikely(var4 == NULL)) {
839 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
840 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 77);
841 show_backtrace(1);
842 }
843 var2 = var4;
844 RET_LABEL3:(void)0;
845 }
846 }
847 {
848 array__Array__add(var2, var_flow); /* Direct call array#Array#add on <var2:Array[FlowContext]>*/
849 }
850 {
851 { /* Inline parser_nodes#Visitor#current_node (self) on <self:FlowVisitor> */
852 var7 = self->attrs[COLOR_parser_nodes__Visitor___current_node].val; /* _current_node on <self:FlowVisitor> */
853 var5 = var7;
854 RET_LABEL6:(void)0;
855 }
856 }
857 {
858 { /* Inline flow#FlowContext#node= (var_flow,var5) on <var_flow:FlowContext> */
859 var_flow->attrs[COLOR_flow__FlowContext___node].val = var5; /* _node on <var_flow:FlowContext> */
860 RET_LABEL8:(void)0;
861 }
862 }
863 {
864 flow__FlowContext__add_previous(var_flow, var_true_flow); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
865 }
866 {
867 flow__FlowContext__add_previous(var_flow, var_false_flow); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
868 }
869 {
870 { /* Inline flow#FlowContext#when_true= (var_flow,var_true_flow) on <var_flow:FlowContext> */
871 var_flow->attrs[COLOR_flow__FlowContext___when_true].val = var_true_flow; /* _when_true on <var_flow:FlowContext> */
872 RET_LABEL9:(void)0;
873 }
874 }
875 {
876 { /* Inline flow#FlowContext#when_false= (var_flow,var_false_flow) on <var_flow:FlowContext> */
877 var_flow->attrs[COLOR_flow__FlowContext___when_false].val = var_false_flow; /* _when_false on <var_flow:FlowContext> */
878 RET_LABEL10:(void)0;
879 }
880 }
881 {
882 { /* Inline flow#FlowVisitor#current_flow_context= (self,var_flow) on <self:FlowVisitor> */
883 self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_flow; /* _current_flow_context on <self:FlowVisitor> */
884 RET_LABEL11:(void)0;
885 }
886 }
887 var = var_flow;
888 goto RET_LABEL;
889 RET_LABEL:;
890 return var;
891 }
892 /* method flow#FlowVisitor#make_true_false_flow for (self: Object, FlowContext, FlowContext): FlowContext */
893 val* VIRTUAL_flow__FlowVisitor__make_true_false_flow(val* self, val* p0, val* p1) {
894 val* var /* : FlowContext */;
895 val* var1 /* : FlowContext */;
896 var1 = flow__FlowVisitor__make_true_false_flow(self, p0, p1);
897 var = var1;
898 RET_LABEL:;
899 return var;
900 }
901 /* method flow#FlowVisitor#make_sub_true_false_flow for (self: FlowVisitor): FlowContext */
902 val* flow__FlowVisitor__make_sub_true_false_flow(val* self) {
903 val* var /* : FlowContext */;
904 val* var1 /* : FlowContext */;
905 val* var3 /* : FlowContext */;
906 val* var_orig_flow /* var orig_flow: FlowContext */;
907 val* var4 /* : FlowContext */;
908 val* var_true_flow /* var true_flow: FlowContext */;
909 val* var5 /* : Array[FlowContext] */;
910 val* var7 /* : Array[FlowContext] */;
911 val* var8 /* : nullable ANode */;
912 val* var10 /* : nullable ANode */;
913 static val* varonce;
914 val* var12 /* : String */;
915 char* var13 /* : NativeString */;
916 long var14 /* : Int */;
917 val* var15 /* : FlatString */;
918 val* var17 /* : FlowContext */;
919 val* var_false_flow /* var false_flow: FlowContext */;
920 val* var18 /* : Array[FlowContext] */;
921 val* var20 /* : Array[FlowContext] */;
922 val* var21 /* : nullable ANode */;
923 val* var23 /* : nullable ANode */;
924 static val* varonce25;
925 val* var26 /* : String */;
926 char* var27 /* : NativeString */;
927 long var28 /* : Int */;
928 val* var29 /* : FlatString */;
929 val* var31 /* : FlowContext */;
930 {
931 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
932 var3 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
933 if (unlikely(var3 == NULL)) {
934 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
935 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
936 show_backtrace(1);
937 }
938 var1 = var3;
939 RET_LABEL2:(void)0;
940 }
941 }
942 var_orig_flow = var1;
943 var4 = NEW_flow__FlowContext(&type_flow__FlowContext);
944 {
945 ((void (*)(val*))(var4->class->vft[COLOR_kernel__Object__init]))(var4) /* init on <var4:FlowContext>*/;
946 }
947 var_true_flow = var4;
948 {
949 { /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
950 var7 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
951 if (unlikely(var7 == NULL)) {
952 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
953 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 77);
954 show_backtrace(1);
955 }
956 var5 = var7;
957 RET_LABEL6:(void)0;
958 }
959 }
960 {
961 array__Array__add(var5, var_true_flow); /* Direct call array#Array#add on <var5:Array[FlowContext]>*/
962 }
963 {
964 { /* Inline parser_nodes#Visitor#current_node (self) on <self:FlowVisitor> */
965 var10 = self->attrs[COLOR_parser_nodes__Visitor___current_node].val; /* _current_node on <self:FlowVisitor> */
966 var8 = var10;
967 RET_LABEL9:(void)0;
968 }
969 }
970 {
971 { /* Inline flow#FlowContext#node= (var_true_flow,var8) on <var_true_flow:FlowContext> */
972 var_true_flow->attrs[COLOR_flow__FlowContext___node].val = var8; /* _node on <var_true_flow:FlowContext> */
973 RET_LABEL11:(void)0;
974 }
975 }
976 {
977 flow__FlowContext__add_previous(var_true_flow, var_orig_flow); /* Direct call flow#FlowContext#add_previous on <var_true_flow:FlowContext>*/
978 }
979 if (varonce) {
980 var12 = varonce;
981 } else {
982 var13 = "TRUE";
983 var14 = 4;
984 var15 = string__NativeString__to_s_with_length(var13, var14);
985 var12 = var15;
986 varonce = var12;
987 }
988 {
989 { /* Inline flow#FlowContext#name= (var_true_flow,var12) on <var_true_flow:FlowContext> */
990 var_true_flow->attrs[COLOR_flow__FlowContext___name].val = var12; /* _name on <var_true_flow:FlowContext> */
991 RET_LABEL16:(void)0;
992 }
993 }
994 var17 = NEW_flow__FlowContext(&type_flow__FlowContext);
995 {
996 ((void (*)(val*))(var17->class->vft[COLOR_kernel__Object__init]))(var17) /* init on <var17:FlowContext>*/;
997 }
998 var_false_flow = var17;
999 {
1000 { /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
1001 var20 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
1002 if (unlikely(var20 == NULL)) {
1003 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
1004 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 77);
1005 show_backtrace(1);
1006 }
1007 var18 = var20;
1008 RET_LABEL19:(void)0;
1009 }
1010 }
1011 {
1012 array__Array__add(var18, var_false_flow); /* Direct call array#Array#add on <var18:Array[FlowContext]>*/
1013 }
1014 {
1015 { /* Inline parser_nodes#Visitor#current_node (self) on <self:FlowVisitor> */
1016 var23 = self->attrs[COLOR_parser_nodes__Visitor___current_node].val; /* _current_node on <self:FlowVisitor> */
1017 var21 = var23;
1018 RET_LABEL22:(void)0;
1019 }
1020 }
1021 {
1022 { /* Inline flow#FlowContext#node= (var_false_flow,var21) on <var_false_flow:FlowContext> */
1023 var_false_flow->attrs[COLOR_flow__FlowContext___node].val = var21; /* _node on <var_false_flow:FlowContext> */
1024 RET_LABEL24:(void)0;
1025 }
1026 }
1027 {
1028 flow__FlowContext__add_previous(var_false_flow, var_orig_flow); /* Direct call flow#FlowContext#add_previous on <var_false_flow:FlowContext>*/
1029 }
1030 if (varonce25) {
1031 var26 = varonce25;
1032 } else {
1033 var27 = "FALSE";
1034 var28 = 5;
1035 var29 = string__NativeString__to_s_with_length(var27, var28);
1036 var26 = var29;
1037 varonce25 = var26;
1038 }
1039 {
1040 { /* Inline flow#FlowContext#name= (var_false_flow,var26) on <var_false_flow:FlowContext> */
1041 var_false_flow->attrs[COLOR_flow__FlowContext___name].val = var26; /* _name on <var_false_flow:FlowContext> */
1042 RET_LABEL30:(void)0;
1043 }
1044 }
1045 {
1046 var31 = flow__FlowVisitor__make_true_false_flow(self, var_true_flow, var_false_flow);
1047 }
1048 var = var31;
1049 goto RET_LABEL;
1050 RET_LABEL:;
1051 return var;
1052 }
1053 /* method flow#FlowVisitor#make_sub_true_false_flow for (self: Object): FlowContext */
1054 val* VIRTUAL_flow__FlowVisitor__make_sub_true_false_flow(val* self) {
1055 val* var /* : FlowContext */;
1056 val* var1 /* : FlowContext */;
1057 var1 = flow__FlowVisitor__make_sub_true_false_flow(self);
1058 var = var1;
1059 RET_LABEL:;
1060 return var;
1061 }
1062 /* method flow#FlowVisitor#make_unreachable_flow for (self: FlowVisitor): FlowContext */
1063 val* flow__FlowVisitor__make_unreachable_flow(val* self) {
1064 val* var /* : FlowContext */;
1065 val* var1 /* : FlowContext */;
1066 val* var_flow /* var flow: FlowContext */;
1067 val* var2 /* : Array[FlowContext] */;
1068 val* var4 /* : Array[FlowContext] */;
1069 val* var5 /* : nullable ANode */;
1070 val* var7 /* : nullable ANode */;
1071 val* var9 /* : FlowContext */;
1072 val* var11 /* : FlowContext */;
1073 short int var12 /* : Bool */;
1074 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
1075 {
1076 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:FlowContext>*/;
1077 }
1078 var_flow = var1;
1079 {
1080 { /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
1081 var4 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
1082 if (unlikely(var4 == NULL)) {
1083 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
1084 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 77);
1085 show_backtrace(1);
1086 }
1087 var2 = var4;
1088 RET_LABEL3:(void)0;
1089 }
1090 }
1091 {
1092 array__Array__add(var2, var_flow); /* Direct call array#Array#add on <var2:Array[FlowContext]>*/
1093 }
1094 {
1095 { /* Inline parser_nodes#Visitor#current_node (self) on <self:FlowVisitor> */
1096 var7 = self->attrs[COLOR_parser_nodes__Visitor___current_node].val; /* _current_node on <self:FlowVisitor> */
1097 var5 = var7;
1098 RET_LABEL6:(void)0;
1099 }
1100 }
1101 {
1102 { /* Inline flow#FlowContext#node= (var_flow,var5) on <var_flow:FlowContext> */
1103 var_flow->attrs[COLOR_flow__FlowContext___node].val = var5; /* _node on <var_flow:FlowContext> */
1104 RET_LABEL8:(void)0;
1105 }
1106 }
1107 {
1108 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
1109 var11 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
1110 if (unlikely(var11 == NULL)) {
1111 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
1112 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
1113 show_backtrace(1);
1114 }
1115 var9 = var11;
1116 RET_LABEL10:(void)0;
1117 }
1118 }
1119 {
1120 flow__FlowContext__add_previous(var_flow, var9); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
1121 }
1122 var12 = 1;
1123 {
1124 { /* Inline flow#FlowContext#is_marked_unreachable= (var_flow,var12) on <var_flow:FlowContext> */
1125 var_flow->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s = var12; /* _is_marked_unreachable on <var_flow:FlowContext> */
1126 RET_LABEL13:(void)0;
1127 }
1128 }
1129 {
1130 { /* Inline flow#FlowVisitor#current_flow_context= (self,var_flow) on <self:FlowVisitor> */
1131 self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_flow; /* _current_flow_context on <self:FlowVisitor> */
1132 RET_LABEL14:(void)0;
1133 }
1134 }
1135 var = var_flow;
1136 goto RET_LABEL;
1137 RET_LABEL:;
1138 return var;
1139 }
1140 /* method flow#FlowVisitor#make_unreachable_flow for (self: Object): FlowContext */
1141 val* VIRTUAL_flow__FlowVisitor__make_unreachable_flow(val* self) {
1142 val* var /* : FlowContext */;
1143 val* var1 /* : FlowContext */;
1144 var1 = flow__FlowVisitor__make_unreachable_flow(self);
1145 var = var1;
1146 RET_LABEL:;
1147 return var;
1148 }
1149 /* method flow#FlowVisitor#merge_continues_to for (self: FlowVisitor, FlowContext, nullable EscapeMark) */
1150 void flow__FlowVisitor__merge_continues_to(val* self, val* p0, val* p1) {
1151 val* var_before_loop /* var before_loop: FlowContext */;
1152 val* var_escapemark /* var escapemark: nullable EscapeMark */;
1153 val* var /* : null */;
1154 short int var1 /* : Bool */;
1155 short int var2 /* : Bool */;
1156 val* var_other /* var other: nullable Object */;
1157 short int var4 /* : Bool */;
1158 short int var6 /* : Bool */;
1159 val* var7 /* : Array[AEscapeExpr] */;
1160 val* var9 /* : Array[AEscapeExpr] */;
1161 val* var_ /* var : Array[AEscapeExpr] */;
1162 val* var10 /* : ArrayIterator[nullable Object] */;
1163 val* var_11 /* var : ArrayIterator[AEscapeExpr] */;
1164 short int var12 /* : Bool */;
1165 val* var13 /* : nullable Object */;
1166 val* var_b /* var b: AEscapeExpr */;
1167 val* var14 /* : nullable FlowContext */;
1168 val* var_before /* var before: nullable FlowContext */;
1169 val* var15 /* : null */;
1170 short int var16 /* : Bool */;
1171 short int var17 /* : Bool */;
1172 short int var19 /* : Bool */;
1173 short int var21 /* : Bool */;
1174 var_before_loop = p0;
1175 var_escapemark = p1;
1176 var = NULL;
1177 if (var_escapemark == NULL) {
1178 var1 = 1; /* is null */
1179 } else {
1180 var1 = 0; /* arg is null but recv is not */
1181 }
1182 if (0) {
1183 { /* Inline kernel#Object#== (var_escapemark,var) on <var_escapemark:nullable EscapeMark> */
1184 var_other = var;
1185 {
1186 { /* Inline kernel#Object#is_same_instance (var_escapemark,var_other) on <var_escapemark:nullable EscapeMark(EscapeMark)> */
1187 var6 = var_escapemark == var_other;
1188 var4 = var6;
1189 goto RET_LABEL5;
1190 RET_LABEL5:(void)0;
1191 }
1192 }
1193 var2 = var4;
1194 goto RET_LABEL3;
1195 RET_LABEL3:(void)0;
1196 }
1197 var1 = var2;
1198 }
1199 if (var1){
1200 goto RET_LABEL;
1201 } else {
1202 }
1203 {
1204 { /* Inline scope#EscapeMark#escapes (var_escapemark) on <var_escapemark:nullable EscapeMark(EscapeMark)> */
1205 var9 = var_escapemark->attrs[COLOR_scope__EscapeMark___escapes].val; /* _escapes on <var_escapemark:nullable EscapeMark(EscapeMark)> */
1206 if (unlikely(var9 == NULL)) {
1207 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _escapes");
1208 PRINT_ERROR(" (%s:%d)\n", "semantize/scope.nit", 57);
1209 show_backtrace(1);
1210 }
1211 var7 = var9;
1212 RET_LABEL8:(void)0;
1213 }
1214 }
1215 var_ = var7;
1216 {
1217 var10 = array__AbstractArrayRead__iterator(var_);
1218 }
1219 var_11 = var10;
1220 for(;;) {
1221 {
1222 var12 = array__ArrayIterator__is_ok(var_11);
1223 }
1224 if (var12){
1225 {
1226 var13 = array__ArrayIterator__item(var_11);
1227 }
1228 var_b = var13;
1229 {
1230 var14 = flow__AEscapeExpr__before_flow_context(var_b);
1231 }
1232 var_before = var14;
1233 var15 = NULL;
1234 if (var_before == NULL) {
1235 var16 = 1; /* is null */
1236 } else {
1237 var16 = 0; /* arg is null but recv is not */
1238 }
1239 if (0) {
1240 { /* Inline kernel#Object#== (var_before,var15) on <var_before:nullable FlowContext> */
1241 var_other = var15;
1242 {
1243 { /* Inline kernel#Object#is_same_instance (var_before,var_other) on <var_before:nullable FlowContext(FlowContext)> */
1244 var21 = var_before == var_other;
1245 var19 = var21;
1246 goto RET_LABEL20;
1247 RET_LABEL20:(void)0;
1248 }
1249 }
1250 var17 = var19;
1251 goto RET_LABEL18;
1252 RET_LABEL18:(void)0;
1253 }
1254 var16 = var17;
1255 }
1256 if (var16){
1257 goto BREAK_label;
1258 } else {
1259 }
1260 {
1261 flow__FlowContext__add_loop(var_before_loop, var_before); /* Direct call flow#FlowContext#add_loop on <var_before_loop:FlowContext>*/
1262 }
1263 BREAK_label: (void)0;
1264 {
1265 array__ArrayIterator__next(var_11); /* Direct call array#ArrayIterator#next on <var_11:ArrayIterator[AEscapeExpr]>*/
1266 }
1267 } else {
1268 goto BREAK_label22;
1269 }
1270 }
1271 BREAK_label22: (void)0;
1272 {
1273 { /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:ArrayIterator[AEscapeExpr]> */
1274 RET_LABEL23:(void)0;
1275 }
1276 }
1277 RET_LABEL:;
1278 }
1279 /* method flow#FlowVisitor#merge_continues_to for (self: Object, FlowContext, nullable EscapeMark) */
1280 void VIRTUAL_flow__FlowVisitor__merge_continues_to(val* self, val* p0, val* p1) {
1281 flow__FlowVisitor__merge_continues_to(self, p0, p1); /* Direct call flow#FlowVisitor#merge_continues_to on <self:Object(FlowVisitor)>*/
1282 RET_LABEL:;
1283 }
1284 /* method flow#FlowVisitor#merge_breaks for (self: FlowVisitor, nullable EscapeMark) */
1285 void flow__FlowVisitor__merge_breaks(val* self, val* p0) {
1286 val* var_escapemark /* var escapemark: nullable EscapeMark */;
1287 val* var /* : null */;
1288 short int var1 /* : Bool */;
1289 short int var2 /* : Bool */;
1290 val* var_other /* var other: nullable Object */;
1291 short int var4 /* : Bool */;
1292 short int var6 /* : Bool */;
1293 val* var7 /* : Array[AEscapeExpr] */;
1294 val* var9 /* : Array[AEscapeExpr] */;
1295 val* var_ /* var : Array[AEscapeExpr] */;
1296 val* var10 /* : ArrayIterator[nullable Object] */;
1297 val* var_11 /* var : ArrayIterator[AEscapeExpr] */;
1298 short int var12 /* : Bool */;
1299 val* var13 /* : nullable Object */;
1300 val* var_b /* var b: AEscapeExpr */;
1301 val* var14 /* : nullable FlowContext */;
1302 val* var_before /* var before: nullable FlowContext */;
1303 val* var15 /* : null */;
1304 short int var16 /* : Bool */;
1305 short int var17 /* : Bool */;
1306 short int var19 /* : Bool */;
1307 short int var21 /* : Bool */;
1308 val* var22 /* : FlowContext */;
1309 val* var24 /* : FlowContext */;
1310 val* var25 /* : FlowContext */;
1311 var_escapemark = p0;
1312 var = NULL;
1313 if (var_escapemark == NULL) {
1314 var1 = 1; /* is null */
1315 } else {
1316 var1 = 0; /* arg is null but recv is not */
1317 }
1318 if (0) {
1319 { /* Inline kernel#Object#== (var_escapemark,var) on <var_escapemark:nullable EscapeMark> */
1320 var_other = var;
1321 {
1322 { /* Inline kernel#Object#is_same_instance (var_escapemark,var_other) on <var_escapemark:nullable EscapeMark(EscapeMark)> */
1323 var6 = var_escapemark == var_other;
1324 var4 = var6;
1325 goto RET_LABEL5;
1326 RET_LABEL5:(void)0;
1327 }
1328 }
1329 var2 = var4;
1330 goto RET_LABEL3;
1331 RET_LABEL3:(void)0;
1332 }
1333 var1 = var2;
1334 }
1335 if (var1){
1336 goto RET_LABEL;
1337 } else {
1338 }
1339 {
1340 { /* Inline scope#EscapeMark#escapes (var_escapemark) on <var_escapemark:nullable EscapeMark(EscapeMark)> */
1341 var9 = var_escapemark->attrs[COLOR_scope__EscapeMark___escapes].val; /* _escapes on <var_escapemark:nullable EscapeMark(EscapeMark)> */
1342 if (unlikely(var9 == NULL)) {
1343 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _escapes");
1344 PRINT_ERROR(" (%s:%d)\n", "semantize/scope.nit", 57);
1345 show_backtrace(1);
1346 }
1347 var7 = var9;
1348 RET_LABEL8:(void)0;
1349 }
1350 }
1351 var_ = var7;
1352 {
1353 var10 = array__AbstractArrayRead__iterator(var_);
1354 }
1355 var_11 = var10;
1356 for(;;) {
1357 {
1358 var12 = array__ArrayIterator__is_ok(var_11);
1359 }
1360 if (var12){
1361 {
1362 var13 = array__ArrayIterator__item(var_11);
1363 }
1364 var_b = var13;
1365 {
1366 var14 = flow__AEscapeExpr__before_flow_context(var_b);
1367 }
1368 var_before = var14;
1369 var15 = NULL;
1370 if (var_before == NULL) {
1371 var16 = 1; /* is null */
1372 } else {
1373 var16 = 0; /* arg is null but recv is not */
1374 }
1375 if (0) {
1376 { /* Inline kernel#Object#== (var_before,var15) on <var_before:nullable FlowContext> */
1377 var_other = var15;
1378 {
1379 { /* Inline kernel#Object#is_same_instance (var_before,var_other) on <var_before:nullable FlowContext(FlowContext)> */
1380 var21 = var_before == var_other;
1381 var19 = var21;
1382 goto RET_LABEL20;
1383 RET_LABEL20:(void)0;
1384 }
1385 }
1386 var17 = var19;
1387 goto RET_LABEL18;
1388 RET_LABEL18:(void)0;
1389 }
1390 var16 = var17;
1391 }
1392 if (var16){
1393 goto BREAK_label;
1394 } else {
1395 }
1396 {
1397 { /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
1398 var24 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
1399 if (unlikely(var24 == NULL)) {
1400 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
1401 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
1402 show_backtrace(1);
1403 }
1404 var22 = var24;
1405 RET_LABEL23:(void)0;
1406 }
1407 }
1408 {
1409 var25 = flow__FlowVisitor__make_merge_flow(self, var22, var_before);
1410 }
1411 BREAK_label: (void)0;
1412 {
1413 array__ArrayIterator__next(var_11); /* Direct call array#ArrayIterator#next on <var_11:ArrayIterator[AEscapeExpr]>*/
1414 }
1415 } else {
1416 goto BREAK_label26;
1417 }
1418 }
1419 BREAK_label26: (void)0;
1420 {
1421 { /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:ArrayIterator[AEscapeExpr]> */
1422 RET_LABEL27:(void)0;
1423 }
1424 }
1425 RET_LABEL:;
1426 }
1427 /* method flow#FlowVisitor#merge_breaks for (self: Object, nullable EscapeMark) */
1428 void VIRTUAL_flow__FlowVisitor__merge_breaks(val* self, val* p0) {
1429 flow__FlowVisitor__merge_breaks(self, p0); /* Direct call flow#FlowVisitor#merge_breaks on <self:Object(FlowVisitor)>*/
1430 RET_LABEL:;
1431 }
1432 /* method flow#FlowContext#previous for (self: FlowContext): Array[FlowContext] */
1433 val* flow__FlowContext__previous(val* self) {
1434 val* var /* : Array[FlowContext] */;
1435 val* var1 /* : Array[FlowContext] */;
1436 var1 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
1437 if (unlikely(var1 == NULL)) {
1438 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
1439 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 189);
1440 show_backtrace(1);
1441 }
1442 var = var1;
1443 RET_LABEL:;
1444 return var;
1445 }
1446 /* method flow#FlowContext#previous for (self: Object): Array[FlowContext] */
1447 val* VIRTUAL_flow__FlowContext__previous(val* self) {
1448 val* var /* : Array[FlowContext] */;
1449 val* var1 /* : Array[FlowContext] */;
1450 val* var3 /* : Array[FlowContext] */;
1451 { /* Inline flow#FlowContext#previous (self) on <self:Object(FlowContext)> */
1452 var3 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:Object(FlowContext)> */
1453 if (unlikely(var3 == NULL)) {
1454 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
1455 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 189);
1456 show_backtrace(1);
1457 }
1458 var1 = var3;
1459 RET_LABEL2:(void)0;
1460 }
1461 var = var1;
1462 RET_LABEL:;
1463 return var;
1464 }
1465 /* method flow#FlowContext#loops for (self: FlowContext): Array[FlowContext] */
1466 val* flow__FlowContext__loops(val* self) {
1467 val* var /* : Array[FlowContext] */;
1468 val* var1 /* : Array[FlowContext] */;
1469 var1 = self->attrs[COLOR_flow__FlowContext___loops].val; /* _loops on <self:FlowContext> */
1470 if (unlikely(var1 == NULL)) {
1471 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _loops");
1472 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 192);
1473 show_backtrace(1);
1474 }
1475 var = var1;
1476 RET_LABEL:;
1477 return var;
1478 }
1479 /* method flow#FlowContext#loops for (self: Object): Array[FlowContext] */
1480 val* VIRTUAL_flow__FlowContext__loops(val* self) {
1481 val* var /* : Array[FlowContext] */;
1482 val* var1 /* : Array[FlowContext] */;
1483 val* var3 /* : Array[FlowContext] */;
1484 { /* Inline flow#FlowContext#loops (self) on <self:Object(FlowContext)> */
1485 var3 = self->attrs[COLOR_flow__FlowContext___loops].val; /* _loops on <self:Object(FlowContext)> */
1486 if (unlikely(var3 == NULL)) {
1487 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _loops");
1488 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 192);
1489 show_backtrace(1);
1490 }
1491 var1 = var3;
1492 RET_LABEL2:(void)0;
1493 }
1494 var = var1;
1495 RET_LABEL:;
1496 return var;
1497 }
1498 /* method flow#FlowContext#is_marked_unreachable for (self: FlowContext): Bool */
1499 short int flow__FlowContext__is_marked_unreachable(val* self) {
1500 short int var /* : Bool */;
1501 short int var1 /* : Bool */;
1502 var1 = self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s; /* _is_marked_unreachable on <self:FlowContext> */
1503 var = var1;
1504 RET_LABEL:;
1505 return var;
1506 }
1507 /* method flow#FlowContext#is_marked_unreachable for (self: Object): Bool */
1508 short int VIRTUAL_flow__FlowContext__is_marked_unreachable(val* self) {
1509 short int var /* : Bool */;
1510 short int var1 /* : Bool */;
1511 short int var3 /* : Bool */;
1512 { /* Inline flow#FlowContext#is_marked_unreachable (self) on <self:Object(FlowContext)> */
1513 var3 = self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s; /* _is_marked_unreachable on <self:Object(FlowContext)> */
1514 var1 = var3;
1515 RET_LABEL2:(void)0;
1516 }
1517 var = var1;
1518 RET_LABEL:;
1519 return var;
1520 }
1521 /* method flow#FlowContext#is_marked_unreachable= for (self: FlowContext, Bool) */
1522 void flow__FlowContext__is_marked_unreachable_61d(val* self, short int p0) {
1523 self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s = p0; /* _is_marked_unreachable on <self:FlowContext> */
1524 RET_LABEL:;
1525 }
1526 /* method flow#FlowContext#is_marked_unreachable= for (self: Object, Bool) */
1527 void VIRTUAL_flow__FlowContext__is_marked_unreachable_61d(val* self, short int p0) {
1528 { /* Inline flow#FlowContext#is_marked_unreachable= (self,p0) on <self:Object(FlowContext)> */
1529 self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s = p0; /* _is_marked_unreachable on <self:Object(FlowContext)> */
1530 RET_LABEL1:(void)0;
1531 }
1532 RET_LABEL:;
1533 }
1534 /* method flow#FlowContext#is_unreachable for (self: FlowContext): Bool */
1535 short int flow__FlowContext__is_unreachable(val* self) {
1536 short int var /* : Bool */;
1537 short int var1 /* : Bool */;
1538 short int var3 /* : Bool */;
1539 short int var4 /* : Bool */;
1540 short int var5 /* : Bool */;
1541 short int var7 /* : Bool */;
1542 short int var8 /* : Bool */;
1543 val* var9 /* : Array[FlowContext] */;
1544 val* var11 /* : Array[FlowContext] */;
1545 long var12 /* : Int */;
1546 long var14 /* : Int */;
1547 long var15 /* : Int */;
1548 short int var16 /* : Bool */;
1549 short int var17 /* : Bool */;
1550 short int var19 /* : Bool */;
1551 short int var20 /* : Bool */;
1552 short int var21 /* : Bool */;
1553 {
1554 { /* Inline flow#FlowContext#is_marked_unreachable (self) on <self:FlowContext> */
1555 var3 = self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s; /* _is_marked_unreachable on <self:FlowContext> */
1556 var1 = var3;
1557 RET_LABEL2:(void)0;
1558 }
1559 }
1560 if (var1){
1561 var4 = 1;
1562 var = var4;
1563 goto RET_LABEL;
1564 } else {
1565 }
1566 {
1567 { /* Inline flow#FlowContext#is_start (self) on <self:FlowContext> */
1568 var7 = self->attrs[COLOR_flow__FlowContext___is_start].s; /* _is_start on <self:FlowContext> */
1569 var5 = var7;
1570 RET_LABEL6:(void)0;
1571 }
1572 }
1573 if (var5){
1574 var8 = 0;
1575 var = var8;
1576 goto RET_LABEL;
1577 } else {
1578 }
1579 {
1580 { /* Inline flow#FlowContext#previous (self) on <self:FlowContext> */
1581 var11 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
1582 if (unlikely(var11 == NULL)) {
1583 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
1584 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 189);
1585 show_backtrace(1);
1586 }
1587 var9 = var11;
1588 RET_LABEL10:(void)0;
1589 }
1590 }
1591 {
1592 { /* Inline array#AbstractArrayRead#length (var9) on <var9:Array[FlowContext]> */
1593 var14 = var9->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var9:Array[FlowContext]> */
1594 var12 = var14;
1595 RET_LABEL13:(void)0;
1596 }
1597 }
1598 var15 = 0;
1599 {
1600 { /* Inline kernel#Int#== (var12,var15) on <var12:Int> */
1601 var19 = var12 == var15;
1602 var17 = var19;
1603 goto RET_LABEL18;
1604 RET_LABEL18:(void)0;
1605 }
1606 var16 = var17;
1607 }
1608 if (var16){
1609 var20 = 1;
1610 var = var20;
1611 goto RET_LABEL;
1612 } else {
1613 }
1614 var21 = 0;
1615 var = var21;
1616 goto RET_LABEL;
1617 RET_LABEL:;
1618 return var;
1619 }
1620 /* method flow#FlowContext#is_unreachable for (self: Object): Bool */
1621 short int VIRTUAL_flow__FlowContext__is_unreachable(val* self) {
1622 short int var /* : Bool */;
1623 short int var1 /* : Bool */;
1624 var1 = flow__FlowContext__is_unreachable(self);
1625 var = var1;
1626 RET_LABEL:;
1627 return var;
1628 }
1629 /* method flow#FlowContext#is_already_unreachable for (self: FlowContext): Bool */
1630 short int flow__FlowContext__is_already_unreachable(val* self) {
1631 short int var /* : Bool */;
1632 short int var1 /* : Bool */;
1633 var1 = self->attrs[COLOR_flow__FlowContext___is_already_unreachable].s; /* _is_already_unreachable on <self:FlowContext> */
1634 var = var1;
1635 RET_LABEL:;
1636 return var;
1637 }
1638 /* method flow#FlowContext#is_already_unreachable for (self: Object): Bool */
1639 short int VIRTUAL_flow__FlowContext__is_already_unreachable(val* self) {
1640 short int var /* : Bool */;
1641 short int var1 /* : Bool */;
1642 short int var3 /* : Bool */;
1643 { /* Inline flow#FlowContext#is_already_unreachable (self) on <self:Object(FlowContext)> */
1644 var3 = self->attrs[COLOR_flow__FlowContext___is_already_unreachable].s; /* _is_already_unreachable on <self:Object(FlowContext)> */
1645 var1 = var3;
1646 RET_LABEL2:(void)0;
1647 }
1648 var = var1;
1649 RET_LABEL:;
1650 return var;
1651 }
1652 /* method flow#FlowContext#is_already_unreachable= for (self: FlowContext, Bool) */
1653 void flow__FlowContext__is_already_unreachable_61d(val* self, short int p0) {
1654 self->attrs[COLOR_flow__FlowContext___is_already_unreachable].s = p0; /* _is_already_unreachable on <self:FlowContext> */
1655 RET_LABEL:;
1656 }
1657 /* method flow#FlowContext#is_already_unreachable= for (self: Object, Bool) */
1658 void VIRTUAL_flow__FlowContext__is_already_unreachable_61d(val* self, short int p0) {
1659 { /* Inline flow#FlowContext#is_already_unreachable= (self,p0) on <self:Object(FlowContext)> */
1660 self->attrs[COLOR_flow__FlowContext___is_already_unreachable].s = p0; /* _is_already_unreachable on <self:Object(FlowContext)> */
1661 RET_LABEL1:(void)0;
1662 }
1663 RET_LABEL:;
1664 }
1665 /* method flow#FlowContext#is_start for (self: FlowContext): Bool */
1666 short int flow__FlowContext__is_start(val* self) {
1667 short int var /* : Bool */;
1668 short int var1 /* : Bool */;
1669 var1 = self->attrs[COLOR_flow__FlowContext___is_start].s; /* _is_start on <self:FlowContext> */
1670 var = var1;
1671 RET_LABEL:;
1672 return var;
1673 }
1674 /* method flow#FlowContext#is_start for (self: Object): Bool */
1675 short int VIRTUAL_flow__FlowContext__is_start(val* self) {
1676 short int var /* : Bool */;
1677 short int var1 /* : Bool */;
1678 short int var3 /* : Bool */;
1679 { /* Inline flow#FlowContext#is_start (self) on <self:Object(FlowContext)> */
1680 var3 = self->attrs[COLOR_flow__FlowContext___is_start].s; /* _is_start on <self:Object(FlowContext)> */
1681 var1 = var3;
1682 RET_LABEL2:(void)0;
1683 }
1684 var = var1;
1685 RET_LABEL:;
1686 return var;
1687 }
1688 /* method flow#FlowContext#is_start= for (self: FlowContext, Bool) */
1689 void flow__FlowContext__is_start_61d(val* self, short int p0) {
1690 self->attrs[COLOR_flow__FlowContext___is_start].s = p0; /* _is_start on <self:FlowContext> */
1691 RET_LABEL:;
1692 }
1693 /* method flow#FlowContext#is_start= for (self: Object, Bool) */
1694 void VIRTUAL_flow__FlowContext__is_start_61d(val* self, short int p0) {
1695 { /* Inline flow#FlowContext#is_start= (self,p0) on <self:Object(FlowContext)> */
1696 self->attrs[COLOR_flow__FlowContext___is_start].s = p0; /* _is_start on <self:Object(FlowContext)> */
1697 RET_LABEL1:(void)0;
1698 }
1699 RET_LABEL:;
1700 }
1701 /* method flow#FlowContext#node for (self: FlowContext): nullable ANode */
1702 val* flow__FlowContext__node(val* self) {
1703 val* var /* : nullable ANode */;
1704 val* var1 /* : nullable ANode */;
1705 var1 = self->attrs[COLOR_flow__FlowContext___node].val; /* _node on <self:FlowContext> */
1706 var = var1;
1707 RET_LABEL:;
1708 return var;
1709 }
1710 /* method flow#FlowContext#node for (self: Object): nullable ANode */
1711 val* VIRTUAL_flow__FlowContext__node(val* self) {
1712 val* var /* : nullable ANode */;
1713 val* var1 /* : nullable ANode */;
1714 val* var3 /* : nullable ANode */;
1715 { /* Inline flow#FlowContext#node (self) on <self:Object(FlowContext)> */
1716 var3 = self->attrs[COLOR_flow__FlowContext___node].val; /* _node on <self:Object(FlowContext)> */
1717 var1 = var3;
1718 RET_LABEL2:(void)0;
1719 }
1720 var = var1;
1721 RET_LABEL:;
1722 return var;
1723 }
1724 /* method flow#FlowContext#node= for (self: FlowContext, nullable ANode) */
1725 void flow__FlowContext__node_61d(val* self, val* p0) {
1726 self->attrs[COLOR_flow__FlowContext___node].val = p0; /* _node on <self:FlowContext> */
1727 RET_LABEL:;
1728 }
1729 /* method flow#FlowContext#node= for (self: Object, nullable ANode) */
1730 void VIRTUAL_flow__FlowContext__node_61d(val* self, val* p0) {
1731 { /* Inline flow#FlowContext#node= (self,p0) on <self:Object(FlowContext)> */
1732 self->attrs[COLOR_flow__FlowContext___node].val = p0; /* _node on <self:Object(FlowContext)> */
1733 RET_LABEL1:(void)0;
1734 }
1735 RET_LABEL:;
1736 }
1737 /* method flow#FlowContext#name= for (self: FlowContext, String) */
1738 void flow__FlowContext__name_61d(val* self, val* p0) {
1739 self->attrs[COLOR_flow__FlowContext___name].val = p0; /* _name on <self:FlowContext> */
1740 RET_LABEL:;
1741 }
1742 /* method flow#FlowContext#name= for (self: Object, String) */
1743 void VIRTUAL_flow__FlowContext__name_61d(val* self, val* p0) {
1744 { /* Inline flow#FlowContext#name= (self,p0) on <self:Object(FlowContext)> */
1745 self->attrs[COLOR_flow__FlowContext___name].val = p0; /* _name on <self:Object(FlowContext)> */
1746 RET_LABEL1:(void)0;
1747 }
1748 RET_LABEL:;
1749 }
1750 /* method flow#FlowContext#when_true for (self: FlowContext): FlowContext */
1751 val* flow__FlowContext__when_true(val* self) {
1752 val* var /* : FlowContext */;
1753 val* var1 /* : FlowContext */;
1754 var1 = self->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <self:FlowContext> */
1755 if (unlikely(var1 == NULL)) {
1756 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
1757 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
1758 show_backtrace(1);
1759 }
1760 var = var1;
1761 RET_LABEL:;
1762 return var;
1763 }
1764 /* method flow#FlowContext#when_true for (self: Object): FlowContext */
1765 val* VIRTUAL_flow__FlowContext__when_true(val* self) {
1766 val* var /* : FlowContext */;
1767 val* var1 /* : FlowContext */;
1768 val* var3 /* : FlowContext */;
1769 { /* Inline flow#FlowContext#when_true (self) on <self:Object(FlowContext)> */
1770 var3 = self->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <self:Object(FlowContext)> */
1771 if (unlikely(var3 == NULL)) {
1772 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
1773 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
1774 show_backtrace(1);
1775 }
1776 var1 = var3;
1777 RET_LABEL2:(void)0;
1778 }
1779 var = var1;
1780 RET_LABEL:;
1781 return var;
1782 }
1783 /* method flow#FlowContext#when_true= for (self: FlowContext, FlowContext) */
1784 void flow__FlowContext__when_true_61d(val* self, val* p0) {
1785 self->attrs[COLOR_flow__FlowContext___when_true].val = p0; /* _when_true on <self:FlowContext> */
1786 RET_LABEL:;
1787 }
1788 /* method flow#FlowContext#when_true= for (self: Object, FlowContext) */
1789 void VIRTUAL_flow__FlowContext__when_true_61d(val* self, val* p0) {
1790 { /* Inline flow#FlowContext#when_true= (self,p0) on <self:Object(FlowContext)> */
1791 self->attrs[COLOR_flow__FlowContext___when_true].val = p0; /* _when_true on <self:Object(FlowContext)> */
1792 RET_LABEL1:(void)0;
1793 }
1794 RET_LABEL:;
1795 }
1796 /* method flow#FlowContext#when_false for (self: FlowContext): FlowContext */
1797 val* flow__FlowContext__when_false(val* self) {
1798 val* var /* : FlowContext */;
1799 val* var1 /* : FlowContext */;
1800 var1 = self->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <self:FlowContext> */
1801 if (unlikely(var1 == NULL)) {
1802 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
1803 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
1804 show_backtrace(1);
1805 }
1806 var = var1;
1807 RET_LABEL:;
1808 return var;
1809 }
1810 /* method flow#FlowContext#when_false for (self: Object): FlowContext */
1811 val* VIRTUAL_flow__FlowContext__when_false(val* self) {
1812 val* var /* : FlowContext */;
1813 val* var1 /* : FlowContext */;
1814 val* var3 /* : FlowContext */;
1815 { /* Inline flow#FlowContext#when_false (self) on <self:Object(FlowContext)> */
1816 var3 = self->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <self:Object(FlowContext)> */
1817 if (unlikely(var3 == NULL)) {
1818 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
1819 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
1820 show_backtrace(1);
1821 }
1822 var1 = var3;
1823 RET_LABEL2:(void)0;
1824 }
1825 var = var1;
1826 RET_LABEL:;
1827 return var;
1828 }
1829 /* method flow#FlowContext#when_false= for (self: FlowContext, FlowContext) */
1830 void flow__FlowContext__when_false_61d(val* self, val* p0) {
1831 self->attrs[COLOR_flow__FlowContext___when_false].val = p0; /* _when_false on <self:FlowContext> */
1832 RET_LABEL:;
1833 }
1834 /* method flow#FlowContext#when_false= for (self: Object, FlowContext) */
1835 void VIRTUAL_flow__FlowContext__when_false_61d(val* self, val* p0) {
1836 { /* Inline flow#FlowContext#when_false= (self,p0) on <self:Object(FlowContext)> */
1837 self->attrs[COLOR_flow__FlowContext___when_false].val = p0; /* _when_false on <self:Object(FlowContext)> */
1838 RET_LABEL1:(void)0;
1839 }
1840 RET_LABEL:;
1841 }
1842 /* method flow#FlowContext#add_previous for (self: FlowContext, FlowContext) */
1843 void flow__FlowContext__add_previous(val* self, val* p0) {
1844 val* var_flow /* var flow: FlowContext */;
1845 short int var /* : Bool */;
1846 short int var1 /* : Bool */;
1847 short int var2 /* : Bool */;
1848 short int var_ /* var : Bool */;
1849 val* var3 /* : Array[FlowContext] */;
1850 val* var5 /* : Array[FlowContext] */;
1851 short int var6 /* : Bool */;
1852 short int var7 /* : Bool */;
1853 val* var8 /* : Array[FlowContext] */;
1854 val* var10 /* : Array[FlowContext] */;
1855 var_flow = p0;
1856 {
1857 var1 = flow__FlowContext__is_unreachable(var_flow);
1858 }
1859 var2 = !var1;
1860 var_ = var2;
1861 if (var2){
1862 {
1863 { /* Inline flow#FlowContext#previous (self) on <self:FlowContext> */
1864 var5 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
1865 if (unlikely(var5 == NULL)) {
1866 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
1867 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 189);
1868 show_backtrace(1);
1869 }
1870 var3 = var5;
1871 RET_LABEL4:(void)0;
1872 }
1873 }
1874 {
1875 var6 = array__AbstractArrayRead__has(var3, var_flow);
1876 }
1877 var7 = !var6;
1878 var = var7;
1879 } else {
1880 var = var_;
1881 }
1882 if (var){
1883 {
1884 { /* Inline flow#FlowContext#previous (self) on <self:FlowContext> */
1885 var10 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
1886 if (unlikely(var10 == NULL)) {
1887 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
1888 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 189);
1889 show_backtrace(1);
1890 }
1891 var8 = var10;
1892 RET_LABEL9:(void)0;
1893 }
1894 }
1895 {
1896 array__Array__add(var8, var_flow); /* Direct call array#Array#add on <var8:Array[FlowContext]>*/
1897 }
1898 } else {
1899 }
1900 RET_LABEL:;
1901 }
1902 /* method flow#FlowContext#add_previous for (self: Object, FlowContext) */
1903 void VIRTUAL_flow__FlowContext__add_previous(val* self, val* p0) {
1904 flow__FlowContext__add_previous(self, p0); /* Direct call flow#FlowContext#add_previous on <self:Object(FlowContext)>*/
1905 RET_LABEL:;
1906 }
1907 /* method flow#FlowContext#add_loop for (self: FlowContext, FlowContext) */
1908 void flow__FlowContext__add_loop(val* self, val* p0) {
1909 val* var_flow /* var flow: FlowContext */;
1910 short int var /* : Bool */;
1911 short int var1 /* : Bool */;
1912 short int var2 /* : Bool */;
1913 short int var_ /* var : Bool */;
1914 val* var3 /* : Array[FlowContext] */;
1915 val* var5 /* : Array[FlowContext] */;
1916 short int var6 /* : Bool */;
1917 short int var7 /* : Bool */;
1918 val* var8 /* : Array[FlowContext] */;
1919 val* var10 /* : Array[FlowContext] */;
1920 var_flow = p0;
1921 {
1922 var1 = flow__FlowContext__is_unreachable(var_flow);
1923 }
1924 var2 = !var1;
1925 var_ = var2;
1926 if (var2){
1927 {
1928 { /* Inline flow#FlowContext#previous (self) on <self:FlowContext> */
1929 var5 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
1930 if (unlikely(var5 == NULL)) {
1931 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
1932 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 189);
1933 show_backtrace(1);
1934 }
1935 var3 = var5;
1936 RET_LABEL4:(void)0;
1937 }
1938 }
1939 {
1940 var6 = array__AbstractArrayRead__has(var3, var_flow);
1941 }
1942 var7 = !var6;
1943 var = var7;
1944 } else {
1945 var = var_;
1946 }
1947 if (var){
1948 {
1949 { /* Inline flow#FlowContext#loops (self) on <self:FlowContext> */
1950 var10 = self->attrs[COLOR_flow__FlowContext___loops].val; /* _loops on <self:FlowContext> */
1951 if (unlikely(var10 == NULL)) {
1952 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _loops");
1953 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 192);
1954 show_backtrace(1);
1955 }
1956 var8 = var10;
1957 RET_LABEL9:(void)0;
1958 }
1959 }
1960 {
1961 array__Array__add(var8, var_flow); /* Direct call array#Array#add on <var8:Array[FlowContext]>*/
1962 }
1963 } else {
1964 }
1965 RET_LABEL:;
1966 }
1967 /* method flow#FlowContext#add_loop for (self: Object, FlowContext) */
1968 void VIRTUAL_flow__FlowContext__add_loop(val* self, val* p0) {
1969 flow__FlowContext__add_loop(self, p0); /* Direct call flow#FlowContext#add_loop on <self:Object(FlowContext)>*/
1970 RET_LABEL:;
1971 }
1972 /* method flow#ANode#accept_flow_visitor for (self: ANode, FlowVisitor) */
1973 void flow__ANode__accept_flow_visitor(val* self, val* p0) {
1974 val* var_v /* var v: FlowVisitor */;
1975 var_v = p0;
1976 {
1977 ((void (*)(val*, val*))(self->class->vft[COLOR_parser_nodes__ANode__visit_all]))(self, var_v) /* visit_all on <self:ANode>*/;
1978 }
1979 RET_LABEL:;
1980 }
1981 /* method flow#ANode#accept_flow_visitor for (self: Object, FlowVisitor) */
1982 void VIRTUAL_flow__ANode__accept_flow_visitor(val* self, val* p0) {
1983 flow__ANode__accept_flow_visitor(self, p0); /* Direct call flow#ANode#accept_flow_visitor on <self:Object(ANode)>*/
1984 RET_LABEL:;
1985 }
1986 /* method flow#APropdef#do_flow for (self: APropdef, ToolContext) */
1987 void flow__APropdef__do_flow(val* self, val* p0) {
1988 val* var_toolcontext /* var toolcontext: ToolContext */;
1989 val* var /* : FlowVisitor */;
1990 val* var_v /* var v: FlowVisitor */;
1991 var_toolcontext = p0;
1992 var = NEW_flow__FlowVisitor(&type_flow__FlowVisitor);
1993 {
1994 flow__FlowVisitor__init(var, var_toolcontext); /* Direct call flow#FlowVisitor#init on <var:FlowVisitor>*/
1995 }
1996 var_v = var;
1997 {
1998 parser_nodes__Visitor__enter_visit(var_v, self); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
1999 }
2000 RET_LABEL:;
2001 }
2002 /* method flow#APropdef#do_flow for (self: Object, ToolContext) */
2003 void VIRTUAL_flow__APropdef__do_flow(val* self, val* p0) {
2004 flow__APropdef__do_flow(self, p0); /* Direct call flow#APropdef#do_flow on <self:Object(APropdef)>*/
2005 RET_LABEL:;
2006 }
2007 /* method flow#APropdef#before_flow_context= for (self: APropdef, nullable FlowContext) */
2008 void flow__APropdef__before_flow_context_61d(val* self, val* p0) {
2009 self->attrs[COLOR_flow__APropdef___before_flow_context].val = p0; /* _before_flow_context on <self:APropdef> */
2010 RET_LABEL:;
2011 }
2012 /* method flow#APropdef#before_flow_context= for (self: Object, nullable FlowContext) */
2013 void VIRTUAL_flow__APropdef__before_flow_context_61d(val* self, val* p0) {
2014 { /* Inline flow#APropdef#before_flow_context= (self,p0) on <self:Object(APropdef)> */
2015 self->attrs[COLOR_flow__APropdef___before_flow_context].val = p0; /* _before_flow_context on <self:Object(APropdef)> */
2016 RET_LABEL1:(void)0;
2017 }
2018 RET_LABEL:;
2019 }
2020 /* method flow#APropdef#after_flow_context= for (self: APropdef, nullable FlowContext) */
2021 void flow__APropdef__after_flow_context_61d(val* self, val* p0) {
2022 self->attrs[COLOR_flow__APropdef___after_flow_context].val = p0; /* _after_flow_context on <self:APropdef> */
2023 RET_LABEL:;
2024 }
2025 /* method flow#APropdef#after_flow_context= for (self: Object, nullable FlowContext) */
2026 void VIRTUAL_flow__APropdef__after_flow_context_61d(val* self, val* p0) {
2027 { /* Inline flow#APropdef#after_flow_context= (self,p0) on <self:Object(APropdef)> */
2028 self->attrs[COLOR_flow__APropdef___after_flow_context].val = p0; /* _after_flow_context on <self:Object(APropdef)> */
2029 RET_LABEL1:(void)0;
2030 }
2031 RET_LABEL:;
2032 }
2033 /* method flow#APropdef#accept_flow_visitor for (self: APropdef, FlowVisitor) */
2034 void flow__APropdef__accept_flow_visitor(val* self, val* p0) {
2035 val* var_v /* var v: FlowVisitor */;
2036 val* var /* : FlowContext */;
2037 val* var2 /* : FlowContext */;
2038 val* var4 /* : FlowContext */;
2039 val* var6 /* : FlowContext */;
2040 var_v = p0;
2041 {
2042 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2043 var2 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2044 if (unlikely(var2 == NULL)) {
2045 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2046 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2047 show_backtrace(1);
2048 }
2049 var = var2;
2050 RET_LABEL1:(void)0;
2051 }
2052 }
2053 {
2054 { /* Inline flow#APropdef#before_flow_context= (self,var) on <self:APropdef> */
2055 self->attrs[COLOR_flow__APropdef___before_flow_context].val = var; /* _before_flow_context on <self:APropdef> */
2056 RET_LABEL3:(void)0;
2057 }
2058 }
2059 {
2060 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__APropdef__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:APropdef>*/;
2061 }
2062 {
2063 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2064 var6 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2065 if (unlikely(var6 == NULL)) {
2066 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2067 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2068 show_backtrace(1);
2069 }
2070 var4 = var6;
2071 RET_LABEL5:(void)0;
2072 }
2073 }
2074 {
2075 { /* Inline flow#APropdef#after_flow_context= (self,var4) on <self:APropdef> */
2076 self->attrs[COLOR_flow__APropdef___after_flow_context].val = var4; /* _after_flow_context on <self:APropdef> */
2077 RET_LABEL7:(void)0;
2078 }
2079 }
2080 RET_LABEL:;
2081 }
2082 /* method flow#APropdef#accept_flow_visitor for (self: Object, FlowVisitor) */
2083 void VIRTUAL_flow__APropdef__accept_flow_visitor(val* self, val* p0) {
2084 flow__APropdef__accept_flow_visitor(self, p0); /* Direct call flow#APropdef#accept_flow_visitor on <self:Object(APropdef)>*/
2085 RET_LABEL:;
2086 }
2087 /* method flow#AExpr#after_flow_context for (self: AExpr): nullable FlowContext */
2088 val* flow__AExpr__after_flow_context(val* self) {
2089 val* var /* : nullable FlowContext */;
2090 val* var1 /* : nullable FlowContext */;
2091 var1 = self->attrs[COLOR_flow__AExpr___after_flow_context].val; /* _after_flow_context on <self:AExpr> */
2092 var = var1;
2093 RET_LABEL:;
2094 return var;
2095 }
2096 /* method flow#AExpr#after_flow_context for (self: Object): nullable FlowContext */
2097 val* VIRTUAL_flow__AExpr__after_flow_context(val* self) {
2098 val* var /* : nullable FlowContext */;
2099 val* var1 /* : nullable FlowContext */;
2100 val* var3 /* : nullable FlowContext */;
2101 { /* Inline flow#AExpr#after_flow_context (self) on <self:Object(AExpr)> */
2102 var3 = self->attrs[COLOR_flow__AExpr___after_flow_context].val; /* _after_flow_context on <self:Object(AExpr)> */
2103 var1 = var3;
2104 RET_LABEL2:(void)0;
2105 }
2106 var = var1;
2107 RET_LABEL:;
2108 return var;
2109 }
2110 /* method flow#AExpr#after_flow_context= for (self: AExpr, nullable FlowContext) */
2111 void flow__AExpr__after_flow_context_61d(val* self, val* p0) {
2112 self->attrs[COLOR_flow__AExpr___after_flow_context].val = p0; /* _after_flow_context on <self:AExpr> */
2113 RET_LABEL:;
2114 }
2115 /* method flow#AExpr#after_flow_context= for (self: Object, nullable FlowContext) */
2116 void VIRTUAL_flow__AExpr__after_flow_context_61d(val* self, val* p0) {
2117 { /* Inline flow#AExpr#after_flow_context= (self,p0) on <self:Object(AExpr)> */
2118 self->attrs[COLOR_flow__AExpr___after_flow_context].val = p0; /* _after_flow_context on <self:Object(AExpr)> */
2119 RET_LABEL1:(void)0;
2120 }
2121 RET_LABEL:;
2122 }
2123 /* method flow#AVarAssignExpr#accept_flow_visitor for (self: AVarAssignExpr, FlowVisitor) */
2124 void flow__AVarAssignExpr__accept_flow_visitor(val* self, val* p0) {
2125 val* var_v /* var v: FlowVisitor */;
2126 val* var /* : FlowContext */;
2127 var_v = p0;
2128 {
2129 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AVarAssignExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AVarAssignExpr>*/;
2130 }
2131 {
2132 var = flow__FlowVisitor__make_sub_flow(var_v);
2133 }
2134 {
2135 { /* Inline flow#AExpr#after_flow_context= (self,var) on <self:AVarAssignExpr> */
2136 self->attrs[COLOR_flow__AExpr___after_flow_context].val = var; /* _after_flow_context on <self:AVarAssignExpr> */
2137 RET_LABEL1:(void)0;
2138 }
2139 }
2140 RET_LABEL:;
2141 }
2142 /* method flow#AVarAssignExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2143 void VIRTUAL_flow__AVarAssignExpr__accept_flow_visitor(val* self, val* p0) {
2144 flow__AVarAssignExpr__accept_flow_visitor(self, p0); /* Direct call flow#AVarAssignExpr#accept_flow_visitor on <self:Object(AVarAssignExpr)>*/
2145 RET_LABEL:;
2146 }
2147 /* method flow#AReassignFormExpr#accept_flow_visitor for (self: AReassignFormExpr, FlowVisitor) */
2148 void flow__AReassignFormExpr__accept_flow_visitor(val* self, val* p0) {
2149 val* var_v /* var v: FlowVisitor */;
2150 val* var /* : FlowContext */;
2151 var_v = p0;
2152 {
2153 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AReassignFormExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AReassignFormExpr>*/;
2154 }
2155 {
2156 var = flow__FlowVisitor__make_sub_flow(var_v);
2157 }
2158 {
2159 { /* Inline flow#AExpr#after_flow_context= (self,var) on <self:AReassignFormExpr> */
2160 self->attrs[COLOR_flow__AExpr___after_flow_context].val = var; /* _after_flow_context on <self:AReassignFormExpr> */
2161 RET_LABEL1:(void)0;
2162 }
2163 }
2164 RET_LABEL:;
2165 }
2166 /* method flow#AReassignFormExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2167 void VIRTUAL_flow__AReassignFormExpr__accept_flow_visitor(val* self, val* p0) {
2168 flow__AReassignFormExpr__accept_flow_visitor(self, p0); /* Direct call flow#AReassignFormExpr#accept_flow_visitor on <self:Object(AReassignFormExpr)>*/
2169 RET_LABEL:;
2170 }
2171 /* method flow#ABlockExpr#accept_flow_visitor for (self: ABlockExpr, FlowVisitor) */
2172 void flow__ABlockExpr__accept_flow_visitor(val* self, val* p0) {
2173 val* var_v /* var v: FlowVisitor */;
2174 val* var /* : ANodes[AExpr] */;
2175 val* var2 /* : ANodes[AExpr] */;
2176 val* var_ /* var : ANodes[AExpr] */;
2177 val* var3 /* : Iterator[ANode] */;
2178 val* var_4 /* var : Iterator[AExpr] */;
2179 short int var5 /* : Bool */;
2180 val* var6 /* : nullable Object */;
2181 val* var_e /* var e: AExpr */;
2182 val* var7 /* : FlowContext */;
2183 val* var9 /* : FlowContext */;
2184 short int var10 /* : Bool */;
2185 short int var11 /* : Bool */;
2186 val* var12 /* : FlowContext */;
2187 val* var14 /* : FlowContext */;
2188 short int var15 /* : Bool */;
2189 short int var17 /* : Bool */;
2190 short int var18 /* : Bool */;
2191 val* var19 /* : FlowContext */;
2192 val* var21 /* : FlowContext */;
2193 short int var22 /* : Bool */;
2194 val* var24 /* : ToolContext */;
2195 val* var26 /* : ToolContext */;
2196 val* var27 /* : Location */;
2197 static val* varonce;
2198 val* var28 /* : String */;
2199 char* var29 /* : NativeString */;
2200 long var30 /* : Int */;
2201 val* var31 /* : FlatString */;
2202 var_v = p0;
2203 {
2204 { /* Inline parser_nodes#ABlockExpr#n_expr (self) on <self:ABlockExpr> */
2205 var2 = self->attrs[COLOR_parser_nodes__ABlockExpr___n_expr].val; /* _n_expr on <self:ABlockExpr> */
2206 if (unlikely(var2 == NULL)) {
2207 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
2208 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1321);
2209 show_backtrace(1);
2210 }
2211 var = var2;
2212 RET_LABEL1:(void)0;
2213 }
2214 }
2215 var_ = var;
2216 {
2217 var3 = parser_nodes__ANodes__iterator(var_);
2218 }
2219 var_4 = var3;
2220 for(;;) {
2221 {
2222 var5 = ((short int (*)(val*))(var_4->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_4) /* is_ok on <var_4:Iterator[AExpr]>*/;
2223 }
2224 if (var5){
2225 {
2226 var6 = ((val* (*)(val*))(var_4->class->vft[COLOR_abstract_collection__Iterator__item]))(var_4) /* item on <var_4:Iterator[AExpr]>*/;
2227 }
2228 var_e = var6;
2229 {
2230 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2231 var9 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2232 if (unlikely(var9 == NULL)) {
2233 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2234 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2235 show_backtrace(1);
2236 }
2237 var7 = var9;
2238 RET_LABEL8:(void)0;
2239 }
2240 }
2241 {
2242 var10 = flow__FlowContext__is_unreachable(var7);
2243 }
2244 var11 = !var10;
2245 if (var11){
2246 {
2247 parser_nodes__Visitor__enter_visit(var_v, var_e); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
2248 }
2249 } else {
2250 {
2251 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2252 var14 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2253 if (unlikely(var14 == NULL)) {
2254 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2255 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2256 show_backtrace(1);
2257 }
2258 var12 = var14;
2259 RET_LABEL13:(void)0;
2260 }
2261 }
2262 {
2263 { /* Inline flow#FlowContext#is_already_unreachable (var12) on <var12:FlowContext> */
2264 var17 = var12->attrs[COLOR_flow__FlowContext___is_already_unreachable].s; /* _is_already_unreachable on <var12:FlowContext> */
2265 var15 = var17;
2266 RET_LABEL16:(void)0;
2267 }
2268 }
2269 var18 = !var15;
2270 if (var18){
2271 {
2272 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2273 var21 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2274 if (unlikely(var21 == NULL)) {
2275 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2276 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2277 show_backtrace(1);
2278 }
2279 var19 = var21;
2280 RET_LABEL20:(void)0;
2281 }
2282 }
2283 var22 = 1;
2284 {
2285 { /* Inline flow#FlowContext#is_already_unreachable= (var19,var22) on <var19:FlowContext> */
2286 var19->attrs[COLOR_flow__FlowContext___is_already_unreachable].s = var22; /* _is_already_unreachable on <var19:FlowContext> */
2287 RET_LABEL23:(void)0;
2288 }
2289 }
2290 {
2291 { /* Inline flow#FlowVisitor#toolcontext (var_v) on <var_v:FlowVisitor> */
2292 var26 = var_v->attrs[COLOR_flow__FlowVisitor___toolcontext].val; /* _toolcontext on <var_v:FlowVisitor> */
2293 if (unlikely(var26 == NULL)) {
2294 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
2295 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 38);
2296 show_backtrace(1);
2297 }
2298 var24 = var26;
2299 RET_LABEL25:(void)0;
2300 }
2301 }
2302 {
2303 var27 = parser_nodes__ANode__hot_location(var_e);
2304 }
2305 if (varonce) {
2306 var28 = varonce;
2307 } else {
2308 var29 = "Error: unreachable statement.";
2309 var30 = 29;
2310 var31 = string__NativeString__to_s_with_length(var29, var30);
2311 var28 = var31;
2312 varonce = var28;
2313 }
2314 {
2315 toolcontext__ToolContext__error(var24, var27, var28); /* Direct call toolcontext#ToolContext#error on <var24:ToolContext>*/
2316 }
2317 } else {
2318 }
2319 }
2320 {
2321 ((void (*)(val*))(var_4->class->vft[COLOR_abstract_collection__Iterator__next]))(var_4) /* next on <var_4:Iterator[AExpr]>*/;
2322 }
2323 } else {
2324 goto BREAK_label;
2325 }
2326 }
2327 BREAK_label: (void)0;
2328 {
2329 { /* Inline abstract_collection#Iterator#finish (var_4) on <var_4:Iterator[AExpr]> */
2330 RET_LABEL32:(void)0;
2331 }
2332 }
2333 RET_LABEL:;
2334 }
2335 /* method flow#ABlockExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2336 void VIRTUAL_flow__ABlockExpr__accept_flow_visitor(val* self, val* p0) {
2337 flow__ABlockExpr__accept_flow_visitor(self, p0); /* Direct call flow#ABlockExpr#accept_flow_visitor on <self:Object(ABlockExpr)>*/
2338 RET_LABEL:;
2339 }
2340 /* method flow#AReturnExpr#accept_flow_visitor for (self: AReturnExpr, FlowVisitor) */
2341 void flow__AReturnExpr__accept_flow_visitor(val* self, val* p0) {
2342 val* var_v /* var v: FlowVisitor */;
2343 val* var /* : FlowContext */;
2344 var_v = p0;
2345 {
2346 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AReturnExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AReturnExpr>*/;
2347 }
2348 {
2349 var = flow__FlowVisitor__make_unreachable_flow(var_v);
2350 }
2351 RET_LABEL:;
2352 }
2353 /* method flow#AReturnExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2354 void VIRTUAL_flow__AReturnExpr__accept_flow_visitor(val* self, val* p0) {
2355 flow__AReturnExpr__accept_flow_visitor(self, p0); /* Direct call flow#AReturnExpr#accept_flow_visitor on <self:Object(AReturnExpr)>*/
2356 RET_LABEL:;
2357 }
2358 /* method flow#AEscapeExpr#before_flow_context for (self: AEscapeExpr): nullable FlowContext */
2359 val* flow__AEscapeExpr__before_flow_context(val* self) {
2360 val* var /* : nullable FlowContext */;
2361 val* var1 /* : nullable FlowContext */;
2362 val* var3 /* : nullable FlowContext */;
2363 val* var_after /* var after: nullable FlowContext */;
2364 val* var4 /* : null */;
2365 short int var5 /* : Bool */;
2366 short int var6 /* : Bool */;
2367 val* var_other /* var other: nullable Object */;
2368 short int var8 /* : Bool */;
2369 short int var10 /* : Bool */;
2370 val* var11 /* : null */;
2371 val* var12 /* : Array[FlowContext] */;
2372 val* var14 /* : Array[FlowContext] */;
2373 val* var15 /* : nullable Object */;
2374 {
2375 { /* Inline flow#AExpr#after_flow_context (self) on <self:AEscapeExpr> */
2376 var3 = self->attrs[COLOR_flow__AExpr___after_flow_context].val; /* _after_flow_context on <self:AEscapeExpr> */
2377 var1 = var3;
2378 RET_LABEL2:(void)0;
2379 }
2380 }
2381 var_after = var1;
2382 var4 = NULL;
2383 if (var_after == NULL) {
2384 var5 = 1; /* is null */
2385 } else {
2386 var5 = 0; /* arg is null but recv is not */
2387 }
2388 if (0) {
2389 { /* Inline kernel#Object#== (var_after,var4) on <var_after:nullable FlowContext> */
2390 var_other = var4;
2391 {
2392 { /* Inline kernel#Object#is_same_instance (var_after,var_other) on <var_after:nullable FlowContext(FlowContext)> */
2393 var10 = var_after == var_other;
2394 var8 = var10;
2395 goto RET_LABEL9;
2396 RET_LABEL9:(void)0;
2397 }
2398 }
2399 var6 = var8;
2400 goto RET_LABEL7;
2401 RET_LABEL7:(void)0;
2402 }
2403 var5 = var6;
2404 }
2405 if (var5){
2406 var11 = NULL;
2407 var = var11;
2408 goto RET_LABEL;
2409 } else {
2410 }
2411 {
2412 { /* Inline flow#FlowContext#previous (var_after) on <var_after:nullable FlowContext(FlowContext)> */
2413 var14 = var_after->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <var_after:nullable FlowContext(FlowContext)> */
2414 if (unlikely(var14 == NULL)) {
2415 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
2416 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 189);
2417 show_backtrace(1);
2418 }
2419 var12 = var14;
2420 RET_LABEL13:(void)0;
2421 }
2422 }
2423 {
2424 var15 = abstract_collection__SequenceRead__first(var12);
2425 }
2426 var = var15;
2427 goto RET_LABEL;
2428 RET_LABEL:;
2429 return var;
2430 }
2431 /* method flow#AEscapeExpr#before_flow_context for (self: Object): nullable FlowContext */
2432 val* VIRTUAL_flow__AEscapeExpr__before_flow_context(val* self) {
2433 val* var /* : nullable FlowContext */;
2434 val* var1 /* : nullable FlowContext */;
2435 var1 = flow__AEscapeExpr__before_flow_context(self);
2436 var = var1;
2437 RET_LABEL:;
2438 return var;
2439 }
2440 /* method flow#AEscapeExpr#accept_flow_visitor for (self: AEscapeExpr, FlowVisitor) */
2441 void flow__AEscapeExpr__accept_flow_visitor(val* self, val* p0) {
2442 val* var_v /* var v: FlowVisitor */;
2443 val* var /* : FlowContext */;
2444 var_v = p0;
2445 {
2446 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AEscapeExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AEscapeExpr>*/;
2447 }
2448 {
2449 var = flow__FlowVisitor__make_unreachable_flow(var_v);
2450 }
2451 RET_LABEL:;
2452 }
2453 /* method flow#AEscapeExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2454 void VIRTUAL_flow__AEscapeExpr__accept_flow_visitor(val* self, val* p0) {
2455 flow__AEscapeExpr__accept_flow_visitor(self, p0); /* Direct call flow#AEscapeExpr#accept_flow_visitor on <self:Object(AEscapeExpr)>*/
2456 RET_LABEL:;
2457 }
2458 /* method flow#AAbortExpr#accept_flow_visitor for (self: AAbortExpr, FlowVisitor) */
2459 void flow__AAbortExpr__accept_flow_visitor(val* self, val* p0) {
2460 val* var_v /* var v: FlowVisitor */;
2461 val* var /* : FlowContext */;
2462 var_v = p0;
2463 {
2464 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AAbortExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AAbortExpr>*/;
2465 }
2466 {
2467 var = flow__FlowVisitor__make_unreachable_flow(var_v);
2468 }
2469 RET_LABEL:;
2470 }
2471 /* method flow#AAbortExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2472 void VIRTUAL_flow__AAbortExpr__accept_flow_visitor(val* self, val* p0) {
2473 flow__AAbortExpr__accept_flow_visitor(self, p0); /* Direct call flow#AAbortExpr#accept_flow_visitor on <self:Object(AAbortExpr)>*/
2474 RET_LABEL:;
2475 }
2476 /* method flow#ADoExpr#accept_flow_visitor for (self: ADoExpr, FlowVisitor) */
2477 void flow__ADoExpr__accept_flow_visitor(val* self, val* p0) {
2478 val* var_v /* var v: FlowVisitor */;
2479 val* var /* : nullable EscapeMark */;
2480 val* var2 /* : nullable EscapeMark */;
2481 var_v = p0;
2482 {
2483 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__ADoExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:ADoExpr>*/;
2484 }
2485 {
2486 { /* Inline scope#ADoExpr#break_mark (self) on <self:ADoExpr> */
2487 var2 = self->attrs[COLOR_scope__ADoExpr___break_mark].val; /* _break_mark on <self:ADoExpr> */
2488 var = var2;
2489 RET_LABEL1:(void)0;
2490 }
2491 }
2492 {
2493 flow__FlowVisitor__merge_breaks(var_v, var); /* Direct call flow#FlowVisitor#merge_breaks on <var_v:FlowVisitor>*/
2494 }
2495 RET_LABEL:;
2496 }
2497 /* method flow#ADoExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2498 void VIRTUAL_flow__ADoExpr__accept_flow_visitor(val* self, val* p0) {
2499 flow__ADoExpr__accept_flow_visitor(self, p0); /* Direct call flow#ADoExpr#accept_flow_visitor on <self:Object(ADoExpr)>*/
2500 RET_LABEL:;
2501 }
2502 /* method flow#AIfExpr#accept_flow_visitor for (self: AIfExpr, FlowVisitor) */
2503 void flow__AIfExpr__accept_flow_visitor(val* self, val* p0) {
2504 val* var_v /* var v: FlowVisitor */;
2505 val* var /* : AExpr */;
2506 val* var2 /* : AExpr */;
2507 val* var3 /* : FlowContext */;
2508 val* var_after_expr /* var after_expr: FlowContext */;
2509 val* var4 /* : FlowContext */;
2510 val* var6 /* : FlowContext */;
2511 val* var8 /* : nullable AExpr */;
2512 val* var10 /* : nullable AExpr */;
2513 val* var11 /* : FlowContext */;
2514 val* var13 /* : FlowContext */;
2515 val* var_after_then /* var after_then: FlowContext */;
2516 val* var14 /* : FlowContext */;
2517 val* var16 /* : FlowContext */;
2518 val* var18 /* : nullable AExpr */;
2519 val* var20 /* : nullable AExpr */;
2520 val* var21 /* : FlowContext */;
2521 val* var23 /* : FlowContext */;
2522 val* var_after_else /* var after_else: FlowContext */;
2523 val* var24 /* : FlowContext */;
2524 var_v = p0;
2525 {
2526 { /* Inline parser_nodes#AIfExpr#n_expr (self) on <self:AIfExpr> */
2527 var2 = self->attrs[COLOR_parser_nodes__AIfExpr___n_expr].val; /* _n_expr on <self:AIfExpr> */
2528 if (unlikely(var2 == NULL)) {
2529 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
2530 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1387);
2531 show_backtrace(1);
2532 }
2533 var = var2;
2534 RET_LABEL1:(void)0;
2535 }
2536 }
2537 {
2538 var3 = flow__FlowVisitor__visit_expr(var_v, var);
2539 }
2540 var_after_expr = var3;
2541 {
2542 { /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
2543 var6 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
2544 if (unlikely(var6 == NULL)) {
2545 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
2546 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
2547 show_backtrace(1);
2548 }
2549 var4 = var6;
2550 RET_LABEL5:(void)0;
2551 }
2552 }
2553 {
2554 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var4) on <var_v:FlowVisitor> */
2555 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var4; /* _current_flow_context on <var_v:FlowVisitor> */
2556 RET_LABEL7:(void)0;
2557 }
2558 }
2559 {
2560 { /* Inline parser_nodes#AIfExpr#n_then (self) on <self:AIfExpr> */
2561 var10 = self->attrs[COLOR_parser_nodes__AIfExpr___n_then].val; /* _n_then on <self:AIfExpr> */
2562 var8 = var10;
2563 RET_LABEL9:(void)0;
2564 }
2565 }
2566 {
2567 parser_nodes__Visitor__enter_visit(var_v, var8); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
2568 }
2569 {
2570 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2571 var13 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2572 if (unlikely(var13 == NULL)) {
2573 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2574 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2575 show_backtrace(1);
2576 }
2577 var11 = var13;
2578 RET_LABEL12:(void)0;
2579 }
2580 }
2581 var_after_then = var11;
2582 {
2583 { /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
2584 var16 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
2585 if (unlikely(var16 == NULL)) {
2586 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
2587 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
2588 show_backtrace(1);
2589 }
2590 var14 = var16;
2591 RET_LABEL15:(void)0;
2592 }
2593 }
2594 {
2595 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var14) on <var_v:FlowVisitor> */
2596 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var14; /* _current_flow_context on <var_v:FlowVisitor> */
2597 RET_LABEL17:(void)0;
2598 }
2599 }
2600 {
2601 { /* Inline parser_nodes#AIfExpr#n_else (self) on <self:AIfExpr> */
2602 var20 = self->attrs[COLOR_parser_nodes__AIfExpr___n_else].val; /* _n_else on <self:AIfExpr> */
2603 var18 = var20;
2604 RET_LABEL19:(void)0;
2605 }
2606 }
2607 {
2608 parser_nodes__Visitor__enter_visit(var_v, var18); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
2609 }
2610 {
2611 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2612 var23 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2613 if (unlikely(var23 == NULL)) {
2614 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2615 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2616 show_backtrace(1);
2617 }
2618 var21 = var23;
2619 RET_LABEL22:(void)0;
2620 }
2621 }
2622 var_after_else = var21;
2623 {
2624 var24 = flow__FlowVisitor__make_merge_flow(var_v, var_after_then, var_after_else);
2625 }
2626 RET_LABEL:;
2627 }
2628 /* method flow#AIfExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2629 void VIRTUAL_flow__AIfExpr__accept_flow_visitor(val* self, val* p0) {
2630 flow__AIfExpr__accept_flow_visitor(self, p0); /* Direct call flow#AIfExpr#accept_flow_visitor on <self:Object(AIfExpr)>*/
2631 RET_LABEL:;
2632 }
2633 /* method flow#AIfexprExpr#accept_flow_visitor for (self: AIfexprExpr, FlowVisitor) */
2634 void flow__AIfexprExpr__accept_flow_visitor(val* self, val* p0) {
2635 val* var_v /* var v: FlowVisitor */;
2636 val* var /* : AExpr */;
2637 val* var2 /* : AExpr */;
2638 val* var3 /* : FlowContext */;
2639 val* var_after_expr /* var after_expr: FlowContext */;
2640 val* var4 /* : FlowContext */;
2641 val* var6 /* : FlowContext */;
2642 val* var8 /* : AExpr */;
2643 val* var10 /* : AExpr */;
2644 val* var11 /* : FlowContext */;
2645 val* var13 /* : FlowContext */;
2646 val* var_after_then /* var after_then: FlowContext */;
2647 val* var14 /* : FlowContext */;
2648 val* var16 /* : FlowContext */;
2649 val* var18 /* : AExpr */;
2650 val* var20 /* : AExpr */;
2651 val* var21 /* : FlowContext */;
2652 val* var23 /* : FlowContext */;
2653 val* var_after_else /* var after_else: FlowContext */;
2654 val* var24 /* : FlowContext */;
2655 var_v = p0;
2656 {
2657 { /* Inline parser_nodes#AIfexprExpr#n_expr (self) on <self:AIfexprExpr> */
2658 var2 = self->attrs[COLOR_parser_nodes__AIfexprExpr___n_expr].val; /* _n_expr on <self:AIfexprExpr> */
2659 if (unlikely(var2 == NULL)) {
2660 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
2661 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1396);
2662 show_backtrace(1);
2663 }
2664 var = var2;
2665 RET_LABEL1:(void)0;
2666 }
2667 }
2668 {
2669 var3 = flow__FlowVisitor__visit_expr(var_v, var);
2670 }
2671 var_after_expr = var3;
2672 {
2673 { /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
2674 var6 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
2675 if (unlikely(var6 == NULL)) {
2676 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
2677 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
2678 show_backtrace(1);
2679 }
2680 var4 = var6;
2681 RET_LABEL5:(void)0;
2682 }
2683 }
2684 {
2685 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var4) on <var_v:FlowVisitor> */
2686 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var4; /* _current_flow_context on <var_v:FlowVisitor> */
2687 RET_LABEL7:(void)0;
2688 }
2689 }
2690 {
2691 { /* Inline parser_nodes#AIfexprExpr#n_then (self) on <self:AIfexprExpr> */
2692 var10 = self->attrs[COLOR_parser_nodes__AIfexprExpr___n_then].val; /* _n_then on <self:AIfexprExpr> */
2693 if (unlikely(var10 == NULL)) {
2694 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_then");
2695 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1398);
2696 show_backtrace(1);
2697 }
2698 var8 = var10;
2699 RET_LABEL9:(void)0;
2700 }
2701 }
2702 {
2703 parser_nodes__Visitor__enter_visit(var_v, var8); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
2704 }
2705 {
2706 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2707 var13 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2708 if (unlikely(var13 == NULL)) {
2709 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2710 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2711 show_backtrace(1);
2712 }
2713 var11 = var13;
2714 RET_LABEL12:(void)0;
2715 }
2716 }
2717 var_after_then = var11;
2718 {
2719 { /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
2720 var16 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
2721 if (unlikely(var16 == NULL)) {
2722 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
2723 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
2724 show_backtrace(1);
2725 }
2726 var14 = var16;
2727 RET_LABEL15:(void)0;
2728 }
2729 }
2730 {
2731 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var14) on <var_v:FlowVisitor> */
2732 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var14; /* _current_flow_context on <var_v:FlowVisitor> */
2733 RET_LABEL17:(void)0;
2734 }
2735 }
2736 {
2737 { /* Inline parser_nodes#AIfexprExpr#n_else (self) on <self:AIfexprExpr> */
2738 var20 = self->attrs[COLOR_parser_nodes__AIfexprExpr___n_else].val; /* _n_else on <self:AIfexprExpr> */
2739 if (unlikely(var20 == NULL)) {
2740 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_else");
2741 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1400);
2742 show_backtrace(1);
2743 }
2744 var18 = var20;
2745 RET_LABEL19:(void)0;
2746 }
2747 }
2748 {
2749 parser_nodes__Visitor__enter_visit(var_v, var18); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
2750 }
2751 {
2752 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2753 var23 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2754 if (unlikely(var23 == NULL)) {
2755 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2756 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2757 show_backtrace(1);
2758 }
2759 var21 = var23;
2760 RET_LABEL22:(void)0;
2761 }
2762 }
2763 var_after_else = var21;
2764 {
2765 var24 = flow__FlowVisitor__make_merge_flow(var_v, var_after_then, var_after_else);
2766 }
2767 RET_LABEL:;
2768 }
2769 /* method flow#AIfexprExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2770 void VIRTUAL_flow__AIfexprExpr__accept_flow_visitor(val* self, val* p0) {
2771 flow__AIfexprExpr__accept_flow_visitor(self, p0); /* Direct call flow#AIfexprExpr#accept_flow_visitor on <self:Object(AIfexprExpr)>*/
2772 RET_LABEL:;
2773 }
2774 /* method flow#AWhileExpr#accept_flow_visitor for (self: AWhileExpr, FlowVisitor) */
2775 void flow__AWhileExpr__accept_flow_visitor(val* self, val* p0) {
2776 val* var_v /* var v: FlowVisitor */;
2777 val* var /* : FlowContext */;
2778 val* var_before_loop /* var before_loop: FlowContext */;
2779 val* var1 /* : AExpr */;
2780 val* var3 /* : AExpr */;
2781 val* var4 /* : FlowContext */;
2782 val* var_after_expr /* var after_expr: FlowContext */;
2783 val* var5 /* : FlowContext */;
2784 val* var7 /* : FlowContext */;
2785 val* var9 /* : nullable AExpr */;
2786 val* var11 /* : nullable AExpr */;
2787 val* var12 /* : FlowContext */;
2788 val* var14 /* : FlowContext */;
2789 val* var_after_block /* var after_block: FlowContext */;
2790 val* var15 /* : nullable EscapeMark */;
2791 val* var17 /* : nullable EscapeMark */;
2792 val* var18 /* : FlowContext */;
2793 val* var20 /* : FlowContext */;
2794 val* var22 /* : nullable EscapeMark */;
2795 val* var24 /* : nullable EscapeMark */;
2796 var_v = p0;
2797 {
2798 var = flow__FlowVisitor__make_sub_flow(var_v);
2799 }
2800 var_before_loop = var;
2801 {
2802 { /* Inline parser_nodes#AWhileExpr#n_expr (self) on <self:AWhileExpr> */
2803 var3 = self->attrs[COLOR_parser_nodes__AWhileExpr___n_expr].val; /* _n_expr on <self:AWhileExpr> */
2804 if (unlikely(var3 == NULL)) {
2805 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
2806 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1408);
2807 show_backtrace(1);
2808 }
2809 var1 = var3;
2810 RET_LABEL2:(void)0;
2811 }
2812 }
2813 {
2814 var4 = flow__FlowVisitor__visit_expr(var_v, var1);
2815 }
2816 var_after_expr = var4;
2817 {
2818 { /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
2819 var7 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
2820 if (unlikely(var7 == NULL)) {
2821 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
2822 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
2823 show_backtrace(1);
2824 }
2825 var5 = var7;
2826 RET_LABEL6:(void)0;
2827 }
2828 }
2829 {
2830 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var5) on <var_v:FlowVisitor> */
2831 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var5; /* _current_flow_context on <var_v:FlowVisitor> */
2832 RET_LABEL8:(void)0;
2833 }
2834 }
2835 {
2836 { /* Inline parser_nodes#AWhileExpr#n_block (self) on <self:AWhileExpr> */
2837 var11 = self->attrs[COLOR_parser_nodes__AWhileExpr___n_block].val; /* _n_block on <self:AWhileExpr> */
2838 var9 = var11;
2839 RET_LABEL10:(void)0;
2840 }
2841 }
2842 {
2843 parser_nodes__Visitor__enter_visit(var_v, var9); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
2844 }
2845 {
2846 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2847 var14 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2848 if (unlikely(var14 == NULL)) {
2849 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2850 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2851 show_backtrace(1);
2852 }
2853 var12 = var14;
2854 RET_LABEL13:(void)0;
2855 }
2856 }
2857 var_after_block = var12;
2858 {
2859 flow__FlowContext__add_loop(var_before_loop, var_after_block); /* Direct call flow#FlowContext#add_loop on <var_before_loop:FlowContext>*/
2860 }
2861 {
2862 { /* Inline scope#AWhileExpr#continue_mark (self) on <self:AWhileExpr> */
2863 var17 = self->attrs[COLOR_scope__AWhileExpr___continue_mark].val; /* _continue_mark on <self:AWhileExpr> */
2864 var15 = var17;
2865 RET_LABEL16:(void)0;
2866 }
2867 }
2868 {
2869 flow__FlowVisitor__merge_continues_to(var_v, var_after_block, var15); /* Direct call flow#FlowVisitor#merge_continues_to on <var_v:FlowVisitor>*/
2870 }
2871 {
2872 { /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
2873 var20 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
2874 if (unlikely(var20 == NULL)) {
2875 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
2876 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
2877 show_backtrace(1);
2878 }
2879 var18 = var20;
2880 RET_LABEL19:(void)0;
2881 }
2882 }
2883 {
2884 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var18) on <var_v:FlowVisitor> */
2885 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var18; /* _current_flow_context on <var_v:FlowVisitor> */
2886 RET_LABEL21:(void)0;
2887 }
2888 }
2889 {
2890 { /* Inline scope#AWhileExpr#break_mark (self) on <self:AWhileExpr> */
2891 var24 = self->attrs[COLOR_scope__AWhileExpr___break_mark].val; /* _break_mark on <self:AWhileExpr> */
2892 var22 = var24;
2893 RET_LABEL23:(void)0;
2894 }
2895 }
2896 {
2897 flow__FlowVisitor__merge_breaks(var_v, var22); /* Direct call flow#FlowVisitor#merge_breaks on <var_v:FlowVisitor>*/
2898 }
2899 RET_LABEL:;
2900 }
2901 /* method flow#AWhileExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2902 void VIRTUAL_flow__AWhileExpr__accept_flow_visitor(val* self, val* p0) {
2903 flow__AWhileExpr__accept_flow_visitor(self, p0); /* Direct call flow#AWhileExpr#accept_flow_visitor on <self:Object(AWhileExpr)>*/
2904 RET_LABEL:;
2905 }
2906 /* method flow#ALoopExpr#accept_flow_visitor for (self: ALoopExpr, FlowVisitor) */
2907 void flow__ALoopExpr__accept_flow_visitor(val* self, val* p0) {
2908 val* var_v /* var v: FlowVisitor */;
2909 val* var /* : FlowContext */;
2910 val* var_before_loop /* var before_loop: FlowContext */;
2911 val* var1 /* : nullable AExpr */;
2912 val* var3 /* : nullable AExpr */;
2913 val* var4 /* : FlowContext */;
2914 val* var6 /* : FlowContext */;
2915 val* var_after_block /* var after_block: FlowContext */;
2916 val* var7 /* : nullable EscapeMark */;
2917 val* var9 /* : nullable EscapeMark */;
2918 val* var10 /* : FlowContext */;
2919 val* var11 /* : nullable EscapeMark */;
2920 val* var13 /* : nullable EscapeMark */;
2921 var_v = p0;
2922 {
2923 var = flow__FlowVisitor__make_sub_flow(var_v);
2924 }
2925 var_before_loop = var;
2926 {
2927 { /* Inline parser_nodes#ALoopExpr#n_block (self) on <self:ALoopExpr> */
2928 var3 = self->attrs[COLOR_parser_nodes__ALoopExpr___n_block].val; /* _n_block on <self:ALoopExpr> */
2929 var1 = var3;
2930 RET_LABEL2:(void)0;
2931 }
2932 }
2933 {
2934 parser_nodes__Visitor__enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
2935 }
2936 {
2937 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
2938 var6 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
2939 if (unlikely(var6 == NULL)) {
2940 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
2941 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
2942 show_backtrace(1);
2943 }
2944 var4 = var6;
2945 RET_LABEL5:(void)0;
2946 }
2947 }
2948 var_after_block = var4;
2949 {
2950 flow__FlowContext__add_loop(var_before_loop, var_after_block); /* Direct call flow#FlowContext#add_loop on <var_before_loop:FlowContext>*/
2951 }
2952 {
2953 { /* Inline scope#ALoopExpr#continue_mark (self) on <self:ALoopExpr> */
2954 var9 = self->attrs[COLOR_scope__ALoopExpr___continue_mark].val; /* _continue_mark on <self:ALoopExpr> */
2955 var7 = var9;
2956 RET_LABEL8:(void)0;
2957 }
2958 }
2959 {
2960 flow__FlowVisitor__merge_continues_to(var_v, var_after_block, var7); /* Direct call flow#FlowVisitor#merge_continues_to on <var_v:FlowVisitor>*/
2961 }
2962 {
2963 var10 = flow__FlowVisitor__make_unreachable_flow(var_v);
2964 }
2965 {
2966 { /* Inline scope#ALoopExpr#break_mark (self) on <self:ALoopExpr> */
2967 var13 = self->attrs[COLOR_scope__ALoopExpr___break_mark].val; /* _break_mark on <self:ALoopExpr> */
2968 var11 = var13;
2969 RET_LABEL12:(void)0;
2970 }
2971 }
2972 {
2973 flow__FlowVisitor__merge_breaks(var_v, var11); /* Direct call flow#FlowVisitor#merge_breaks on <var_v:FlowVisitor>*/
2974 }
2975 RET_LABEL:;
2976 }
2977 /* method flow#ALoopExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2978 void VIRTUAL_flow__ALoopExpr__accept_flow_visitor(val* self, val* p0) {
2979 flow__ALoopExpr__accept_flow_visitor(self, p0); /* Direct call flow#ALoopExpr#accept_flow_visitor on <self:Object(ALoopExpr)>*/
2980 RET_LABEL:;
2981 }
2982 /* method flow#AForExpr#accept_flow_visitor for (self: AForExpr, FlowVisitor) */
2983 void flow__AForExpr__accept_flow_visitor(val* self, val* p0) {
2984 val* var_v /* var v: FlowVisitor */;
2985 val* var /* : AExpr */;
2986 val* var2 /* : AExpr */;
2987 val* var3 /* : FlowContext */;
2988 val* var_before_loop /* var before_loop: FlowContext */;
2989 val* var4 /* : nullable AExpr */;
2990 val* var6 /* : nullable AExpr */;
2991 val* var7 /* : FlowContext */;
2992 val* var9 /* : FlowContext */;
2993 val* var_after_block /* var after_block: FlowContext */;
2994 val* var10 /* : nullable EscapeMark */;
2995 val* var12 /* : nullable EscapeMark */;
2996 val* var13 /* : FlowContext */;
2997 val* var15 /* : FlowContext */;
2998 val* var16 /* : FlowContext */;
2999 val* var17 /* : nullable EscapeMark */;
3000 val* var19 /* : nullable EscapeMark */;
3001 var_v = p0;
3002 {
3003 { /* Inline parser_nodes#AForExpr#n_expr (self) on <self:AForExpr> */
3004 var2 = self->attrs[COLOR_parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
3005 if (unlikely(var2 == NULL)) {
3006 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
3007 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1427);
3008 show_backtrace(1);
3009 }
3010 var = var2;
3011 RET_LABEL1:(void)0;
3012 }
3013 }
3014 {
3015 parser_nodes__Visitor__enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
3016 }
3017 {
3018 var3 = flow__FlowVisitor__make_sub_flow(var_v);
3019 }
3020 var_before_loop = var3;
3021 {
3022 { /* Inline parser_nodes#AForExpr#n_block (self) on <self:AForExpr> */
3023 var6 = self->attrs[COLOR_parser_nodes__AForExpr___n_block].val; /* _n_block on <self:AForExpr> */
3024 var4 = var6;
3025 RET_LABEL5:(void)0;
3026 }
3027 }
3028 {
3029 parser_nodes__Visitor__enter_visit(var_v, var4); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
3030 }
3031 {
3032 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
3033 var9 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
3034 if (unlikely(var9 == NULL)) {
3035 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
3036 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
3037 show_backtrace(1);
3038 }
3039 var7 = var9;
3040 RET_LABEL8:(void)0;
3041 }
3042 }
3043 var_after_block = var7;
3044 {
3045 flow__FlowContext__add_loop(var_before_loop, var_after_block); /* Direct call flow#FlowContext#add_loop on <var_before_loop:FlowContext>*/
3046 }
3047 {
3048 { /* Inline scope#AForExpr#continue_mark (self) on <self:AForExpr> */
3049 var12 = self->attrs[COLOR_scope__AForExpr___continue_mark].val; /* _continue_mark on <self:AForExpr> */
3050 var10 = var12;
3051 RET_LABEL11:(void)0;
3052 }
3053 }
3054 {
3055 flow__FlowVisitor__merge_continues_to(var_v, var_after_block, var10); /* Direct call flow#FlowVisitor#merge_continues_to on <var_v:FlowVisitor>*/
3056 }
3057 {
3058 { /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
3059 var15 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
3060 if (unlikely(var15 == NULL)) {
3061 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
3062 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 36);
3063 show_backtrace(1);
3064 }
3065 var13 = var15;
3066 RET_LABEL14:(void)0;
3067 }
3068 }
3069 {
3070 var16 = flow__FlowVisitor__make_merge_flow(var_v, var13, var_before_loop);
3071 }
3072 {
3073 { /* Inline scope#AForExpr#break_mark (self) on <self:AForExpr> */
3074 var19 = self->attrs[COLOR_scope__AForExpr___break_mark].val; /* _break_mark on <self:AForExpr> */
3075 var17 = var19;
3076 RET_LABEL18:(void)0;
3077 }
3078 }
3079 {
3080 flow__FlowVisitor__merge_breaks(var_v, var17); /* Direct call flow#FlowVisitor#merge_breaks on <var_v:FlowVisitor>*/
3081 }
3082 RET_LABEL:;
3083 }
3084 /* method flow#AForExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3085 void VIRTUAL_flow__AForExpr__accept_flow_visitor(val* self, val* p0) {
3086 flow__AForExpr__accept_flow_visitor(self, p0); /* Direct call flow#AForExpr#accept_flow_visitor on <self:Object(AForExpr)>*/
3087 RET_LABEL:;
3088 }
3089 /* method flow#AAssertExpr#accept_flow_visitor for (self: AAssertExpr, FlowVisitor) */
3090 void flow__AAssertExpr__accept_flow_visitor(val* self, val* p0) {
3091 val* var_v /* var v: FlowVisitor */;
3092 val* var /* : AExpr */;
3093 val* var2 /* : AExpr */;
3094 val* var3 /* : FlowContext */;
3095 val* var_after_expr /* var after_expr: FlowContext */;
3096 val* var4 /* : FlowContext */;
3097 val* var6 /* : FlowContext */;
3098 val* var8 /* : nullable AExpr */;
3099 val* var10 /* : nullable AExpr */;
3100 val* var11 /* : FlowContext */;
3101 val* var13 /* : FlowContext */;
3102 var_v = p0;
3103 {
3104 { /* Inline parser_nodes#AAssertExpr#n_expr (self) on <self:AAssertExpr> */
3105 var2 = self->attrs[COLOR_parser_nodes__AAssertExpr___n_expr].val; /* _n_expr on <self:AAssertExpr> */
3106 if (unlikely(var2 == NULL)) {
3107 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
3108 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1437);
3109 show_backtrace(1);
3110 }
3111 var = var2;
3112 RET_LABEL1:(void)0;
3113 }
3114 }
3115 {
3116 var3 = flow__FlowVisitor__visit_expr(var_v, var);
3117 }
3118 var_after_expr = var3;
3119 {
3120 { /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
3121 var6 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
3122 if (unlikely(var6 == NULL)) {
3123 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
3124 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
3125 show_backtrace(1);
3126 }
3127 var4 = var6;
3128 RET_LABEL5:(void)0;
3129 }
3130 }
3131 {
3132 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var4) on <var_v:FlowVisitor> */
3133 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var4; /* _current_flow_context on <var_v:FlowVisitor> */
3134 RET_LABEL7:(void)0;
3135 }
3136 }
3137 {
3138 { /* Inline parser_nodes#AAssertExpr#n_else (self) on <self:AAssertExpr> */
3139 var10 = self->attrs[COLOR_parser_nodes__AAssertExpr___n_else].val; /* _n_else on <self:AAssertExpr> */
3140 var8 = var10;
3141 RET_LABEL9:(void)0;
3142 }
3143 }
3144 {
3145 parser_nodes__Visitor__enter_visit(var_v, var8); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
3146 }
3147 {
3148 { /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
3149 var13 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
3150 if (unlikely(var13 == NULL)) {
3151 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
3152 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
3153 show_backtrace(1);
3154 }
3155 var11 = var13;
3156 RET_LABEL12:(void)0;
3157 }
3158 }
3159 {
3160 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var11) on <var_v:FlowVisitor> */
3161 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var11; /* _current_flow_context on <var_v:FlowVisitor> */
3162 RET_LABEL14:(void)0;
3163 }
3164 }
3165 RET_LABEL:;
3166 }
3167 /* method flow#AAssertExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3168 void VIRTUAL_flow__AAssertExpr__accept_flow_visitor(val* self, val* p0) {
3169 flow__AAssertExpr__accept_flow_visitor(self, p0); /* Direct call flow#AAssertExpr#accept_flow_visitor on <self:Object(AAssertExpr)>*/
3170 RET_LABEL:;
3171 }
3172 /* method flow#AOrExpr#accept_flow_visitor for (self: AOrExpr, FlowVisitor) */
3173 void flow__AOrExpr__accept_flow_visitor(val* self, val* p0) {
3174 val* var_v /* var v: FlowVisitor */;
3175 val* var /* : AExpr */;
3176 val* var2 /* : AExpr */;
3177 val* var3 /* : FlowContext */;
3178 val* var_after_expr /* var after_expr: FlowContext */;
3179 val* var4 /* : FlowContext */;
3180 val* var6 /* : FlowContext */;
3181 val* var8 /* : AExpr */;
3182 val* var10 /* : AExpr */;
3183 val* var11 /* : FlowContext */;
3184 val* var_after_expr2 /* var after_expr2: FlowContext */;
3185 val* var12 /* : FlowContext */;
3186 val* var14 /* : FlowContext */;
3187 val* var15 /* : FlowContext */;
3188 val* var17 /* : FlowContext */;
3189 val* var18 /* : FlowContext */;
3190 val* var_merge_true /* var merge_true: FlowContext */;
3191 static val* varonce;
3192 val* var19 /* : String */;
3193 char* var20 /* : NativeString */;
3194 long var21 /* : Int */;
3195 val* var22 /* : FlatString */;
3196 val* var24 /* : FlowContext */;
3197 val* var26 /* : FlowContext */;
3198 val* var27 /* : FlowContext */;
3199 var_v = p0;
3200 {
3201 { /* Inline parser_nodes#AOrExpr#n_expr (self) on <self:AOrExpr> */
3202 var2 = self->attrs[COLOR_parser_nodes__AOrExpr___n_expr].val; /* _n_expr on <self:AOrExpr> */
3203 if (unlikely(var2 == NULL)) {
3204 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
3205 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1486);
3206 show_backtrace(1);
3207 }
3208 var = var2;
3209 RET_LABEL1:(void)0;
3210 }
3211 }
3212 {
3213 var3 = flow__FlowVisitor__visit_expr(var_v, var);
3214 }
3215 var_after_expr = var3;
3216 {
3217 { /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
3218 var6 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
3219 if (unlikely(var6 == NULL)) {
3220 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
3221 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
3222 show_backtrace(1);
3223 }
3224 var4 = var6;
3225 RET_LABEL5:(void)0;
3226 }
3227 }
3228 {
3229 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var4) on <var_v:FlowVisitor> */
3230 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var4; /* _current_flow_context on <var_v:FlowVisitor> */
3231 RET_LABEL7:(void)0;
3232 }
3233 }
3234 {
3235 { /* Inline parser_nodes#AOrExpr#n_expr2 (self) on <self:AOrExpr> */
3236 var10 = self->attrs[COLOR_parser_nodes__AOrExpr___n_expr2].val; /* _n_expr2 on <self:AOrExpr> */
3237 if (unlikely(var10 == NULL)) {
3238 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
3239 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1487);
3240 show_backtrace(1);
3241 }
3242 var8 = var10;
3243 RET_LABEL9:(void)0;
3244 }
3245 }
3246 {
3247 var11 = flow__FlowVisitor__visit_expr(var_v, var8);
3248 }
3249 var_after_expr2 = var11;
3250 {
3251 { /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
3252 var14 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
3253 if (unlikely(var14 == NULL)) {
3254 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
3255 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
3256 show_backtrace(1);
3257 }
3258 var12 = var14;
3259 RET_LABEL13:(void)0;
3260 }
3261 }
3262 {
3263 { /* Inline flow#FlowContext#when_true (var_after_expr2) on <var_after_expr2:FlowContext> */
3264 var17 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr2:FlowContext> */
3265 if (unlikely(var17 == NULL)) {
3266 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
3267 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
3268 show_backtrace(1);
3269 }
3270 var15 = var17;
3271 RET_LABEL16:(void)0;
3272 }
3273 }
3274 {
3275 var18 = flow__FlowVisitor__make_merge_flow(var_v, var12, var15);
3276 }
3277 var_merge_true = var18;
3278 if (varonce) {
3279 var19 = varonce;
3280 } else {
3281 var20 = "OR TRUE";
3282 var21 = 7;
3283 var22 = string__NativeString__to_s_with_length(var20, var21);
3284 var19 = var22;
3285 varonce = var19;
3286 }
3287 {
3288 { /* Inline flow#FlowContext#name= (var_merge_true,var19) on <var_merge_true:FlowContext> */
3289 var_merge_true->attrs[COLOR_flow__FlowContext___name].val = var19; /* _name on <var_merge_true:FlowContext> */
3290 RET_LABEL23:(void)0;
3291 }
3292 }
3293 {
3294 { /* Inline flow#FlowContext#when_false (var_after_expr2) on <var_after_expr2:FlowContext> */
3295 var26 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr2:FlowContext> */
3296 if (unlikely(var26 == NULL)) {
3297 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
3298 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
3299 show_backtrace(1);
3300 }
3301 var24 = var26;
3302 RET_LABEL25:(void)0;
3303 }
3304 }
3305 {
3306 var27 = flow__FlowVisitor__make_true_false_flow(var_v, var_merge_true, var24);
3307 }
3308 RET_LABEL:;
3309 }
3310 /* method flow#AOrExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3311 void VIRTUAL_flow__AOrExpr__accept_flow_visitor(val* self, val* p0) {
3312 flow__AOrExpr__accept_flow_visitor(self, p0); /* Direct call flow#AOrExpr#accept_flow_visitor on <self:Object(AOrExpr)>*/
3313 RET_LABEL:;
3314 }
3315 /* method flow#AImpliesExpr#accept_flow_visitor for (self: AImpliesExpr, FlowVisitor) */
3316 void flow__AImpliesExpr__accept_flow_visitor(val* self, val* p0) {
3317 val* var_v /* var v: FlowVisitor */;
3318 val* var /* : AExpr */;
3319 val* var2 /* : AExpr */;
3320 val* var3 /* : FlowContext */;
3321 val* var_after_expr /* var after_expr: FlowContext */;
3322 val* var4 /* : FlowContext */;
3323 val* var6 /* : FlowContext */;
3324 val* var8 /* : AExpr */;
3325 val* var10 /* : AExpr */;
3326 val* var11 /* : FlowContext */;
3327 val* var_after_expr2 /* var after_expr2: FlowContext */;
3328 val* var12 /* : FlowContext */;
3329 val* var14 /* : FlowContext */;
3330 val* var15 /* : FlowContext */;
3331 val* var17 /* : FlowContext */;
3332 val* var18 /* : FlowContext */;
3333 val* var_merge_true /* var merge_true: FlowContext */;
3334 static val* varonce;
3335 val* var19 /* : String */;
3336 char* var20 /* : NativeString */;
3337 long var21 /* : Int */;
3338 val* var22 /* : FlatString */;
3339 val* var24 /* : FlowContext */;
3340 val* var26 /* : FlowContext */;
3341 val* var27 /* : FlowContext */;
3342 var_v = p0;
3343 {
3344 { /* Inline parser_nodes#AImpliesExpr#n_expr (self) on <self:AImpliesExpr> */
3345 var2 = self->attrs[COLOR_parser_nodes__AImpliesExpr___n_expr].val; /* _n_expr on <self:AImpliesExpr> */
3346 if (unlikely(var2 == NULL)) {
3347 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
3348 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1507);
3349 show_backtrace(1);
3350 }
3351 var = var2;
3352 RET_LABEL1:(void)0;
3353 }
3354 }
3355 {
3356 var3 = flow__FlowVisitor__visit_expr(var_v, var);
3357 }
3358 var_after_expr = var3;
3359 {
3360 { /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
3361 var6 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
3362 if (unlikely(var6 == NULL)) {
3363 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
3364 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
3365 show_backtrace(1);
3366 }
3367 var4 = var6;
3368 RET_LABEL5:(void)0;
3369 }
3370 }
3371 {
3372 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var4) on <var_v:FlowVisitor> */
3373 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var4; /* _current_flow_context on <var_v:FlowVisitor> */
3374 RET_LABEL7:(void)0;
3375 }
3376 }
3377 {
3378 { /* Inline parser_nodes#AImpliesExpr#n_expr2 (self) on <self:AImpliesExpr> */
3379 var10 = self->attrs[COLOR_parser_nodes__AImpliesExpr___n_expr2].val; /* _n_expr2 on <self:AImpliesExpr> */
3380 if (unlikely(var10 == NULL)) {
3381 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
3382 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1508);
3383 show_backtrace(1);
3384 }
3385 var8 = var10;
3386 RET_LABEL9:(void)0;
3387 }
3388 }
3389 {
3390 var11 = flow__FlowVisitor__visit_expr(var_v, var8);
3391 }
3392 var_after_expr2 = var11;
3393 {
3394 { /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
3395 var14 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
3396 if (unlikely(var14 == NULL)) {
3397 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
3398 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
3399 show_backtrace(1);
3400 }
3401 var12 = var14;
3402 RET_LABEL13:(void)0;
3403 }
3404 }
3405 {
3406 { /* Inline flow#FlowContext#when_true (var_after_expr2) on <var_after_expr2:FlowContext> */
3407 var17 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr2:FlowContext> */
3408 if (unlikely(var17 == NULL)) {
3409 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
3410 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
3411 show_backtrace(1);
3412 }
3413 var15 = var17;
3414 RET_LABEL16:(void)0;
3415 }
3416 }
3417 {
3418 var18 = flow__FlowVisitor__make_merge_flow(var_v, var12, var15);
3419 }
3420 var_merge_true = var18;
3421 if (varonce) {
3422 var19 = varonce;
3423 } else {
3424 var20 = "OR TRUE";
3425 var21 = 7;
3426 var22 = string__NativeString__to_s_with_length(var20, var21);
3427 var19 = var22;
3428 varonce = var19;
3429 }
3430 {
3431 { /* Inline flow#FlowContext#name= (var_merge_true,var19) on <var_merge_true:FlowContext> */
3432 var_merge_true->attrs[COLOR_flow__FlowContext___name].val = var19; /* _name on <var_merge_true:FlowContext> */
3433 RET_LABEL23:(void)0;
3434 }
3435 }
3436 {
3437 { /* Inline flow#FlowContext#when_false (var_after_expr2) on <var_after_expr2:FlowContext> */
3438 var26 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr2:FlowContext> */
3439 if (unlikely(var26 == NULL)) {
3440 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
3441 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
3442 show_backtrace(1);
3443 }
3444 var24 = var26;
3445 RET_LABEL25:(void)0;
3446 }
3447 }
3448 {
3449 var27 = flow__FlowVisitor__make_true_false_flow(var_v, var_merge_true, var24);
3450 }
3451 RET_LABEL:;
3452 }
3453 /* method flow#AImpliesExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3454 void VIRTUAL_flow__AImpliesExpr__accept_flow_visitor(val* self, val* p0) {
3455 flow__AImpliesExpr__accept_flow_visitor(self, p0); /* Direct call flow#AImpliesExpr#accept_flow_visitor on <self:Object(AImpliesExpr)>*/
3456 RET_LABEL:;
3457 }
3458 /* method flow#AAndExpr#accept_flow_visitor for (self: AAndExpr, FlowVisitor) */
3459 void flow__AAndExpr__accept_flow_visitor(val* self, val* p0) {
3460 val* var_v /* var v: FlowVisitor */;
3461 val* var /* : AExpr */;
3462 val* var2 /* : AExpr */;
3463 val* var3 /* : FlowContext */;
3464 val* var_after_expr /* var after_expr: FlowContext */;
3465 val* var4 /* : FlowContext */;
3466 val* var6 /* : FlowContext */;
3467 val* var8 /* : AExpr */;
3468 val* var10 /* : AExpr */;
3469 val* var11 /* : FlowContext */;
3470 val* var_after_expr2 /* var after_expr2: FlowContext */;
3471 val* var12 /* : FlowContext */;
3472 val* var14 /* : FlowContext */;
3473 val* var15 /* : FlowContext */;
3474 val* var17 /* : FlowContext */;
3475 val* var18 /* : FlowContext */;
3476 val* var_merge_false /* var merge_false: FlowContext */;
3477 static val* varonce;
3478 val* var19 /* : String */;
3479 char* var20 /* : NativeString */;
3480 long var21 /* : Int */;
3481 val* var22 /* : FlatString */;
3482 val* var24 /* : FlowContext */;
3483 val* var26 /* : FlowContext */;
3484 val* var27 /* : FlowContext */;
3485 var_v = p0;
3486 {
3487 { /* Inline parser_nodes#AAndExpr#n_expr (self) on <self:AAndExpr> */
3488 var2 = self->attrs[COLOR_parser_nodes__AAndExpr___n_expr].val; /* _n_expr on <self:AAndExpr> */
3489 if (unlikely(var2 == NULL)) {
3490 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
3491 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1493);
3492 show_backtrace(1);
3493 }
3494 var = var2;
3495 RET_LABEL1:(void)0;
3496 }
3497 }
3498 {
3499 var3 = flow__FlowVisitor__visit_expr(var_v, var);
3500 }
3501 var_after_expr = var3;
3502 {
3503 { /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
3504 var6 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
3505 if (unlikely(var6 == NULL)) {
3506 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
3507 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
3508 show_backtrace(1);
3509 }
3510 var4 = var6;
3511 RET_LABEL5:(void)0;
3512 }
3513 }
3514 {
3515 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var4) on <var_v:FlowVisitor> */
3516 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var4; /* _current_flow_context on <var_v:FlowVisitor> */
3517 RET_LABEL7:(void)0;
3518 }
3519 }
3520 {
3521 { /* Inline parser_nodes#AAndExpr#n_expr2 (self) on <self:AAndExpr> */
3522 var10 = self->attrs[COLOR_parser_nodes__AAndExpr___n_expr2].val; /* _n_expr2 on <self:AAndExpr> */
3523 if (unlikely(var10 == NULL)) {
3524 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
3525 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1494);
3526 show_backtrace(1);
3527 }
3528 var8 = var10;
3529 RET_LABEL9:(void)0;
3530 }
3531 }
3532 {
3533 var11 = flow__FlowVisitor__visit_expr(var_v, var8);
3534 }
3535 var_after_expr2 = var11;
3536 {
3537 { /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
3538 var14 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
3539 if (unlikely(var14 == NULL)) {
3540 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
3541 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
3542 show_backtrace(1);
3543 }
3544 var12 = var14;
3545 RET_LABEL13:(void)0;
3546 }
3547 }
3548 {
3549 { /* Inline flow#FlowContext#when_false (var_after_expr2) on <var_after_expr2:FlowContext> */
3550 var17 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr2:FlowContext> */
3551 if (unlikely(var17 == NULL)) {
3552 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
3553 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
3554 show_backtrace(1);
3555 }
3556 var15 = var17;
3557 RET_LABEL16:(void)0;
3558 }
3559 }
3560 {
3561 var18 = flow__FlowVisitor__make_merge_flow(var_v, var12, var15);
3562 }
3563 var_merge_false = var18;
3564 if (varonce) {
3565 var19 = varonce;
3566 } else {
3567 var20 = "AND FALSE";
3568 var21 = 9;
3569 var22 = string__NativeString__to_s_with_length(var20, var21);
3570 var19 = var22;
3571 varonce = var19;
3572 }
3573 {
3574 { /* Inline flow#FlowContext#name= (var_merge_false,var19) on <var_merge_false:FlowContext> */
3575 var_merge_false->attrs[COLOR_flow__FlowContext___name].val = var19; /* _name on <var_merge_false:FlowContext> */
3576 RET_LABEL23:(void)0;
3577 }
3578 }
3579 {
3580 { /* Inline flow#FlowContext#when_true (var_after_expr2) on <var_after_expr2:FlowContext> */
3581 var26 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr2:FlowContext> */
3582 if (unlikely(var26 == NULL)) {
3583 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
3584 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
3585 show_backtrace(1);
3586 }
3587 var24 = var26;
3588 RET_LABEL25:(void)0;
3589 }
3590 }
3591 {
3592 var27 = flow__FlowVisitor__make_true_false_flow(var_v, var24, var_merge_false);
3593 }
3594 RET_LABEL:;
3595 }
3596 /* method flow#AAndExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3597 void VIRTUAL_flow__AAndExpr__accept_flow_visitor(val* self, val* p0) {
3598 flow__AAndExpr__accept_flow_visitor(self, p0); /* Direct call flow#AAndExpr#accept_flow_visitor on <self:Object(AAndExpr)>*/
3599 RET_LABEL:;
3600 }
3601 /* method flow#ANotExpr#accept_flow_visitor for (self: ANotExpr, FlowVisitor) */
3602 void flow__ANotExpr__accept_flow_visitor(val* self, val* p0) {
3603 val* var_v /* var v: FlowVisitor */;
3604 val* var /* : AExpr */;
3605 val* var2 /* : AExpr */;
3606 val* var3 /* : FlowContext */;
3607 val* var_after_expr /* var after_expr: FlowContext */;
3608 val* var4 /* : FlowContext */;
3609 val* var6 /* : FlowContext */;
3610 val* var7 /* : FlowContext */;
3611 val* var9 /* : FlowContext */;
3612 val* var10 /* : FlowContext */;
3613 var_v = p0;
3614 {
3615 { /* Inline parser_nodes#ANotExpr#n_expr (self) on <self:ANotExpr> */
3616 var2 = self->attrs[COLOR_parser_nodes__ANotExpr___n_expr].val; /* _n_expr on <self:ANotExpr> */
3617 if (unlikely(var2 == NULL)) {
3618 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
3619 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1515);
3620 show_backtrace(1);
3621 }
3622 var = var2;
3623 RET_LABEL1:(void)0;
3624 }
3625 }
3626 {
3627 var3 = flow__FlowVisitor__visit_expr(var_v, var);
3628 }
3629 var_after_expr = var3;
3630 {
3631 { /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
3632 var6 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
3633 if (unlikely(var6 == NULL)) {
3634 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
3635 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 228);
3636 show_backtrace(1);
3637 }
3638 var4 = var6;
3639 RET_LABEL5:(void)0;
3640 }
3641 }
3642 {
3643 { /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
3644 var9 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
3645 if (unlikely(var9 == NULL)) {
3646 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
3647 PRINT_ERROR(" (%s:%d)\n", "semantize/flow.nit", 225);
3648 show_backtrace(1);
3649 }
3650 var7 = var9;
3651 RET_LABEL8:(void)0;
3652 }
3653 }
3654 {
3655 var10 = flow__FlowVisitor__make_true_false_flow(var_v, var4, var7);
3656 }
3657 RET_LABEL:;
3658 }
3659 /* method flow#ANotExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3660 void VIRTUAL_flow__ANotExpr__accept_flow_visitor(val* self, val* p0) {
3661 flow__ANotExpr__accept_flow_visitor(self, p0); /* Direct call flow#ANotExpr#accept_flow_visitor on <self:Object(ANotExpr)>*/
3662 RET_LABEL:;
3663 }
3664 /* method flow#AOrElseExpr#accept_flow_visitor for (self: AOrElseExpr, FlowVisitor) */
3665 void flow__AOrElseExpr__accept_flow_visitor(val* self, val* p0) {
3666 val* var_v /* var v: FlowVisitor */;
3667 var_v = p0;
3668 {
3669 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AOrElseExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AOrElseExpr>*/;
3670 }
3671 RET_LABEL:;
3672 }
3673 /* method flow#AOrElseExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3674 void VIRTUAL_flow__AOrElseExpr__accept_flow_visitor(val* self, val* p0) {
3675 flow__AOrElseExpr__accept_flow_visitor(self, p0); /* Direct call flow#AOrElseExpr#accept_flow_visitor on <self:Object(AOrElseExpr)>*/
3676 RET_LABEL:;
3677 }
3678 /* method flow#AEqExpr#accept_flow_visitor for (self: AEqExpr, FlowVisitor) */
3679 void flow__AEqExpr__accept_flow_visitor(val* self, val* p0) {
3680 val* var_v /* var v: FlowVisitor */;
3681 val* var /* : FlowContext */;
3682 var_v = p0;
3683 {
3684 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AEqExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AEqExpr>*/;
3685 }
3686 {
3687 var = flow__FlowVisitor__make_sub_true_false_flow(var_v);
3688 }
3689 RET_LABEL:;
3690 }
3691 /* method flow#AEqExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3692 void VIRTUAL_flow__AEqExpr__accept_flow_visitor(val* self, val* p0) {
3693 flow__AEqExpr__accept_flow_visitor(self, p0); /* Direct call flow#AEqExpr#accept_flow_visitor on <self:Object(AEqExpr)>*/
3694 RET_LABEL:;
3695 }
3696 /* method flow#ANeExpr#accept_flow_visitor for (self: ANeExpr, FlowVisitor) */
3697 void flow__ANeExpr__accept_flow_visitor(val* self, val* p0) {
3698 val* var_v /* var v: FlowVisitor */;
3699 val* var /* : FlowContext */;
3700 var_v = p0;
3701 {
3702 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__ANeExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:ANeExpr>*/;
3703 }
3704 {
3705 var = flow__FlowVisitor__make_sub_true_false_flow(var_v);
3706 }
3707 RET_LABEL:;
3708 }
3709 /* method flow#ANeExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3710 void VIRTUAL_flow__ANeExpr__accept_flow_visitor(val* self, val* p0) {
3711 flow__ANeExpr__accept_flow_visitor(self, p0); /* Direct call flow#ANeExpr#accept_flow_visitor on <self:Object(ANeExpr)>*/
3712 RET_LABEL:;
3713 }
3714 /* method flow#AIsaExpr#accept_flow_visitor for (self: AIsaExpr, FlowVisitor) */
3715 void flow__AIsaExpr__accept_flow_visitor(val* self, val* p0) {
3716 val* var_v /* var v: FlowVisitor */;
3717 val* var /* : FlowContext */;
3718 var_v = p0;
3719 {
3720 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AIsaExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AIsaExpr>*/;
3721 }
3722 {
3723 var = flow__FlowVisitor__make_sub_true_false_flow(var_v);
3724 }
3725 RET_LABEL:;
3726 }
3727 /* method flow#AIsaExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3728 void VIRTUAL_flow__AIsaExpr__accept_flow_visitor(val* self, val* p0) {
3729 flow__AIsaExpr__accept_flow_visitor(self, p0); /* Direct call flow#AIsaExpr#accept_flow_visitor on <self:Object(AIsaExpr)>*/
3730 RET_LABEL:;
3731 }
3732 /* method flow#AParExpr#accept_flow_visitor for (self: AParExpr, FlowVisitor) */
3733 void flow__AParExpr__accept_flow_visitor(val* self, val* p0) {
3734 val* var_v /* var v: FlowVisitor */;
3735 val* var /* : AExpr */;
3736 val* var2 /* : AExpr */;
3737 val* var3 /* : FlowContext */;
3738 val* var_after_expr /* var after_expr: FlowContext */;
3739 var_v = p0;
3740 {
3741 { /* Inline parser_nodes#AParExpr#n_expr (self) on <self:AParExpr> */
3742 var2 = self->attrs[COLOR_parser_nodes__AParExpr___n_expr].val; /* _n_expr on <self:AParExpr> */
3743 if (unlikely(var2 == NULL)) {
3744 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
3745 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1868);
3746 show_backtrace(1);
3747 }
3748 var = var2;
3749 RET_LABEL1:(void)0;
3750 }
3751 }
3752 {
3753 var3 = flow__FlowVisitor__visit_expr(var_v, var);
3754 }
3755 var_after_expr = var3;
3756 {
3757 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var_after_expr) on <var_v:FlowVisitor> */
3758 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_after_expr; /* _current_flow_context on <var_v:FlowVisitor> */
3759 RET_LABEL4:(void)0;
3760 }
3761 }
3762 RET_LABEL:;
3763 }
3764 /* method flow#AParExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3765 void VIRTUAL_flow__AParExpr__accept_flow_visitor(val* self, val* p0) {
3766 flow__AParExpr__accept_flow_visitor(self, p0); /* Direct call flow#AParExpr#accept_flow_visitor on <self:Object(AParExpr)>*/
3767 RET_LABEL:;
3768 }
3769 /* method flow#AOnceExpr#accept_flow_visitor for (self: AOnceExpr, FlowVisitor) */
3770 void flow__AOnceExpr__accept_flow_visitor(val* self, val* p0) {
3771 val* var_v /* var v: FlowVisitor */;
3772 val* var /* : AExpr */;
3773 val* var2 /* : AExpr */;
3774 val* var3 /* : FlowContext */;
3775 val* var_after_expr /* var after_expr: FlowContext */;
3776 var_v = p0;
3777 {
3778 { /* Inline parser_nodes#AOnceExpr#n_expr (self) on <self:AOnceExpr> */
3779 var2 = self->attrs[COLOR_parser_nodes__AOnceExpr___n_expr].val; /* _n_expr on <self:AOnceExpr> */
3780 if (unlikely(var2 == NULL)) {
3781 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
3782 PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1459);
3783 show_backtrace(1);
3784 }
3785 var = var2;
3786 RET_LABEL1:(void)0;
3787 }
3788 }
3789 {
3790 var3 = flow__FlowVisitor__visit_expr(var_v, var);
3791 }
3792 var_after_expr = var3;
3793 {
3794 { /* Inline flow#FlowVisitor#current_flow_context= (var_v,var_after_expr) on <var_v:FlowVisitor> */
3795 var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_after_expr; /* _current_flow_context on <var_v:FlowVisitor> */
3796 RET_LABEL4:(void)0;
3797 }
3798 }
3799 RET_LABEL:;
3800 }
3801 /* method flow#AOnceExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
3802 void VIRTUAL_flow__AOnceExpr__accept_flow_visitor(val* self, val* p0) {
3803 flow__AOnceExpr__accept_flow_visitor(self, p0); /* Direct call flow#AOnceExpr#accept_flow_visitor on <self:Object(AOnceExpr)>*/
3804 RET_LABEL:;
3805 }