tests: remove base_virtual_int that is redundant with base_covar_int
[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___64dflow_phase].val; /* @flow_phase on <self:ToolContext> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @flow_phase", "src/flow.nit", 26);
9 exit(1);
10 }
11 var = var1;
12 RET_LABEL:;
13 return var;
14 }
15 /* method flow#ToolContext#flow_phase for (self: Object): Phase */
16 val* VIRTUAL_flow__ToolContext__flow_phase(val* self) {
17 val* var /* : Phase */;
18 val* var1 /* : Phase */;
19 var1 = flow__ToolContext__flow_phase(self);
20 var = var1;
21 RET_LABEL:;
22 return var;
23 }
24 /* method flow#ToolContext#flow_phase= for (self: ToolContext, Phase) */
25 void flow__ToolContext__flow_phase_61d(val* self, val* p0) {
26 self->attrs[COLOR_flow__ToolContext___64dflow_phase].val = p0; /* @flow_phase on <self:ToolContext> */
27 RET_LABEL:;
28 }
29 /* method flow#ToolContext#flow_phase= for (self: Object, Phase) */
30 void VIRTUAL_flow__ToolContext__flow_phase_61d(val* self, val* p0) {
31 flow__ToolContext__flow_phase_61d(self, p0);
32 RET_LABEL:;
33 }
34 /* method flow#FlowPhase#process_npropdef for (self: FlowPhase, APropdef) */
35 void flow__FlowPhase__process_npropdef(val* self, val* p0) {
36 val* var_npropdef /* var npropdef: APropdef */;
37 val* var /* : ToolContext */;
38 var_npropdef = p0;
39 var = ((val* (*)(val*))(self->class->vft[COLOR_phase__Phase__toolcontext]))(self) /* toolcontext on <self:FlowPhase>*/;
40 ((void (*)(val*, val*))(var_npropdef->class->vft[COLOR_flow__APropdef__do_flow]))(var_npropdef, var) /* do_flow on <var_npropdef:APropdef>*/;
41 RET_LABEL:;
42 }
43 /* method flow#FlowPhase#process_npropdef for (self: Object, APropdef) */
44 void VIRTUAL_flow__FlowPhase__process_npropdef(val* self, val* p0) {
45 flow__FlowPhase__process_npropdef(self, p0);
46 RET_LABEL:;
47 }
48 /* method flow#FlowVisitor#current_flow_context for (self: FlowVisitor): FlowContext */
49 val* flow__FlowVisitor__current_flow_context(val* self) {
50 val* var /* : FlowContext */;
51 val* var1 /* : FlowContext */;
52 var1 = self->attrs[COLOR_flow__FlowVisitor___64dcurrent_flow_context].val; /* @current_flow_context on <self:FlowVisitor> */
53 if (var1 == NULL) {
54 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @current_flow_context", "src/flow.nit", 39);
55 exit(1);
56 }
57 var = var1;
58 RET_LABEL:;
59 return var;
60 }
61 /* method flow#FlowVisitor#current_flow_context for (self: Object): FlowContext */
62 val* VIRTUAL_flow__FlowVisitor__current_flow_context(val* self) {
63 val* var /* : FlowContext */;
64 val* var1 /* : FlowContext */;
65 var1 = flow__FlowVisitor__current_flow_context(self);
66 var = var1;
67 RET_LABEL:;
68 return var;
69 }
70 /* method flow#FlowVisitor#current_flow_context= for (self: FlowVisitor, FlowContext) */
71 void flow__FlowVisitor__current_flow_context_61d(val* self, val* p0) {
72 self->attrs[COLOR_flow__FlowVisitor___64dcurrent_flow_context].val = p0; /* @current_flow_context on <self:FlowVisitor> */
73 RET_LABEL:;
74 }
75 /* method flow#FlowVisitor#current_flow_context= for (self: Object, FlowContext) */
76 void VIRTUAL_flow__FlowVisitor__current_flow_context_61d(val* self, val* p0) {
77 flow__FlowVisitor__current_flow_context_61d(self, p0);
78 RET_LABEL:;
79 }
80 /* method flow#FlowVisitor#toolcontext for (self: FlowVisitor): ToolContext */
81 val* flow__FlowVisitor__toolcontext(val* self) {
82 val* var /* : ToolContext */;
83 val* var1 /* : ToolContext */;
84 var1 = self->attrs[COLOR_flow__FlowVisitor___64dtoolcontext].val; /* @toolcontext on <self:FlowVisitor> */
85 if (var1 == NULL) {
86 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @toolcontext", "src/flow.nit", 41);
87 exit(1);
88 }
89 var = var1;
90 RET_LABEL:;
91 return var;
92 }
93 /* method flow#FlowVisitor#toolcontext for (self: Object): ToolContext */
94 val* VIRTUAL_flow__FlowVisitor__toolcontext(val* self) {
95 val* var /* : ToolContext */;
96 val* var1 /* : ToolContext */;
97 var1 = flow__FlowVisitor__toolcontext(self);
98 var = var1;
99 RET_LABEL:;
100 return var;
101 }
102 /* method flow#FlowVisitor#toolcontext= for (self: FlowVisitor, ToolContext) */
103 void flow__FlowVisitor__toolcontext_61d(val* self, val* p0) {
104 self->attrs[COLOR_flow__FlowVisitor___64dtoolcontext].val = p0; /* @toolcontext on <self:FlowVisitor> */
105 RET_LABEL:;
106 }
107 /* method flow#FlowVisitor#toolcontext= for (self: Object, ToolContext) */
108 void VIRTUAL_flow__FlowVisitor__toolcontext_61d(val* self, val* p0) {
109 flow__FlowVisitor__toolcontext_61d(self, p0);
110 RET_LABEL:;
111 }
112 /* method flow#FlowVisitor#init for (self: FlowVisitor, ToolContext) */
113 void flow__FlowVisitor__init(val* self, val* p0) {
114 val* var_toolcontext /* var toolcontext: ToolContext */;
115 val* var /* : FlowContext */;
116 val* var1 /* : Array[FlowContext] */;
117 val* var2 /* : FlowContext */;
118 val* var3 /* : FlowContext */;
119 short int var4 /* : Bool */;
120 var_toolcontext = p0;
121 ((void (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__init]))(self) /* init on <self:FlowVisitor>*/;
122 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__toolcontext_61d]))(self, var_toolcontext) /* toolcontext= on <self:FlowVisitor>*/;
123 var = NEW_flow__FlowContext(&type_flow__FlowContext);
124 ((void (*)(val*))(var->class->vft[COLOR_flow__FlowContext__init]))(var) /* init on <var:FlowContext>*/;
125 CHECK_NEW_flow__FlowContext(var);
126 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var) /* current_flow_context= on <self:FlowVisitor>*/;
127 var1 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
128 var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
129 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var1, var2) /* add on <var1:Array[FlowContext]>*/;
130 var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
131 var4 = 1;
132 ((void (*)(val*, short int))(var3->class->vft[COLOR_flow__FlowContext__is_start_61d]))(var3, var4) /* is_start= on <var3:FlowContext>*/;
133 RET_LABEL:;
134 }
135 /* method flow#FlowVisitor#init for (self: Object, ToolContext) */
136 void VIRTUAL_flow__FlowVisitor__init(val* self, val* p0) {
137 flow__FlowVisitor__init(self, p0);
138 RET_LABEL:;
139 }
140 /* method flow#FlowVisitor#first for (self: FlowVisitor): nullable ANode */
141 val* flow__FlowVisitor__first(val* self) {
142 val* var /* : nullable ANode */;
143 val* var1 /* : nullable ANode */;
144 var1 = self->attrs[COLOR_flow__FlowVisitor___64dfirst].val; /* @first on <self:FlowVisitor> */
145 var = var1;
146 RET_LABEL:;
147 return var;
148 }
149 /* method flow#FlowVisitor#first for (self: Object): nullable ANode */
150 val* VIRTUAL_flow__FlowVisitor__first(val* self) {
151 val* var /* : nullable ANode */;
152 val* var1 /* : nullable ANode */;
153 var1 = flow__FlowVisitor__first(self);
154 var = var1;
155 RET_LABEL:;
156 return var;
157 }
158 /* method flow#FlowVisitor#first= for (self: FlowVisitor, nullable ANode) */
159 void flow__FlowVisitor__first_61d(val* self, val* p0) {
160 self->attrs[COLOR_flow__FlowVisitor___64dfirst].val = p0; /* @first on <self:FlowVisitor> */
161 RET_LABEL:;
162 }
163 /* method flow#FlowVisitor#first= for (self: Object, nullable ANode) */
164 void VIRTUAL_flow__FlowVisitor__first_61d(val* self, val* p0) {
165 flow__FlowVisitor__first_61d(self, p0);
166 RET_LABEL:;
167 }
168 /* method flow#FlowVisitor#visit for (self: FlowVisitor, ANode) */
169 void flow__FlowVisitor__visit(val* self, val* p0) {
170 val* var_node /* var node: ANode */;
171 val* var /* : nullable ANode */;
172 val* var1 /* : null */;
173 short int var2 /* : Bool */;
174 val* var3 /* : FlowContext */;
175 val* var4 /* : nullable ANode */;
176 val* var5 /* : null */;
177 short int var6 /* : Bool */;
178 val* var7 /* : FlowContext */;
179 short int var8 /* : Bool */;
180 int cltype;
181 int idtype;
182 val* var9 /* : FlowContext */;
183 val* var_flow /* var flow: FlowContext */;
184 short int var10 /* : Bool */;
185 val* var11 /* : FlowContext */;
186 short int var12 /* : Bool */;
187 short int var_ /* var : Bool */;
188 val* var13 /* : FlowContext */;
189 short int var14 /* : Bool */;
190 val* var15 /* : FlowContext */;
191 val* var16 /* : FlowContext */;
192 static val* varonce;
193 val* var17 /* : String */;
194 char* var18 /* : NativeString */;
195 long var19 /* : Int */;
196 val* var20 /* : String */;
197 val* var21 /* : nullable ANode */;
198 short int var22 /* : Bool */;
199 var_node = p0;
200 var = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__first]))(self) /* first on <self:FlowVisitor>*/;
201 var1 = NULL;
202 if (var == NULL) {
203 var2 = 1; /* is null */
204 } else {
205 var2 = 0; /* arg is null but recv is not */
206 }
207 if (var2){
208 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__first_61d]))(self, var_node) /* first= on <self:FlowVisitor>*/;
209 } else {
210 }
211 var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
212 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_flow__FlowContext__node]))(var3) /* node on <var3:FlowContext>*/;
213 var5 = NULL;
214 if (var4 == NULL) {
215 var6 = 1; /* is null */
216 } else {
217 var6 = 0; /* arg is null but recv is not */
218 }
219 if (var6){
220 var7 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
221 ((void (*)(val*, val*))(var7->class->vft[COLOR_flow__FlowContext__node_61d]))(var7, var_node) /* node= on <var7:FlowContext>*/;
222 } else {
223 }
224 ((void (*)(val*, val*))(var_node->class->vft[COLOR_flow__ANode__accept_flow_visitor]))(var_node, self) /* accept_flow_visitor on <var_node:ANode>*/;
225 /* <var_node:ANode> isa AExpr */
226 cltype = type_parser_nodes__AExpr.color;
227 idtype = type_parser_nodes__AExpr.id;
228 if(cltype >= var_node->type->table_size) {
229 var8 = 0;
230 } else {
231 var8 = var_node->type->type_table[cltype] == idtype;
232 }
233 if (var8){
234 var9 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
235 var_flow = var9;
236 ((void (*)(val*, val*))(var_node->class->vft[COLOR_flow__AExpr__after_flow_context_61d]))(var_node, var_flow) /* after_flow_context= on <var_node:ANode(AExpr)>*/;
237 var11 = ((val* (*)(val*))(var_flow->class->vft[COLOR_flow__FlowContext__when_true]))(var_flow) /* when_true on <var_flow:FlowContext>*/;
238 var12 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___33d_61d]))(var11, var_flow) /* != on <var11:FlowContext>*/;
239 var_ = var12;
240 if (var12){
241 var10 = var_;
242 } else {
243 var13 = ((val* (*)(val*))(var_flow->class->vft[COLOR_flow__FlowContext__when_false]))(var_flow) /* when_false on <var_flow:FlowContext>*/;
244 var14 = ((short int (*)(val*, val*))(var13->class->vft[COLOR_kernel__Object___33d_61d]))(var13, var_flow) /* != on <var13:FlowContext>*/;
245 var10 = var14;
246 }
247 if (var10){
248 var15 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(self) /* make_sub_flow on <self:FlowVisitor>*/;
249 var15;
250 var16 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
251 if (varonce) {
252 var17 = varonce;
253 } else {
254 var18 = "AUTOSUB";
255 var19 = 7;
256 var20 = string__NativeString__to_s_with_length(var18, var19);
257 var17 = var20;
258 varonce = var17;
259 }
260 ((void (*)(val*, val*))(var16->class->vft[COLOR_flow__FlowContext__name_61d]))(var16, var17) /* name= on <var16:FlowContext>*/;
261 } else {
262 }
263 } else {
264 }
265 var21 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__first]))(self) /* first on <self:FlowVisitor>*/;
266 if (var21 == NULL) {
267 var22 = 0; /* <var_node:ANode> cannot be null */
268 } else {
269 var22 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var_node) /* == on <var21:nullable ANode>*/;
270 }
271 if (var22){
272 } else {
273 }
274 RET_LABEL:;
275 }
276 /* method flow#FlowVisitor#visit for (self: Object, ANode) */
277 void VIRTUAL_flow__FlowVisitor__visit(val* self, val* p0) {
278 flow__FlowVisitor__visit(self, p0);
279 RET_LABEL:;
280 }
281 /* method flow#FlowVisitor#visit_expr for (self: FlowVisitor, AExpr): FlowContext */
282 val* flow__FlowVisitor__visit_expr(val* self, val* p0) {
283 val* var /* : FlowContext */;
284 val* var_node /* var node: AExpr */;
285 val* var1 /* : nullable FlowContext */;
286 var_node = p0;
287 ((void (*)(val*, val*))(self->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(self, var_node) /* enter_visit on <self:FlowVisitor>*/;
288 var1 = ((val* (*)(val*))(var_node->class->vft[COLOR_flow__AExpr__after_flow_context]))(var_node) /* after_flow_context on <var_node:AExpr>*/;
289 if (var1 == NULL) {
290 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/flow.nit", 77);
291 exit(1);
292 }
293 var = var1;
294 goto RET_LABEL;
295 RET_LABEL:;
296 return var;
297 }
298 /* method flow#FlowVisitor#visit_expr for (self: Object, AExpr): FlowContext */
299 val* VIRTUAL_flow__FlowVisitor__visit_expr(val* self, val* p0) {
300 val* var /* : FlowContext */;
301 val* var1 /* : FlowContext */;
302 var1 = flow__FlowVisitor__visit_expr(self, p0);
303 var = var1;
304 RET_LABEL:;
305 return var;
306 }
307 /* method flow#FlowVisitor#flows for (self: FlowVisitor): Array[FlowContext] */
308 val* flow__FlowVisitor__flows(val* self) {
309 val* var /* : Array[FlowContext] */;
310 val* var1 /* : Array[FlowContext] */;
311 var1 = self->attrs[COLOR_flow__FlowVisitor___64dflows].val; /* @flows on <self:FlowVisitor> */
312 if (var1 == NULL) {
313 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @flows", "src/flow.nit", 80);
314 exit(1);
315 }
316 var = var1;
317 RET_LABEL:;
318 return var;
319 }
320 /* method flow#FlowVisitor#flows for (self: Object): Array[FlowContext] */
321 val* VIRTUAL_flow__FlowVisitor__flows(val* self) {
322 val* var /* : Array[FlowContext] */;
323 val* var1 /* : Array[FlowContext] */;
324 var1 = flow__FlowVisitor__flows(self);
325 var = var1;
326 RET_LABEL:;
327 return var;
328 }
329 /* method flow#FlowVisitor#flows= for (self: FlowVisitor, Array[FlowContext]) */
330 void flow__FlowVisitor__flows_61d(val* self, val* p0) {
331 self->attrs[COLOR_flow__FlowVisitor___64dflows].val = p0; /* @flows on <self:FlowVisitor> */
332 RET_LABEL:;
333 }
334 /* method flow#FlowVisitor#flows= for (self: Object, Array[FlowContext]) */
335 void VIRTUAL_flow__FlowVisitor__flows_61d(val* self, val* p0) {
336 flow__FlowVisitor__flows_61d(self, p0);
337 RET_LABEL:;
338 }
339 /* method flow#FlowVisitor#printflow for (self: FlowVisitor) */
340 void flow__FlowVisitor__printflow(val* self) {
341 val* var /* : OFStream */;
342 static val* varonce;
343 val* var1 /* : String */;
344 char* var2 /* : NativeString */;
345 long var3 /* : Int */;
346 val* var4 /* : String */;
347 val* var_file /* var file: OFStream */;
348 static val* varonce5;
349 val* var6 /* : String */;
350 char* var7 /* : NativeString */;
351 long var8 /* : Int */;
352 val* var9 /* : String */;
353 val* var10 /* : Array[FlowContext] */;
354 val* var11 /* : Iterator[nullable Object] */;
355 short int var12 /* : Bool */;
356 val* var13 /* : nullable Object */;
357 val* var_f /* var f: FlowContext */;
358 static val* varonce14;
359 val* var15 /* : String */;
360 char* var16 /* : NativeString */;
361 long var17 /* : Int */;
362 val* var18 /* : String */;
363 val* var_s /* var s: String */;
364 val* var19 /* : nullable ANode */;
365 short int var20 /* : Bool */;
366 int cltype;
367 int idtype;
368 val* var21 /* : Array[Object] */;
369 long var22 /* : Int */;
370 val* var_ /* var : Array[Object] */;
371 static val* varonce23;
372 val* var24 /* : String */;
373 char* var25 /* : NativeString */;
374 long var26 /* : Int */;
375 val* var27 /* : String */;
376 val* var28 /* : nullable ANode */;
377 short int var29 /* : Bool */;
378 int cltype30;
379 int idtype31;
380 val* var32 /* : nullable FlowContext */;
381 long var33 /* : Int */;
382 val* var34 /* : nullable Object */;
383 static val* varonce35;
384 val* var36 /* : String */;
385 char* var37 /* : NativeString */;
386 long var38 /* : Int */;
387 val* var39 /* : String */;
388 val* var40 /* : String */;
389 static val* varonce41;
390 val* var42 /* : String */;
391 char* var43 /* : NativeString */;
392 long var44 /* : Int */;
393 val* var45 /* : String */;
394 long var46 /* : Int */;
395 static val* varonce47;
396 val* var48 /* : String */;
397 char* var49 /* : NativeString */;
398 long var50 /* : Int */;
399 val* var51 /* : String */;
400 long var52 /* : Int */;
401 static val* varonce53;
402 val* var54 /* : String */;
403 char* var55 /* : NativeString */;
404 long var56 /* : Int */;
405 val* var57 /* : String */;
406 val* var58 /* : nullable ANode */;
407 val* var59 /* : Location */;
408 static val* varonce60;
409 val* var61 /* : String */;
410 char* var62 /* : NativeString */;
411 long var63 /* : Int */;
412 val* var64 /* : String */;
413 val* var65 /* : nullable ANode */;
414 val* var66 /* : String */;
415 static val* varonce67;
416 val* var68 /* : String */;
417 char* var69 /* : NativeString */;
418 long var70 /* : Int */;
419 val* var71 /* : String */;
420 val* var72 /* : String */;
421 static val* varonce73;
422 val* var74 /* : String */;
423 char* var75 /* : NativeString */;
424 long var76 /* : Int */;
425 val* var77 /* : String */;
426 val* var78 /* : Array[Object] */;
427 long var79 /* : Int */;
428 val* var80 /* : NativeArray[Object] */;
429 val* var81 /* : Object */;
430 val* var82 /* : Object */;
431 val* var83 /* : String */;
432 val* var84 /* : Array[FlowContext] */;
433 val* var85 /* : Iterator[nullable Object] */;
434 short int var86 /* : Bool */;
435 val* var87 /* : nullable Object */;
436 val* var_p /* var p: FlowContext */;
437 static val* varonce88;
438 val* var89 /* : String */;
439 char* var90 /* : NativeString */;
440 long var91 /* : Int */;
441 val* var92 /* : String */;
442 long var93 /* : Int */;
443 static val* varonce94;
444 val* var95 /* : String */;
445 char* var96 /* : NativeString */;
446 long var97 /* : Int */;
447 val* var98 /* : String */;
448 long var99 /* : Int */;
449 static val* varonce100;
450 val* var101 /* : String */;
451 char* var102 /* : NativeString */;
452 long var103 /* : Int */;
453 val* var104 /* : String */;
454 val* var105 /* : Array[Object] */;
455 long var106 /* : Int */;
456 val* var107 /* : NativeArray[Object] */;
457 val* var108 /* : Object */;
458 val* var109 /* : Object */;
459 val* var110 /* : String */;
460 val* var111 /* : FlowContext */;
461 short int var112 /* : Bool */;
462 static val* varonce113;
463 val* var114 /* : String */;
464 char* var115 /* : NativeString */;
465 long var116 /* : Int */;
466 val* var117 /* : String */;
467 long var118 /* : Int */;
468 static val* varonce119;
469 val* var120 /* : String */;
470 char* var121 /* : NativeString */;
471 long var122 /* : Int */;
472 val* var123 /* : String */;
473 val* var124 /* : FlowContext */;
474 long var125 /* : Int */;
475 static val* varonce126;
476 val* var127 /* : String */;
477 char* var128 /* : NativeString */;
478 long var129 /* : Int */;
479 val* var130 /* : String */;
480 val* var131 /* : Array[Object] */;
481 long var132 /* : Int */;
482 val* var133 /* : NativeArray[Object] */;
483 val* var134 /* : Object */;
484 val* var135 /* : Object */;
485 val* var136 /* : String */;
486 val* var137 /* : FlowContext */;
487 short int var138 /* : Bool */;
488 static val* varonce139;
489 val* var140 /* : String */;
490 char* var141 /* : NativeString */;
491 long var142 /* : Int */;
492 val* var143 /* : String */;
493 long var144 /* : Int */;
494 static val* varonce145;
495 val* var146 /* : String */;
496 char* var147 /* : NativeString */;
497 long var148 /* : Int */;
498 val* var149 /* : String */;
499 val* var150 /* : FlowContext */;
500 long var151 /* : Int */;
501 static val* varonce152;
502 val* var153 /* : String */;
503 char* var154 /* : NativeString */;
504 long var155 /* : Int */;
505 val* var156 /* : String */;
506 val* var157 /* : Array[Object] */;
507 long var158 /* : Int */;
508 val* var159 /* : NativeArray[Object] */;
509 val* var160 /* : Object */;
510 val* var161 /* : Object */;
511 val* var162 /* : String */;
512 static val* varonce164;
513 val* var165 /* : String */;
514 char* var166 /* : NativeString */;
515 long var167 /* : Int */;
516 val* var168 /* : String */;
517 var = NEW_file__OFStream(&type_file__OFStream);
518 if (varonce) {
519 var1 = varonce;
520 } else {
521 var2 = "flow.dot";
522 var3 = 8;
523 var4 = string__NativeString__to_s_with_length(var2, var3);
524 var1 = var4;
525 varonce = var1;
526 }
527 ((void (*)(val*, val*))(var->class->vft[COLOR_file__OFStream__open]))(var, var1) /* open on <var:OFStream>*/;
528 CHECK_NEW_file__OFStream(var);
529 var_file = var;
530 if (varonce5) {
531 var6 = varonce5;
532 } else {
533 var7 = "digraph {\n";
534 var8 = 10;
535 var9 = string__NativeString__to_s_with_length(var7, var8);
536 var6 = var9;
537 varonce5 = var6;
538 }
539 ((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var6) /* write on <var_file:OFStream>*/;
540 var10 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
541 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_collection__Collection__iterator]))(var10) /* iterator on <var10:Array[FlowContext]>*/;
542 for(;;) {
543 var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var11) /* is_ok on <var11:Iterator[nullable Object]>*/;
544 if(!var12) break;
545 var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__item]))(var11) /* item on <var11:Iterator[nullable Object]>*/;
546 var_f = var13;
547 if (varonce14) {
548 var15 = varonce14;
549 } else {
550 var16 = "";
551 var17 = 0;
552 var18 = string__NativeString__to_s_with_length(var16, var17);
553 var15 = var18;
554 varonce14 = var15;
555 }
556 var_s = var15;
557 var19 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__node]))(var_f) /* node on <var_f:FlowContext>*/;
558 /* <var19:nullable ANode> isa AExpr */
559 cltype = type_parser_nodes__AExpr.color;
560 idtype = type_parser_nodes__AExpr.id;
561 if(var19 == NULL) {
562 var20 = 0;
563 } else {
564 if(cltype >= var19->type->table_size) {
565 var20 = 0;
566 } else {
567 var20 = var19->type->type_table[cltype] == idtype;
568 }
569 }
570 if (var20){
571 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
572 var22 = 3;
573 ((void (*)(val*, long))(var21->class->vft[COLOR_array__Array__with_capacity]))(var21, var22) /* with_capacity on <var21:Array[Object]>*/;
574 CHECK_NEW_array__Array(var21);
575 var_ = var21;
576 if (varonce23) {
577 var24 = varonce23;
578 } else {
579 var25 = "\\nmain=";
580 var26 = 7;
581 var27 = string__NativeString__to_s_with_length(var25, var26);
582 var24 = var27;
583 varonce23 = var24;
584 }
585 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var24) /* add on <var_:Array[Object]>*/;
586 var28 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__node]))(var_f) /* node on <var_f:FlowContext>*/;
587 /* <var28:nullable ANode> isa AExpr */
588 cltype30 = type_parser_nodes__AExpr.color;
589 idtype31 = type_parser_nodes__AExpr.id;
590 if(var28 == NULL) {
591 var29 = 0;
592 } else {
593 if(cltype30 >= var28->type->table_size) {
594 var29 = 0;
595 } else {
596 var29 = var28->type->type_table[cltype30] == idtype31;
597 }
598 }
599 if (!var29) {
600 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/flow.nit", 89);
601 exit(1);
602 }
603 var32 = ((val* (*)(val*))(var28->class->vft[COLOR_flow__AExpr__after_flow_context]))(var28) /* after_flow_context on <var28:nullable ANode(AExpr)>*/;
604 if (var32 == NULL) {
605 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/flow.nit", 89);
606 exit(1);
607 } else {
608 var33 = ((long (*)(val*))(var32->class->vft[COLOR_kernel__Object__object_id]))(var32) /* object_id on <var32:nullable FlowContext>*/;
609 }
610 var34 = BOX_kernel__Int(var33); /* autobox from Int to nullable Object */
611 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var34) /* add on <var_:Array[Object]>*/;
612 if (varonce35) {
613 var36 = varonce35;
614 } else {
615 var37 = "";
616 var38 = 0;
617 var39 = string__NativeString__to_s_with_length(var37, var38);
618 var36 = var39;
619 varonce35 = var36;
620 }
621 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var36) /* add on <var_:Array[Object]>*/;
622 var40 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
623 var_s = var40;
624 } else {
625 }
626 if (varonce41) {
627 var42 = varonce41;
628 } else {
629 var43 = "F";
630 var44 = 1;
631 var45 = string__NativeString__to_s_with_length(var43, var44);
632 var42 = var45;
633 varonce41 = var42;
634 }
635 var46 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
636 if (varonce47) {
637 var48 = varonce47;
638 } else {
639 var49 = " [label=\"";
640 var50 = 9;
641 var51 = string__NativeString__to_s_with_length(var49, var50);
642 var48 = var51;
643 varonce47 = var48;
644 }
645 var52 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
646 if (varonce53) {
647 var54 = varonce53;
648 } else {
649 var55 = "\\n";
650 var56 = 2;
651 var57 = string__NativeString__to_s_with_length(var55, var56);
652 var54 = var57;
653 varonce53 = var54;
654 }
655 var58 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__node]))(var_f) /* node on <var_f:FlowContext>*/;
656 if (var58 == NULL) {
657 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/flow.nit", 91);
658 exit(1);
659 } else {
660 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_parser_nodes__ANode__location]))(var58) /* location on <var58:nullable ANode>*/;
661 }
662 if (varonce60) {
663 var61 = varonce60;
664 } else {
665 var62 = "\\n";
666 var63 = 2;
667 var64 = string__NativeString__to_s_with_length(var62, var63);
668 var61 = var64;
669 varonce60 = var61;
670 }
671 var65 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__node]))(var_f) /* node on <var_f:FlowContext>*/;
672 if (var65 == NULL) {
673 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/flow.nit", 91);
674 exit(1);
675 } else {
676 var66 = ((val* (*)(val*))(var65->class->vft[COLOR_string__Object__class_name]))(var65) /* class_name on <var65:nullable ANode>*/;
677 }
678 if (varonce67) {
679 var68 = varonce67;
680 } else {
681 var69 = "\\n";
682 var70 = 2;
683 var71 = string__NativeString__to_s_with_length(var69, var70);
684 var68 = var71;
685 varonce67 = var68;
686 }
687 var72 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__name]))(var_f) /* name on <var_f:FlowContext>*/;
688 if (varonce73) {
689 var74 = varonce73;
690 } else {
691 var75 = "\"];\n";
692 var76 = 4;
693 var77 = string__NativeString__to_s_with_length(var75, var76);
694 var74 = var77;
695 varonce73 = var74;
696 }
697 var78 = NEW_array__Array(&type_array__Arraykernel__Object);
698 { /* var78 = array_instance Array[Object] */
699 var79 = 12;
700 var80 = NEW_array__NativeArray(var79, &type_array__NativeArraykernel__Object);
701 ((struct instance_array__NativeArray*)var80)->values[0] = (val*) var42;
702 var81 = BOX_kernel__Int(var46); /* autobox from Int to Object */
703 ((struct instance_array__NativeArray*)var80)->values[1] = (val*) var81;
704 ((struct instance_array__NativeArray*)var80)->values[2] = (val*) var48;
705 var82 = BOX_kernel__Int(var52); /* autobox from Int to Object */
706 ((struct instance_array__NativeArray*)var80)->values[3] = (val*) var82;
707 ((struct instance_array__NativeArray*)var80)->values[4] = (val*) var54;
708 ((struct instance_array__NativeArray*)var80)->values[5] = (val*) var59;
709 ((struct instance_array__NativeArray*)var80)->values[6] = (val*) var61;
710 ((struct instance_array__NativeArray*)var80)->values[7] = (val*) var66;
711 ((struct instance_array__NativeArray*)var80)->values[8] = (val*) var68;
712 ((struct instance_array__NativeArray*)var80)->values[9] = (val*) var72;
713 ((struct instance_array__NativeArray*)var80)->values[10] = (val*) var_s;
714 ((struct instance_array__NativeArray*)var80)->values[11] = (val*) var74;
715 ((void (*)(val*, val*, long))(var78->class->vft[COLOR_array__Array__with_native]))(var78, var80, var79) /* with_native on <var78:Array[Object]>*/;
716 CHECK_NEW_array__Array(var78);
717 }
718 var83 = ((val* (*)(val*))(var78->class->vft[COLOR_string__Object__to_s]))(var78) /* to_s on <var78:Array[Object]>*/;
719 ((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var83) /* write on <var_file:OFStream>*/;
720 var84 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__previous]))(var_f) /* previous on <var_f:FlowContext>*/;
721 var85 = ((val* (*)(val*))(var84->class->vft[COLOR_abstract_collection__Collection__iterator]))(var84) /* iterator on <var84:Array[FlowContext]>*/;
722 for(;;) {
723 var86 = ((short int (*)(val*))(var85->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var85) /* is_ok on <var85:Iterator[nullable Object]>*/;
724 if(!var86) break;
725 var87 = ((val* (*)(val*))(var85->class->vft[COLOR_abstract_collection__Iterator__item]))(var85) /* item on <var85:Iterator[nullable Object]>*/;
726 var_p = var87;
727 if (varonce88) {
728 var89 = varonce88;
729 } else {
730 var90 = "F";
731 var91 = 1;
732 var92 = string__NativeString__to_s_with_length(var90, var91);
733 var89 = var92;
734 varonce88 = var89;
735 }
736 var93 = ((long (*)(val*))(var_p->class->vft[COLOR_kernel__Object__object_id]))(var_p) /* object_id on <var_p:FlowContext>*/;
737 if (varonce94) {
738 var95 = varonce94;
739 } else {
740 var96 = " -> F";
741 var97 = 5;
742 var98 = string__NativeString__to_s_with_length(var96, var97);
743 var95 = var98;
744 varonce94 = var95;
745 }
746 var99 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
747 if (varonce100) {
748 var101 = varonce100;
749 } else {
750 var102 = ";\n";
751 var103 = 2;
752 var104 = string__NativeString__to_s_with_length(var102, var103);
753 var101 = var104;
754 varonce100 = var101;
755 }
756 var105 = NEW_array__Array(&type_array__Arraykernel__Object);
757 { /* var105 = array_instance Array[Object] */
758 var106 = 5;
759 var107 = NEW_array__NativeArray(var106, &type_array__NativeArraykernel__Object);
760 ((struct instance_array__NativeArray*)var107)->values[0] = (val*) var89;
761 var108 = BOX_kernel__Int(var93); /* autobox from Int to Object */
762 ((struct instance_array__NativeArray*)var107)->values[1] = (val*) var108;
763 ((struct instance_array__NativeArray*)var107)->values[2] = (val*) var95;
764 var109 = BOX_kernel__Int(var99); /* autobox from Int to Object */
765 ((struct instance_array__NativeArray*)var107)->values[3] = (val*) var109;
766 ((struct instance_array__NativeArray*)var107)->values[4] = (val*) var101;
767 ((void (*)(val*, val*, long))(var105->class->vft[COLOR_array__Array__with_native]))(var105, var107, var106) /* with_native on <var105:Array[Object]>*/;
768 CHECK_NEW_array__Array(var105);
769 }
770 var110 = ((val* (*)(val*))(var105->class->vft[COLOR_string__Object__to_s]))(var105) /* to_s on <var105:Array[Object]>*/;
771 ((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var110) /* write on <var_file:OFStream>*/;
772 CONTINUE_label: (void)0;
773 ((void (*)(val*))(var85->class->vft[COLOR_abstract_collection__Iterator__next]))(var85) /* next on <var85:Iterator[nullable Object]>*/;
774 }
775 BREAK_label: (void)0;
776 var111 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__when_true]))(var_f) /* when_true on <var_f:FlowContext>*/;
777 var112 = ((short int (*)(val*, val*))(var111->class->vft[COLOR_kernel__Object___33d_61d]))(var111, var_f) /* != on <var111:FlowContext>*/;
778 if (var112){
779 if (varonce113) {
780 var114 = varonce113;
781 } else {
782 var115 = "F";
783 var116 = 1;
784 var117 = string__NativeString__to_s_with_length(var115, var116);
785 var114 = var117;
786 varonce113 = var114;
787 }
788 var118 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
789 if (varonce119) {
790 var120 = varonce119;
791 } else {
792 var121 = " -> F";
793 var122 = 5;
794 var123 = string__NativeString__to_s_with_length(var121, var122);
795 var120 = var123;
796 varonce119 = var120;
797 }
798 var124 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__when_true]))(var_f) /* when_true on <var_f:FlowContext>*/;
799 var125 = ((long (*)(val*))(var124->class->vft[COLOR_kernel__Object__object_id]))(var124) /* object_id on <var124:FlowContext>*/;
800 if (varonce126) {
801 var127 = varonce126;
802 } else {
803 var128 = "[label=TRUE, style=dotted];\n";
804 var129 = 28;
805 var130 = string__NativeString__to_s_with_length(var128, var129);
806 var127 = var130;
807 varonce126 = var127;
808 }
809 var131 = NEW_array__Array(&type_array__Arraykernel__Object);
810 { /* var131 = array_instance Array[Object] */
811 var132 = 5;
812 var133 = NEW_array__NativeArray(var132, &type_array__NativeArraykernel__Object);
813 ((struct instance_array__NativeArray*)var133)->values[0] = (val*) var114;
814 var134 = BOX_kernel__Int(var118); /* autobox from Int to Object */
815 ((struct instance_array__NativeArray*)var133)->values[1] = (val*) var134;
816 ((struct instance_array__NativeArray*)var133)->values[2] = (val*) var120;
817 var135 = BOX_kernel__Int(var125); /* autobox from Int to Object */
818 ((struct instance_array__NativeArray*)var133)->values[3] = (val*) var135;
819 ((struct instance_array__NativeArray*)var133)->values[4] = (val*) var127;
820 ((void (*)(val*, val*, long))(var131->class->vft[COLOR_array__Array__with_native]))(var131, var133, var132) /* with_native on <var131:Array[Object]>*/;
821 CHECK_NEW_array__Array(var131);
822 }
823 var136 = ((val* (*)(val*))(var131->class->vft[COLOR_string__Object__to_s]))(var131) /* to_s on <var131:Array[Object]>*/;
824 ((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var136) /* write on <var_file:OFStream>*/;
825 } else {
826 }
827 var137 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__when_false]))(var_f) /* when_false on <var_f:FlowContext>*/;
828 var138 = ((short int (*)(val*, val*))(var137->class->vft[COLOR_kernel__Object___33d_61d]))(var137, var_f) /* != on <var137:FlowContext>*/;
829 if (var138){
830 if (varonce139) {
831 var140 = varonce139;
832 } else {
833 var141 = "F";
834 var142 = 1;
835 var143 = string__NativeString__to_s_with_length(var141, var142);
836 var140 = var143;
837 varonce139 = var140;
838 }
839 var144 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
840 if (varonce145) {
841 var146 = varonce145;
842 } else {
843 var147 = " -> F";
844 var148 = 5;
845 var149 = string__NativeString__to_s_with_length(var147, var148);
846 var146 = var149;
847 varonce145 = var146;
848 }
849 var150 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__when_false]))(var_f) /* when_false on <var_f:FlowContext>*/;
850 var151 = ((long (*)(val*))(var150->class->vft[COLOR_kernel__Object__object_id]))(var150) /* object_id on <var150:FlowContext>*/;
851 if (varonce152) {
852 var153 = varonce152;
853 } else {
854 var154 = "[label=FALSE,style=dotted];\n";
855 var155 = 28;
856 var156 = string__NativeString__to_s_with_length(var154, var155);
857 var153 = var156;
858 varonce152 = var153;
859 }
860 var157 = NEW_array__Array(&type_array__Arraykernel__Object);
861 { /* var157 = array_instance Array[Object] */
862 var158 = 5;
863 var159 = NEW_array__NativeArray(var158, &type_array__NativeArraykernel__Object);
864 ((struct instance_array__NativeArray*)var159)->values[0] = (val*) var140;
865 var160 = BOX_kernel__Int(var144); /* autobox from Int to Object */
866 ((struct instance_array__NativeArray*)var159)->values[1] = (val*) var160;
867 ((struct instance_array__NativeArray*)var159)->values[2] = (val*) var146;
868 var161 = BOX_kernel__Int(var151); /* autobox from Int to Object */
869 ((struct instance_array__NativeArray*)var159)->values[3] = (val*) var161;
870 ((struct instance_array__NativeArray*)var159)->values[4] = (val*) var153;
871 ((void (*)(val*, val*, long))(var157->class->vft[COLOR_array__Array__with_native]))(var157, var159, var158) /* with_native on <var157:Array[Object]>*/;
872 CHECK_NEW_array__Array(var157);
873 }
874 var162 = ((val* (*)(val*))(var157->class->vft[COLOR_string__Object__to_s]))(var157) /* to_s on <var157:Array[Object]>*/;
875 ((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var162) /* write on <var_file:OFStream>*/;
876 } else {
877 }
878 CONTINUE_label163: (void)0;
879 ((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__next]))(var11) /* next on <var11:Iterator[nullable Object]>*/;
880 }
881 BREAK_label163: (void)0;
882 if (varonce164) {
883 var165 = varonce164;
884 } else {
885 var166 = "}\n";
886 var167 = 2;
887 var168 = string__NativeString__to_s_with_length(var166, var167);
888 var165 = var168;
889 varonce164 = var165;
890 }
891 ((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var165) /* write on <var_file:OFStream>*/;
892 ((void (*)(val*))(var_file->class->vft[COLOR_stream__IOS__close]))(var_file) /* close on <var_file:OFStream>*/;
893 RET_LABEL:;
894 }
895 /* method flow#FlowVisitor#printflow for (self: Object) */
896 void VIRTUAL_flow__FlowVisitor__printflow(val* self) {
897 flow__FlowVisitor__printflow(self);
898 RET_LABEL:;
899 }
900 /* method flow#FlowVisitor#make_sub_flow for (self: FlowVisitor): FlowContext */
901 val* flow__FlowVisitor__make_sub_flow(val* self) {
902 val* var /* : FlowContext */;
903 val* var1 /* : FlowContext */;
904 val* var_flow /* var flow: FlowContext */;
905 val* var2 /* : Array[FlowContext] */;
906 val* var3 /* : nullable ANode */;
907 val* var4 /* : FlowContext */;
908 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
909 ((void (*)(val*))(var1->class->vft[COLOR_flow__FlowContext__init]))(var1) /* init on <var1:FlowContext>*/;
910 CHECK_NEW_flow__FlowContext(var1);
911 var_flow = var1;
912 var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
913 ((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_flow) /* add on <var2:Array[FlowContext]>*/;
914 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
915 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_flow, var3) /* node= on <var_flow:FlowContext>*/;
916 var4 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
917 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var4) /* add_previous on <var_flow:FlowContext>*/;
918 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var_flow) /* current_flow_context= on <self:FlowVisitor>*/;
919 var = var_flow;
920 goto RET_LABEL;
921 RET_LABEL:;
922 return var;
923 }
924 /* method flow#FlowVisitor#make_sub_flow for (self: Object): FlowContext */
925 val* VIRTUAL_flow__FlowVisitor__make_sub_flow(val* self) {
926 val* var /* : FlowContext */;
927 val* var1 /* : FlowContext */;
928 var1 = flow__FlowVisitor__make_sub_flow(self);
929 var = var1;
930 RET_LABEL:;
931 return var;
932 }
933 /* method flow#FlowVisitor#make_merge_flow for (self: FlowVisitor, FlowContext, FlowContext): FlowContext */
934 val* flow__FlowVisitor__make_merge_flow(val* self, val* p0, val* p1) {
935 val* var /* : FlowContext */;
936 val* var_flow1 /* var flow1: FlowContext */;
937 val* var_flow2 /* var flow2: FlowContext */;
938 val* var1 /* : FlowContext */;
939 val* var_flow /* var flow: FlowContext */;
940 val* var2 /* : Array[FlowContext] */;
941 val* var3 /* : nullable ANode */;
942 var_flow1 = p0;
943 var_flow2 = p1;
944 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
945 ((void (*)(val*))(var1->class->vft[COLOR_flow__FlowContext__init]))(var1) /* init on <var1:FlowContext>*/;
946 CHECK_NEW_flow__FlowContext(var1);
947 var_flow = var1;
948 var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
949 ((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_flow) /* add on <var2:Array[FlowContext]>*/;
950 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
951 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_flow, var3) /* node= on <var_flow:FlowContext>*/;
952 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var_flow1) /* add_previous on <var_flow:FlowContext>*/;
953 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var_flow2) /* add_previous on <var_flow:FlowContext>*/;
954 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var_flow) /* current_flow_context= on <self:FlowVisitor>*/;
955 var = var_flow;
956 goto RET_LABEL;
957 RET_LABEL:;
958 return var;
959 }
960 /* method flow#FlowVisitor#make_merge_flow for (self: Object, FlowContext, FlowContext): FlowContext */
961 val* VIRTUAL_flow__FlowVisitor__make_merge_flow(val* self, val* p0, val* p1) {
962 val* var /* : FlowContext */;
963 val* var1 /* : FlowContext */;
964 var1 = flow__FlowVisitor__make_merge_flow(self, p0, p1);
965 var = var1;
966 RET_LABEL:;
967 return var;
968 }
969 /* method flow#FlowVisitor#make_true_false_flow for (self: FlowVisitor, FlowContext, FlowContext): FlowContext */
970 val* flow__FlowVisitor__make_true_false_flow(val* self, val* p0, val* p1) {
971 val* var /* : FlowContext */;
972 val* var_true_flow /* var true_flow: FlowContext */;
973 val* var_false_flow /* var false_flow: FlowContext */;
974 val* var1 /* : FlowContext */;
975 val* var_flow /* var flow: FlowContext */;
976 val* var2 /* : Array[FlowContext] */;
977 val* var3 /* : nullable ANode */;
978 var_true_flow = p0;
979 var_false_flow = p1;
980 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
981 ((void (*)(val*))(var1->class->vft[COLOR_flow__FlowContext__init]))(var1) /* init on <var1:FlowContext>*/;
982 CHECK_NEW_flow__FlowContext(var1);
983 var_flow = var1;
984 var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
985 ((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_flow) /* add on <var2:Array[FlowContext]>*/;
986 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
987 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_flow, var3) /* node= on <var_flow:FlowContext>*/;
988 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var_true_flow) /* add_previous on <var_flow:FlowContext>*/;
989 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var_false_flow) /* add_previous on <var_flow:FlowContext>*/;
990 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__when_true_61d]))(var_flow, var_true_flow) /* when_true= on <var_flow:FlowContext>*/;
991 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__when_false_61d]))(var_flow, var_false_flow) /* when_false= on <var_flow:FlowContext>*/;
992 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var_flow) /* current_flow_context= on <self:FlowVisitor>*/;
993 var = var_flow;
994 goto RET_LABEL;
995 RET_LABEL:;
996 return var;
997 }
998 /* method flow#FlowVisitor#make_true_false_flow for (self: Object, FlowContext, FlowContext): FlowContext */
999 val* VIRTUAL_flow__FlowVisitor__make_true_false_flow(val* self, val* p0, val* p1) {
1000 val* var /* : FlowContext */;
1001 val* var1 /* : FlowContext */;
1002 var1 = flow__FlowVisitor__make_true_false_flow(self, p0, p1);
1003 var = var1;
1004 RET_LABEL:;
1005 return var;
1006 }
1007 /* method flow#FlowVisitor#make_sub_true_false_flow for (self: FlowVisitor): FlowContext */
1008 val* flow__FlowVisitor__make_sub_true_false_flow(val* self) {
1009 val* var /* : FlowContext */;
1010 val* var1 /* : FlowContext */;
1011 val* var_orig_flow /* var orig_flow: FlowContext */;
1012 val* var2 /* : FlowContext */;
1013 val* var_true_flow /* var true_flow: FlowContext */;
1014 val* var3 /* : Array[FlowContext] */;
1015 val* var4 /* : nullable ANode */;
1016 static val* varonce;
1017 val* var5 /* : String */;
1018 char* var6 /* : NativeString */;
1019 long var7 /* : Int */;
1020 val* var8 /* : String */;
1021 val* var9 /* : FlowContext */;
1022 val* var_false_flow /* var false_flow: FlowContext */;
1023 val* var10 /* : Array[FlowContext] */;
1024 val* var11 /* : nullable ANode */;
1025 static val* varonce12;
1026 val* var13 /* : String */;
1027 char* var14 /* : NativeString */;
1028 long var15 /* : Int */;
1029 val* var16 /* : String */;
1030 val* var17 /* : FlowContext */;
1031 var1 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
1032 var_orig_flow = var1;
1033 var2 = NEW_flow__FlowContext(&type_flow__FlowContext);
1034 ((void (*)(val*))(var2->class->vft[COLOR_flow__FlowContext__init]))(var2) /* init on <var2:FlowContext>*/;
1035 CHECK_NEW_flow__FlowContext(var2);
1036 var_true_flow = var2;
1037 var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
1038 ((void (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var3, var_true_flow) /* add on <var3:Array[FlowContext]>*/;
1039 var4 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
1040 ((void (*)(val*, val*))(var_true_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_true_flow, var4) /* node= on <var_true_flow:FlowContext>*/;
1041 ((void (*)(val*, val*))(var_true_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_true_flow, var_orig_flow) /* add_previous on <var_true_flow:FlowContext>*/;
1042 if (varonce) {
1043 var5 = varonce;
1044 } else {
1045 var6 = "TRUE";
1046 var7 = 4;
1047 var8 = string__NativeString__to_s_with_length(var6, var7);
1048 var5 = var8;
1049 varonce = var5;
1050 }
1051 ((void (*)(val*, val*))(var_true_flow->class->vft[COLOR_flow__FlowContext__name_61d]))(var_true_flow, var5) /* name= on <var_true_flow:FlowContext>*/;
1052 var9 = NEW_flow__FlowContext(&type_flow__FlowContext);
1053 ((void (*)(val*))(var9->class->vft[COLOR_flow__FlowContext__init]))(var9) /* init on <var9:FlowContext>*/;
1054 CHECK_NEW_flow__FlowContext(var9);
1055 var_false_flow = var9;
1056 var10 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
1057 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var10, var_false_flow) /* add on <var10:Array[FlowContext]>*/;
1058 var11 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
1059 ((void (*)(val*, val*))(var_false_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_false_flow, var11) /* node= on <var_false_flow:FlowContext>*/;
1060 ((void (*)(val*, val*))(var_false_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_false_flow, var_orig_flow) /* add_previous on <var_false_flow:FlowContext>*/;
1061 if (varonce12) {
1062 var13 = varonce12;
1063 } else {
1064 var14 = "FALSE";
1065 var15 = 5;
1066 var16 = string__NativeString__to_s_with_length(var14, var15);
1067 var13 = var16;
1068 varonce12 = var13;
1069 }
1070 ((void (*)(val*, val*))(var_false_flow->class->vft[COLOR_flow__FlowContext__name_61d]))(var_false_flow, var13) /* name= on <var_false_flow:FlowContext>*/;
1071 var17 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__make_true_false_flow]))(self, var_true_flow, var_false_flow) /* make_true_false_flow on <self:FlowVisitor>*/;
1072 var = var17;
1073 goto RET_LABEL;
1074 RET_LABEL:;
1075 return var;
1076 }
1077 /* method flow#FlowVisitor#make_sub_true_false_flow for (self: Object): FlowContext */
1078 val* VIRTUAL_flow__FlowVisitor__make_sub_true_false_flow(val* self) {
1079 val* var /* : FlowContext */;
1080 val* var1 /* : FlowContext */;
1081 var1 = flow__FlowVisitor__make_sub_true_false_flow(self);
1082 var = var1;
1083 RET_LABEL:;
1084 return var;
1085 }
1086 /* method flow#FlowVisitor#make_unreachable_flow for (self: FlowVisitor): FlowContext */
1087 val* flow__FlowVisitor__make_unreachable_flow(val* self) {
1088 val* var /* : FlowContext */;
1089 val* var1 /* : FlowContext */;
1090 val* var_flow /* var flow: FlowContext */;
1091 val* var2 /* : Array[FlowContext] */;
1092 val* var3 /* : nullable ANode */;
1093 val* var4 /* : FlowContext */;
1094 short int var5 /* : Bool */;
1095 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
1096 ((void (*)(val*))(var1->class->vft[COLOR_flow__FlowContext__init]))(var1) /* init on <var1:FlowContext>*/;
1097 CHECK_NEW_flow__FlowContext(var1);
1098 var_flow = var1;
1099 var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
1100 ((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_flow) /* add on <var2:Array[FlowContext]>*/;
1101 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
1102 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_flow, var3) /* node= on <var_flow:FlowContext>*/;
1103 var4 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
1104 ((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var4) /* add_previous on <var_flow:FlowContext>*/;
1105 var5 = 1;
1106 ((void (*)(val*, short int))(var_flow->class->vft[COLOR_flow__FlowContext__is_marked_unreachable_61d]))(var_flow, var5) /* is_marked_unreachable= on <var_flow:FlowContext>*/;
1107 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var_flow) /* current_flow_context= on <self:FlowVisitor>*/;
1108 var = var_flow;
1109 goto RET_LABEL;
1110 RET_LABEL:;
1111 return var;
1112 }
1113 /* method flow#FlowVisitor#make_unreachable_flow for (self: Object): FlowContext */
1114 val* VIRTUAL_flow__FlowVisitor__make_unreachable_flow(val* self) {
1115 val* var /* : FlowContext */;
1116 val* var1 /* : FlowContext */;
1117 var1 = flow__FlowVisitor__make_unreachable_flow(self);
1118 var = var1;
1119 RET_LABEL:;
1120 return var;
1121 }
1122 /* method flow#FlowVisitor#merge_continues_to for (self: FlowVisitor, FlowContext, nullable EscapeMark) */
1123 void flow__FlowVisitor__merge_continues_to(val* self, val* p0, val* p1) {
1124 val* var_before_loop /* var before_loop: FlowContext */;
1125 val* var_escapemark /* var escapemark: nullable EscapeMark */;
1126 val* var /* : null */;
1127 short int var1 /* : Bool */;
1128 val* var2 /* : Array[AContinueExpr] */;
1129 val* var3 /* : Iterator[nullable Object] */;
1130 short int var4 /* : Bool */;
1131 val* var5 /* : nullable Object */;
1132 val* var_b /* var b: AContinueExpr */;
1133 val* var6 /* : nullable FlowContext */;
1134 val* var_before /* var before: nullable FlowContext */;
1135 val* var7 /* : null */;
1136 short int var8 /* : Bool */;
1137 var_before_loop = p0;
1138 var_escapemark = p1;
1139 var = NULL;
1140 if (var_escapemark == NULL) {
1141 var1 = 1; /* is null */
1142 } else {
1143 var1 = 0; /* arg is null but recv is not */
1144 }
1145 if (var1){
1146 goto RET_LABEL;
1147 } else {
1148 }
1149 var2 = ((val* (*)(val*))(var_escapemark->class->vft[COLOR_scope__EscapeMark__continues]))(var_escapemark) /* continues on <var_escapemark:nullable EscapeMark(EscapeMark)>*/;
1150 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Array[AContinueExpr]>*/;
1151 for(;;) {
1152 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
1153 if(!var4) break;
1154 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
1155 var_b = var5;
1156 var6 = ((val* (*)(val*))(var_b->class->vft[COLOR_flow__AContinueExpr__before_flow_context]))(var_b) /* before_flow_context on <var_b:AContinueExpr>*/;
1157 var_before = var6;
1158 var7 = NULL;
1159 if (var_before == NULL) {
1160 var8 = 1; /* is null */
1161 } else {
1162 var8 = 0; /* arg is null but recv is not */
1163 }
1164 if (var8){
1165 goto CONTINUE_label;
1166 } else {
1167 }
1168 ((void (*)(val*, val*))(var_before_loop->class->vft[COLOR_flow__FlowContext__add_loop]))(var_before_loop, var_before) /* add_loop on <var_before_loop:FlowContext>*/;
1169 CONTINUE_label: (void)0;
1170 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
1171 }
1172 BREAK_label: (void)0;
1173 RET_LABEL:;
1174 }
1175 /* method flow#FlowVisitor#merge_continues_to for (self: Object, FlowContext, nullable EscapeMark) */
1176 void VIRTUAL_flow__FlowVisitor__merge_continues_to(val* self, val* p0, val* p1) {
1177 flow__FlowVisitor__merge_continues_to(self, p0, p1);
1178 RET_LABEL:;
1179 }
1180 /* method flow#FlowVisitor#merge_breaks for (self: FlowVisitor, nullable EscapeMark) */
1181 void flow__FlowVisitor__merge_breaks(val* self, val* p0) {
1182 val* var_escapemark /* var escapemark: nullable EscapeMark */;
1183 val* var /* : null */;
1184 short int var1 /* : Bool */;
1185 val* var2 /* : Array[ABreakExpr] */;
1186 val* var3 /* : Iterator[nullable Object] */;
1187 short int var4 /* : Bool */;
1188 val* var5 /* : nullable Object */;
1189 val* var_b /* var b: ABreakExpr */;
1190 val* var6 /* : nullable FlowContext */;
1191 val* var_before /* var before: nullable FlowContext */;
1192 val* var7 /* : null */;
1193 short int var8 /* : Bool */;
1194 val* var9 /* : FlowContext */;
1195 val* var10 /* : FlowContext */;
1196 var_escapemark = p0;
1197 var = NULL;
1198 if (var_escapemark == NULL) {
1199 var1 = 1; /* is null */
1200 } else {
1201 var1 = 0; /* arg is null but recv is not */
1202 }
1203 if (var1){
1204 goto RET_LABEL;
1205 } else {
1206 }
1207 var2 = ((val* (*)(val*))(var_escapemark->class->vft[COLOR_scope__EscapeMark__breaks]))(var_escapemark) /* breaks on <var_escapemark:nullable EscapeMark(EscapeMark)>*/;
1208 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Array[ABreakExpr]>*/;
1209 for(;;) {
1210 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
1211 if(!var4) break;
1212 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
1213 var_b = var5;
1214 var6 = ((val* (*)(val*))(var_b->class->vft[COLOR_flow__ABreakExpr__before_flow_context]))(var_b) /* before_flow_context on <var_b:ABreakExpr>*/;
1215 var_before = var6;
1216 var7 = NULL;
1217 if (var_before == NULL) {
1218 var8 = 1; /* is null */
1219 } else {
1220 var8 = 0; /* arg is null but recv is not */
1221 }
1222 if (var8){
1223 goto CONTINUE_label;
1224 } else {
1225 }
1226 var9 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
1227 var10 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__make_merge_flow]))(self, var9, var_before) /* make_merge_flow on <self:FlowVisitor>*/;
1228 var10;
1229 CONTINUE_label: (void)0;
1230 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
1231 }
1232 BREAK_label: (void)0;
1233 RET_LABEL:;
1234 }
1235 /* method flow#FlowVisitor#merge_breaks for (self: Object, nullable EscapeMark) */
1236 void VIRTUAL_flow__FlowVisitor__merge_breaks(val* self, val* p0) {
1237 flow__FlowVisitor__merge_breaks(self, p0);
1238 RET_LABEL:;
1239 }
1240 /* method flow#FlowContext#previous for (self: FlowContext): Array[FlowContext] */
1241 val* flow__FlowContext__previous(val* self) {
1242 val* var /* : Array[FlowContext] */;
1243 val* var1 /* : Array[FlowContext] */;
1244 var1 = self->attrs[COLOR_flow__FlowContext___64dprevious].val; /* @previous on <self:FlowContext> */
1245 if (var1 == NULL) {
1246 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @previous", "src/flow.nit", 192);
1247 exit(1);
1248 }
1249 var = var1;
1250 RET_LABEL:;
1251 return var;
1252 }
1253 /* method flow#FlowContext#previous for (self: Object): Array[FlowContext] */
1254 val* VIRTUAL_flow__FlowContext__previous(val* self) {
1255 val* var /* : Array[FlowContext] */;
1256 val* var1 /* : Array[FlowContext] */;
1257 var1 = flow__FlowContext__previous(self);
1258 var = var1;
1259 RET_LABEL:;
1260 return var;
1261 }
1262 /* method flow#FlowContext#previous= for (self: FlowContext, Array[FlowContext]) */
1263 void flow__FlowContext__previous_61d(val* self, val* p0) {
1264 self->attrs[COLOR_flow__FlowContext___64dprevious].val = p0; /* @previous on <self:FlowContext> */
1265 RET_LABEL:;
1266 }
1267 /* method flow#FlowContext#previous= for (self: Object, Array[FlowContext]) */
1268 void VIRTUAL_flow__FlowContext__previous_61d(val* self, val* p0) {
1269 flow__FlowContext__previous_61d(self, p0);
1270 RET_LABEL:;
1271 }
1272 /* method flow#FlowContext#loops for (self: FlowContext): Array[FlowContext] */
1273 val* flow__FlowContext__loops(val* self) {
1274 val* var /* : Array[FlowContext] */;
1275 val* var1 /* : Array[FlowContext] */;
1276 var1 = self->attrs[COLOR_flow__FlowContext___64dloops].val; /* @loops on <self:FlowContext> */
1277 if (var1 == NULL) {
1278 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @loops", "src/flow.nit", 195);
1279 exit(1);
1280 }
1281 var = var1;
1282 RET_LABEL:;
1283 return var;
1284 }
1285 /* method flow#FlowContext#loops for (self: Object): Array[FlowContext] */
1286 val* VIRTUAL_flow__FlowContext__loops(val* self) {
1287 val* var /* : Array[FlowContext] */;
1288 val* var1 /* : Array[FlowContext] */;
1289 var1 = flow__FlowContext__loops(self);
1290 var = var1;
1291 RET_LABEL:;
1292 return var;
1293 }
1294 /* method flow#FlowContext#loops= for (self: FlowContext, Array[FlowContext]) */
1295 void flow__FlowContext__loops_61d(val* self, val* p0) {
1296 self->attrs[COLOR_flow__FlowContext___64dloops].val = p0; /* @loops on <self:FlowContext> */
1297 RET_LABEL:;
1298 }
1299 /* method flow#FlowContext#loops= for (self: Object, Array[FlowContext]) */
1300 void VIRTUAL_flow__FlowContext__loops_61d(val* self, val* p0) {
1301 flow__FlowContext__loops_61d(self, p0);
1302 RET_LABEL:;
1303 }
1304 /* method flow#FlowContext#is_marked_unreachable for (self: FlowContext): Bool */
1305 short int flow__FlowContext__is_marked_unreachable(val* self) {
1306 short int var /* : Bool */;
1307 short int var1 /* : Bool */;
1308 var1 = self->attrs[COLOR_flow__FlowContext___64dis_marked_unreachable].s; /* @is_marked_unreachable on <self:FlowContext> */
1309 var = var1;
1310 RET_LABEL:;
1311 return var;
1312 }
1313 /* method flow#FlowContext#is_marked_unreachable for (self: Object): Bool */
1314 short int VIRTUAL_flow__FlowContext__is_marked_unreachable(val* self) {
1315 short int var /* : Bool */;
1316 short int var1 /* : Bool */;
1317 var1 = flow__FlowContext__is_marked_unreachable(self);
1318 var = var1;
1319 RET_LABEL:;
1320 return var;
1321 }
1322 /* method flow#FlowContext#is_marked_unreachable= for (self: FlowContext, Bool) */
1323 void flow__FlowContext__is_marked_unreachable_61d(val* self, short int p0) {
1324 self->attrs[COLOR_flow__FlowContext___64dis_marked_unreachable].s = p0; /* @is_marked_unreachable on <self:FlowContext> */
1325 RET_LABEL:;
1326 }
1327 /* method flow#FlowContext#is_marked_unreachable= for (self: Object, Bool) */
1328 void VIRTUAL_flow__FlowContext__is_marked_unreachable_61d(val* self, short int p0) {
1329 flow__FlowContext__is_marked_unreachable_61d(self, p0);
1330 RET_LABEL:;
1331 }
1332 /* method flow#FlowContext#is_unreachable for (self: FlowContext): Bool */
1333 short int flow__FlowContext__is_unreachable(val* self) {
1334 short int var /* : Bool */;
1335 short int var1 /* : Bool */;
1336 short int var2 /* : Bool */;
1337 short int var3 /* : Bool */;
1338 short int var4 /* : Bool */;
1339 val* var5 /* : Array[FlowContext] */;
1340 long var6 /* : Int */;
1341 long var7 /* : Int */;
1342 short int var8 /* : Bool */;
1343 short int var10 /* : Bool */;
1344 short int var11 /* : Bool */;
1345 short int var12 /* : Bool */;
1346 var1 = ((short int (*)(val*))(self->class->vft[COLOR_flow__FlowContext__is_marked_unreachable]))(self) /* is_marked_unreachable on <self:FlowContext>*/;
1347 if (var1){
1348 var2 = 1;
1349 var = var2;
1350 goto RET_LABEL;
1351 } else {
1352 }
1353 var3 = ((short int (*)(val*))(self->class->vft[COLOR_flow__FlowContext__is_start]))(self) /* is_start on <self:FlowContext>*/;
1354 if (var3){
1355 var4 = 0;
1356 var = var4;
1357 goto RET_LABEL;
1358 } else {
1359 }
1360 var5 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__previous]))(self) /* previous on <self:FlowContext>*/;
1361 var6 = ((long (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__length]))(var5) /* length on <var5:Array[FlowContext]>*/;
1362 var7 = 0;
1363 { /* Inline kernel#Int#== (var6,var7) */
1364 var10 = var6 == var7;
1365 var8 = var10;
1366 goto RET_LABEL9;
1367 RET_LABEL9:(void)0;
1368 }
1369 if (var8){
1370 var11 = 1;
1371 var = var11;
1372 goto RET_LABEL;
1373 } else {
1374 }
1375 var12 = 0;
1376 var = var12;
1377 goto RET_LABEL;
1378 RET_LABEL:;
1379 return var;
1380 }
1381 /* method flow#FlowContext#is_unreachable for (self: Object): Bool */
1382 short int VIRTUAL_flow__FlowContext__is_unreachable(val* self) {
1383 short int var /* : Bool */;
1384 short int var1 /* : Bool */;
1385 var1 = flow__FlowContext__is_unreachable(self);
1386 var = var1;
1387 RET_LABEL:;
1388 return var;
1389 }
1390 /* method flow#FlowContext#is_already_unreachable for (self: FlowContext): Bool */
1391 short int flow__FlowContext__is_already_unreachable(val* self) {
1392 short int var /* : Bool */;
1393 short int var1 /* : Bool */;
1394 var1 = self->attrs[COLOR_flow__FlowContext___64dis_already_unreachable].s; /* @is_already_unreachable on <self:FlowContext> */
1395 var = var1;
1396 RET_LABEL:;
1397 return var;
1398 }
1399 /* method flow#FlowContext#is_already_unreachable for (self: Object): Bool */
1400 short int VIRTUAL_flow__FlowContext__is_already_unreachable(val* self) {
1401 short int var /* : Bool */;
1402 short int var1 /* : Bool */;
1403 var1 = flow__FlowContext__is_already_unreachable(self);
1404 var = var1;
1405 RET_LABEL:;
1406 return var;
1407 }
1408 /* method flow#FlowContext#is_already_unreachable= for (self: FlowContext, Bool) */
1409 void flow__FlowContext__is_already_unreachable_61d(val* self, short int p0) {
1410 self->attrs[COLOR_flow__FlowContext___64dis_already_unreachable].s = p0; /* @is_already_unreachable on <self:FlowContext> */
1411 RET_LABEL:;
1412 }
1413 /* method flow#FlowContext#is_already_unreachable= for (self: Object, Bool) */
1414 void VIRTUAL_flow__FlowContext__is_already_unreachable_61d(val* self, short int p0) {
1415 flow__FlowContext__is_already_unreachable_61d(self, p0);
1416 RET_LABEL:;
1417 }
1418 /* method flow#FlowContext#is_start for (self: FlowContext): Bool */
1419 short int flow__FlowContext__is_start(val* self) {
1420 short int var /* : Bool */;
1421 short int var1 /* : Bool */;
1422 var1 = self->attrs[COLOR_flow__FlowContext___64dis_start].s; /* @is_start on <self:FlowContext> */
1423 var = var1;
1424 RET_LABEL:;
1425 return var;
1426 }
1427 /* method flow#FlowContext#is_start for (self: Object): Bool */
1428 short int VIRTUAL_flow__FlowContext__is_start(val* self) {
1429 short int var /* : Bool */;
1430 short int var1 /* : Bool */;
1431 var1 = flow__FlowContext__is_start(self);
1432 var = var1;
1433 RET_LABEL:;
1434 return var;
1435 }
1436 /* method flow#FlowContext#is_start= for (self: FlowContext, Bool) */
1437 void flow__FlowContext__is_start_61d(val* self, short int p0) {
1438 self->attrs[COLOR_flow__FlowContext___64dis_start].s = p0; /* @is_start on <self:FlowContext> */
1439 RET_LABEL:;
1440 }
1441 /* method flow#FlowContext#is_start= for (self: Object, Bool) */
1442 void VIRTUAL_flow__FlowContext__is_start_61d(val* self, short int p0) {
1443 flow__FlowContext__is_start_61d(self, p0);
1444 RET_LABEL:;
1445 }
1446 /* method flow#FlowContext#node for (self: FlowContext): nullable ANode */
1447 val* flow__FlowContext__node(val* self) {
1448 val* var /* : nullable ANode */;
1449 val* var1 /* : nullable ANode */;
1450 var1 = self->attrs[COLOR_flow__FlowContext___64dnode].val; /* @node on <self:FlowContext> */
1451 var = var1;
1452 RET_LABEL:;
1453 return var;
1454 }
1455 /* method flow#FlowContext#node for (self: Object): nullable ANode */
1456 val* VIRTUAL_flow__FlowContext__node(val* self) {
1457 val* var /* : nullable ANode */;
1458 val* var1 /* : nullable ANode */;
1459 var1 = flow__FlowContext__node(self);
1460 var = var1;
1461 RET_LABEL:;
1462 return var;
1463 }
1464 /* method flow#FlowContext#node= for (self: FlowContext, nullable ANode) */
1465 void flow__FlowContext__node_61d(val* self, val* p0) {
1466 self->attrs[COLOR_flow__FlowContext___64dnode].val = p0; /* @node on <self:FlowContext> */
1467 RET_LABEL:;
1468 }
1469 /* method flow#FlowContext#node= for (self: Object, nullable ANode) */
1470 void VIRTUAL_flow__FlowContext__node_61d(val* self, val* p0) {
1471 flow__FlowContext__node_61d(self, p0);
1472 RET_LABEL:;
1473 }
1474 /* method flow#FlowContext#name for (self: FlowContext): String */
1475 val* flow__FlowContext__name(val* self) {
1476 val* var /* : String */;
1477 val* var1 /* : String */;
1478 var1 = self->attrs[COLOR_flow__FlowContext___64dname].val; /* @name on <self:FlowContext> */
1479 if (var1 == NULL) {
1480 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @name", "src/flow.nit", 225);
1481 exit(1);
1482 }
1483 var = var1;
1484 RET_LABEL:;
1485 return var;
1486 }
1487 /* method flow#FlowContext#name for (self: Object): String */
1488 val* VIRTUAL_flow__FlowContext__name(val* self) {
1489 val* var /* : String */;
1490 val* var1 /* : String */;
1491 var1 = flow__FlowContext__name(self);
1492 var = var1;
1493 RET_LABEL:;
1494 return var;
1495 }
1496 /* method flow#FlowContext#name= for (self: FlowContext, String) */
1497 void flow__FlowContext__name_61d(val* self, val* p0) {
1498 self->attrs[COLOR_flow__FlowContext___64dname].val = p0; /* @name on <self:FlowContext> */
1499 RET_LABEL:;
1500 }
1501 /* method flow#FlowContext#name= for (self: Object, String) */
1502 void VIRTUAL_flow__FlowContext__name_61d(val* self, val* p0) {
1503 flow__FlowContext__name_61d(self, p0);
1504 RET_LABEL:;
1505 }
1506 /* method flow#FlowContext#when_true for (self: FlowContext): FlowContext */
1507 val* flow__FlowContext__when_true(val* self) {
1508 val* var /* : FlowContext */;
1509 val* var1 /* : FlowContext */;
1510 var1 = self->attrs[COLOR_flow__FlowContext___64dwhen_true].val; /* @when_true on <self:FlowContext> */
1511 if (var1 == NULL) {
1512 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @when_true", "src/flow.nit", 228);
1513 exit(1);
1514 }
1515 var = var1;
1516 RET_LABEL:;
1517 return var;
1518 }
1519 /* method flow#FlowContext#when_true for (self: Object): FlowContext */
1520 val* VIRTUAL_flow__FlowContext__when_true(val* self) {
1521 val* var /* : FlowContext */;
1522 val* var1 /* : FlowContext */;
1523 var1 = flow__FlowContext__when_true(self);
1524 var = var1;
1525 RET_LABEL:;
1526 return var;
1527 }
1528 /* method flow#FlowContext#when_true= for (self: FlowContext, FlowContext) */
1529 void flow__FlowContext__when_true_61d(val* self, val* p0) {
1530 self->attrs[COLOR_flow__FlowContext___64dwhen_true].val = p0; /* @when_true on <self:FlowContext> */
1531 RET_LABEL:;
1532 }
1533 /* method flow#FlowContext#when_true= for (self: Object, FlowContext) */
1534 void VIRTUAL_flow__FlowContext__when_true_61d(val* self, val* p0) {
1535 flow__FlowContext__when_true_61d(self, p0);
1536 RET_LABEL:;
1537 }
1538 /* method flow#FlowContext#when_false for (self: FlowContext): FlowContext */
1539 val* flow__FlowContext__when_false(val* self) {
1540 val* var /* : FlowContext */;
1541 val* var1 /* : FlowContext */;
1542 var1 = self->attrs[COLOR_flow__FlowContext___64dwhen_false].val; /* @when_false on <self:FlowContext> */
1543 if (var1 == NULL) {
1544 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @when_false", "src/flow.nit", 231);
1545 exit(1);
1546 }
1547 var = var1;
1548 RET_LABEL:;
1549 return var;
1550 }
1551 /* method flow#FlowContext#when_false for (self: Object): FlowContext */
1552 val* VIRTUAL_flow__FlowContext__when_false(val* self) {
1553 val* var /* : FlowContext */;
1554 val* var1 /* : FlowContext */;
1555 var1 = flow__FlowContext__when_false(self);
1556 var = var1;
1557 RET_LABEL:;
1558 return var;
1559 }
1560 /* method flow#FlowContext#when_false= for (self: FlowContext, FlowContext) */
1561 void flow__FlowContext__when_false_61d(val* self, val* p0) {
1562 self->attrs[COLOR_flow__FlowContext___64dwhen_false].val = p0; /* @when_false on <self:FlowContext> */
1563 RET_LABEL:;
1564 }
1565 /* method flow#FlowContext#when_false= for (self: Object, FlowContext) */
1566 void VIRTUAL_flow__FlowContext__when_false_61d(val* self, val* p0) {
1567 flow__FlowContext__when_false_61d(self, p0);
1568 RET_LABEL:;
1569 }
1570 /* method flow#FlowContext#add_previous for (self: FlowContext, FlowContext) */
1571 void flow__FlowContext__add_previous(val* self, val* p0) {
1572 val* var_flow /* var flow: FlowContext */;
1573 short int var /* : Bool */;
1574 short int var1 /* : Bool */;
1575 short int var2 /* : Bool */;
1576 short int var_ /* var : Bool */;
1577 val* var3 /* : Array[FlowContext] */;
1578 short int var4 /* : Bool */;
1579 short int var5 /* : Bool */;
1580 val* var6 /* : Array[FlowContext] */;
1581 var_flow = p0;
1582 var1 = ((short int (*)(val*))(var_flow->class->vft[COLOR_flow__FlowContext__is_unreachable]))(var_flow) /* is_unreachable on <var_flow:FlowContext>*/;
1583 var2 = !var1;
1584 var_ = var2;
1585 if (var2){
1586 var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__previous]))(self) /* previous on <self:FlowContext>*/;
1587 var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_flow) /* has on <var3:Array[FlowContext]>*/;
1588 var5 = !var4;
1589 var = var5;
1590 } else {
1591 var = var_;
1592 }
1593 if (var){
1594 var6 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__previous]))(self) /* previous on <self:FlowContext>*/;
1595 ((void (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var6, var_flow) /* add on <var6:Array[FlowContext]>*/;
1596 } else {
1597 }
1598 RET_LABEL:;
1599 }
1600 /* method flow#FlowContext#add_previous for (self: Object, FlowContext) */
1601 void VIRTUAL_flow__FlowContext__add_previous(val* self, val* p0) {
1602 flow__FlowContext__add_previous(self, p0);
1603 RET_LABEL:;
1604 }
1605 /* method flow#FlowContext#add_loop for (self: FlowContext, FlowContext) */
1606 void flow__FlowContext__add_loop(val* self, val* p0) {
1607 val* var_flow /* var flow: FlowContext */;
1608 short int var /* : Bool */;
1609 short int var1 /* : Bool */;
1610 short int var2 /* : Bool */;
1611 short int var_ /* var : Bool */;
1612 val* var3 /* : Array[FlowContext] */;
1613 short int var4 /* : Bool */;
1614 short int var5 /* : Bool */;
1615 val* var6 /* : Array[FlowContext] */;
1616 var_flow = p0;
1617 var1 = ((short int (*)(val*))(var_flow->class->vft[COLOR_flow__FlowContext__is_unreachable]))(var_flow) /* is_unreachable on <var_flow:FlowContext>*/;
1618 var2 = !var1;
1619 var_ = var2;
1620 if (var2){
1621 var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__previous]))(self) /* previous on <self:FlowContext>*/;
1622 var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_flow) /* has on <var3:Array[FlowContext]>*/;
1623 var5 = !var4;
1624 var = var5;
1625 } else {
1626 var = var_;
1627 }
1628 if (var){
1629 var6 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__loops]))(self) /* loops on <self:FlowContext>*/;
1630 ((void (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var6, var_flow) /* add on <var6:Array[FlowContext]>*/;
1631 } else {
1632 }
1633 RET_LABEL:;
1634 }
1635 /* method flow#FlowContext#add_loop for (self: Object, FlowContext) */
1636 void VIRTUAL_flow__FlowContext__add_loop(val* self, val* p0) {
1637 flow__FlowContext__add_loop(self, p0);
1638 RET_LABEL:;
1639 }
1640 /* method flow#FlowContext#init for (self: FlowContext) */
1641 void flow__FlowContext__init(val* self) {
1642 RET_LABEL:;
1643 }
1644 /* method flow#FlowContext#init for (self: Object) */
1645 void VIRTUAL_flow__FlowContext__init(val* self) {
1646 flow__FlowContext__init(self);
1647 RET_LABEL:;
1648 }
1649 /* method flow#ANode#accept_flow_visitor for (self: ANode, FlowVisitor) */
1650 void flow__ANode__accept_flow_visitor(val* self, val* p0) {
1651 val* var_v /* var v: FlowVisitor */;
1652 var_v = p0;
1653 ((void (*)(val*, val*))(self->class->vft[COLOR_parser_nodes__ANode__visit_all]))(self, var_v) /* visit_all on <self:ANode>*/;
1654 RET_LABEL:;
1655 }
1656 /* method flow#ANode#accept_flow_visitor for (self: Object, FlowVisitor) */
1657 void VIRTUAL_flow__ANode__accept_flow_visitor(val* self, val* p0) {
1658 flow__ANode__accept_flow_visitor(self, p0);
1659 RET_LABEL:;
1660 }
1661 /* method flow#APropdef#do_flow for (self: APropdef, ToolContext) */
1662 void flow__APropdef__do_flow(val* self, val* p0) {
1663 val* var_toolcontext /* var toolcontext: ToolContext */;
1664 val* var /* : FlowVisitor */;
1665 val* var_v /* var v: FlowVisitor */;
1666 var_toolcontext = p0;
1667 var = NEW_flow__FlowVisitor(&type_flow__FlowVisitor);
1668 ((void (*)(val*, val*))(var->class->vft[COLOR_flow__FlowVisitor__init]))(var, var_toolcontext) /* init on <var:FlowVisitor>*/;
1669 CHECK_NEW_flow__FlowVisitor(var);
1670 var_v = var;
1671 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, self) /* enter_visit on <var_v:FlowVisitor>*/;
1672 RET_LABEL:;
1673 }
1674 /* method flow#APropdef#do_flow for (self: Object, ToolContext) */
1675 void VIRTUAL_flow__APropdef__do_flow(val* self, val* p0) {
1676 flow__APropdef__do_flow(self, p0);
1677 RET_LABEL:;
1678 }
1679 /* method flow#APropdef#before_flow_context for (self: APropdef): nullable FlowContext */
1680 val* flow__APropdef__before_flow_context(val* self) {
1681 val* var /* : nullable FlowContext */;
1682 val* var1 /* : nullable FlowContext */;
1683 var1 = self->attrs[COLOR_flow__APropdef___64dbefore_flow_context].val; /* @before_flow_context on <self:APropdef> */
1684 var = var1;
1685 RET_LABEL:;
1686 return var;
1687 }
1688 /* method flow#APropdef#before_flow_context for (self: Object): nullable FlowContext */
1689 val* VIRTUAL_flow__APropdef__before_flow_context(val* self) {
1690 val* var /* : nullable FlowContext */;
1691 val* var1 /* : nullable FlowContext */;
1692 var1 = flow__APropdef__before_flow_context(self);
1693 var = var1;
1694 RET_LABEL:;
1695 return var;
1696 }
1697 /* method flow#APropdef#before_flow_context= for (self: APropdef, nullable FlowContext) */
1698 void flow__APropdef__before_flow_context_61d(val* self, val* p0) {
1699 self->attrs[COLOR_flow__APropdef___64dbefore_flow_context].val = p0; /* @before_flow_context on <self:APropdef> */
1700 RET_LABEL:;
1701 }
1702 /* method flow#APropdef#before_flow_context= for (self: Object, nullable FlowContext) */
1703 void VIRTUAL_flow__APropdef__before_flow_context_61d(val* self, val* p0) {
1704 flow__APropdef__before_flow_context_61d(self, p0);
1705 RET_LABEL:;
1706 }
1707 /* method flow#APropdef#after_flow_context for (self: APropdef): nullable FlowContext */
1708 val* flow__APropdef__after_flow_context(val* self) {
1709 val* var /* : nullable FlowContext */;
1710 val* var1 /* : nullable FlowContext */;
1711 var1 = self->attrs[COLOR_flow__APropdef___64dafter_flow_context].val; /* @after_flow_context on <self:APropdef> */
1712 var = var1;
1713 RET_LABEL:;
1714 return var;
1715 }
1716 /* method flow#APropdef#after_flow_context for (self: Object): nullable FlowContext */
1717 val* VIRTUAL_flow__APropdef__after_flow_context(val* self) {
1718 val* var /* : nullable FlowContext */;
1719 val* var1 /* : nullable FlowContext */;
1720 var1 = flow__APropdef__after_flow_context(self);
1721 var = var1;
1722 RET_LABEL:;
1723 return var;
1724 }
1725 /* method flow#APropdef#after_flow_context= for (self: APropdef, nullable FlowContext) */
1726 void flow__APropdef__after_flow_context_61d(val* self, val* p0) {
1727 self->attrs[COLOR_flow__APropdef___64dafter_flow_context].val = p0; /* @after_flow_context on <self:APropdef> */
1728 RET_LABEL:;
1729 }
1730 /* method flow#APropdef#after_flow_context= for (self: Object, nullable FlowContext) */
1731 void VIRTUAL_flow__APropdef__after_flow_context_61d(val* self, val* p0) {
1732 flow__APropdef__after_flow_context_61d(self, p0);
1733 RET_LABEL:;
1734 }
1735 /* method flow#APropdef#accept_flow_visitor for (self: APropdef, FlowVisitor) */
1736 void flow__APropdef__accept_flow_visitor(val* self, val* p0) {
1737 val* var_v /* var v: FlowVisitor */;
1738 val* var /* : FlowContext */;
1739 val* var1 /* : FlowContext */;
1740 var_v = p0;
1741 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
1742 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__APropdef__before_flow_context_61d]))(self, var) /* before_flow_context= on <self:APropdef>*/;
1743 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__APropdef__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:APropdef>*/;
1744 var1 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
1745 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__APropdef__after_flow_context_61d]))(self, var1) /* after_flow_context= on <self:APropdef>*/;
1746 RET_LABEL:;
1747 }
1748 /* method flow#APropdef#accept_flow_visitor for (self: Object, FlowVisitor) */
1749 void VIRTUAL_flow__APropdef__accept_flow_visitor(val* self, val* p0) {
1750 flow__APropdef__accept_flow_visitor(self, p0);
1751 RET_LABEL:;
1752 }
1753 /* method flow#AExpr#after_flow_context for (self: AExpr): nullable FlowContext */
1754 val* flow__AExpr__after_flow_context(val* self) {
1755 val* var /* : nullable FlowContext */;
1756 val* var1 /* : nullable FlowContext */;
1757 var1 = self->attrs[COLOR_flow__AExpr___64dafter_flow_context].val; /* @after_flow_context on <self:AExpr> */
1758 var = var1;
1759 RET_LABEL:;
1760 return var;
1761 }
1762 /* method flow#AExpr#after_flow_context for (self: Object): nullable FlowContext */
1763 val* VIRTUAL_flow__AExpr__after_flow_context(val* self) {
1764 val* var /* : nullable FlowContext */;
1765 val* var1 /* : nullable FlowContext */;
1766 var1 = flow__AExpr__after_flow_context(self);
1767 var = var1;
1768 RET_LABEL:;
1769 return var;
1770 }
1771 /* method flow#AExpr#after_flow_context= for (self: AExpr, nullable FlowContext) */
1772 void flow__AExpr__after_flow_context_61d(val* self, val* p0) {
1773 self->attrs[COLOR_flow__AExpr___64dafter_flow_context].val = p0; /* @after_flow_context on <self:AExpr> */
1774 RET_LABEL:;
1775 }
1776 /* method flow#AExpr#after_flow_context= for (self: Object, nullable FlowContext) */
1777 void VIRTUAL_flow__AExpr__after_flow_context_61d(val* self, val* p0) {
1778 flow__AExpr__after_flow_context_61d(self, p0);
1779 RET_LABEL:;
1780 }
1781 /* method flow#AVarAssignExpr#accept_flow_visitor for (self: AVarAssignExpr, FlowVisitor) */
1782 void flow__AVarAssignExpr__accept_flow_visitor(val* self, val* p0) {
1783 val* var_v /* var v: FlowVisitor */;
1784 val* var /* : FlowContext */;
1785 var_v = p0;
1786 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AVarAssignExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AVarAssignExpr>*/;
1787 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
1788 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AExpr__after_flow_context_61d]))(self, var) /* after_flow_context= on <self:AVarAssignExpr>*/;
1789 RET_LABEL:;
1790 }
1791 /* method flow#AVarAssignExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
1792 void VIRTUAL_flow__AVarAssignExpr__accept_flow_visitor(val* self, val* p0) {
1793 flow__AVarAssignExpr__accept_flow_visitor(self, p0);
1794 RET_LABEL:;
1795 }
1796 /* method flow#AReassignFormExpr#accept_flow_visitor for (self: AReassignFormExpr, FlowVisitor) */
1797 void flow__AReassignFormExpr__accept_flow_visitor(val* self, val* p0) {
1798 val* var_v /* var v: FlowVisitor */;
1799 val* var /* : FlowContext */;
1800 var_v = p0;
1801 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AReassignFormExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AReassignFormExpr>*/;
1802 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
1803 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AExpr__after_flow_context_61d]))(self, var) /* after_flow_context= on <self:AReassignFormExpr>*/;
1804 RET_LABEL:;
1805 }
1806 /* method flow#AReassignFormExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
1807 void VIRTUAL_flow__AReassignFormExpr__accept_flow_visitor(val* self, val* p0) {
1808 flow__AReassignFormExpr__accept_flow_visitor(self, p0);
1809 RET_LABEL:;
1810 }
1811 /* method flow#ABlockExpr#accept_flow_visitor for (self: ABlockExpr, FlowVisitor) */
1812 void flow__ABlockExpr__accept_flow_visitor(val* self, val* p0) {
1813 val* var_v /* var v: FlowVisitor */;
1814 val* var /* : ANodes[AExpr] */;
1815 val* var1 /* : Iterator[nullable Object] */;
1816 short int var2 /* : Bool */;
1817 val* var3 /* : nullable Object */;
1818 val* var_e /* var e: AExpr */;
1819 val* var4 /* : FlowContext */;
1820 short int var5 /* : Bool */;
1821 short int var6 /* : Bool */;
1822 val* var7 /* : FlowContext */;
1823 short int var8 /* : Bool */;
1824 short int var9 /* : Bool */;
1825 val* var10 /* : FlowContext */;
1826 short int var11 /* : Bool */;
1827 val* var12 /* : ToolContext */;
1828 val* var13 /* : Location */;
1829 static val* varonce;
1830 val* var14 /* : String */;
1831 char* var15 /* : NativeString */;
1832 long var16 /* : Int */;
1833 val* var17 /* : String */;
1834 var_v = p0;
1835 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__ABlockExpr__n_expr]))(self) /* n_expr on <self:ABlockExpr>*/;
1836 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_collection__Collection__iterator]))(var) /* iterator on <var:ANodes[AExpr]>*/;
1837 for(;;) {
1838 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
1839 if(!var2) break;
1840 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
1841 var_e = var3;
1842 var4 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
1843 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_flow__FlowContext__is_unreachable]))(var4) /* is_unreachable on <var4:FlowContext>*/;
1844 var6 = !var5;
1845 if (var6){
1846 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var_e) /* enter_visit on <var_v:FlowVisitor>*/;
1847 } else {
1848 var7 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
1849 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_flow__FlowContext__is_already_unreachable]))(var7) /* is_already_unreachable on <var7:FlowContext>*/;
1850 var9 = !var8;
1851 if (var9){
1852 var10 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
1853 var11 = 1;
1854 ((void (*)(val*, short int))(var10->class->vft[COLOR_flow__FlowContext__is_already_unreachable_61d]))(var10, var11) /* is_already_unreachable= on <var10:FlowContext>*/;
1855 var12 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__toolcontext]))(var_v) /* toolcontext on <var_v:FlowVisitor>*/;
1856 var13 = ((val* (*)(val*))(var_e->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_e) /* hot_location on <var_e:AExpr>*/;
1857 if (varonce) {
1858 var14 = varonce;
1859 } else {
1860 var15 = "Error: unreachable statement.";
1861 var16 = 29;
1862 var17 = string__NativeString__to_s_with_length(var15, var16);
1863 var14 = var17;
1864 varonce = var14;
1865 }
1866 ((void (*)(val*, val*, val*))(var12->class->vft[COLOR_toolcontext__ToolContext__error]))(var12, var13, var14) /* error on <var12:ToolContext>*/;
1867 } else {
1868 }
1869 }
1870 CONTINUE_label: (void)0;
1871 ((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
1872 }
1873 BREAK_label: (void)0;
1874 RET_LABEL:;
1875 }
1876 /* method flow#ABlockExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
1877 void VIRTUAL_flow__ABlockExpr__accept_flow_visitor(val* self, val* p0) {
1878 flow__ABlockExpr__accept_flow_visitor(self, p0);
1879 RET_LABEL:;
1880 }
1881 /* method flow#AReturnExpr#accept_flow_visitor for (self: AReturnExpr, FlowVisitor) */
1882 void flow__AReturnExpr__accept_flow_visitor(val* self, val* p0) {
1883 val* var_v /* var v: FlowVisitor */;
1884 val* var /* : FlowContext */;
1885 var_v = p0;
1886 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AReturnExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AReturnExpr>*/;
1887 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
1888 var;
1889 RET_LABEL:;
1890 }
1891 /* method flow#AReturnExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
1892 void VIRTUAL_flow__AReturnExpr__accept_flow_visitor(val* self, val* p0) {
1893 flow__AReturnExpr__accept_flow_visitor(self, p0);
1894 RET_LABEL:;
1895 }
1896 /* method flow#AContinueExpr#before_flow_context for (self: AContinueExpr): nullable FlowContext */
1897 val* flow__AContinueExpr__before_flow_context(val* self) {
1898 val* var /* : nullable FlowContext */;
1899 val* var1 /* : nullable FlowContext */;
1900 val* var_after /* var after: nullable FlowContext */;
1901 val* var2 /* : null */;
1902 short int var3 /* : Bool */;
1903 val* var4 /* : null */;
1904 val* var5 /* : Array[FlowContext] */;
1905 val* var6 /* : nullable Object */;
1906 var1 = ((val* (*)(val*))(self->class->vft[COLOR_flow__AExpr__after_flow_context]))(self) /* after_flow_context on <self:AContinueExpr>*/;
1907 var_after = var1;
1908 var2 = NULL;
1909 if (var_after == NULL) {
1910 var3 = 1; /* is null */
1911 } else {
1912 var3 = 0; /* arg is null but recv is not */
1913 }
1914 if (var3){
1915 var4 = NULL;
1916 var = var4;
1917 goto RET_LABEL;
1918 } else {
1919 }
1920 var5 = ((val* (*)(val*))(var_after->class->vft[COLOR_flow__FlowContext__previous]))(var_after) /* previous on <var_after:nullable FlowContext(FlowContext)>*/;
1921 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__first]))(var5) /* first on <var5:Array[FlowContext]>*/;
1922 var = var6;
1923 goto RET_LABEL;
1924 RET_LABEL:;
1925 return var;
1926 }
1927 /* method flow#AContinueExpr#before_flow_context for (self: Object): nullable FlowContext */
1928 val* VIRTUAL_flow__AContinueExpr__before_flow_context(val* self) {
1929 val* var /* : nullable FlowContext */;
1930 val* var1 /* : nullable FlowContext */;
1931 var1 = flow__AContinueExpr__before_flow_context(self);
1932 var = var1;
1933 RET_LABEL:;
1934 return var;
1935 }
1936 /* method flow#AContinueExpr#accept_flow_visitor for (self: AContinueExpr, FlowVisitor) */
1937 void flow__AContinueExpr__accept_flow_visitor(val* self, val* p0) {
1938 val* var_v /* var v: FlowVisitor */;
1939 val* var /* : FlowContext */;
1940 var_v = p0;
1941 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AContinueExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AContinueExpr>*/;
1942 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
1943 var;
1944 RET_LABEL:;
1945 }
1946 /* method flow#AContinueExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
1947 void VIRTUAL_flow__AContinueExpr__accept_flow_visitor(val* self, val* p0) {
1948 flow__AContinueExpr__accept_flow_visitor(self, p0);
1949 RET_LABEL:;
1950 }
1951 /* method flow#ABreakExpr#before_flow_context for (self: ABreakExpr): nullable FlowContext */
1952 val* flow__ABreakExpr__before_flow_context(val* self) {
1953 val* var /* : nullable FlowContext */;
1954 val* var1 /* : nullable FlowContext */;
1955 val* var_after /* var after: nullable FlowContext */;
1956 val* var2 /* : null */;
1957 short int var3 /* : Bool */;
1958 val* var4 /* : null */;
1959 val* var5 /* : Array[FlowContext] */;
1960 val* var6 /* : nullable Object */;
1961 var1 = ((val* (*)(val*))(self->class->vft[COLOR_flow__AExpr__after_flow_context]))(self) /* after_flow_context on <self:ABreakExpr>*/;
1962 var_after = var1;
1963 var2 = NULL;
1964 if (var_after == NULL) {
1965 var3 = 1; /* is null */
1966 } else {
1967 var3 = 0; /* arg is null but recv is not */
1968 }
1969 if (var3){
1970 var4 = NULL;
1971 var = var4;
1972 goto RET_LABEL;
1973 } else {
1974 }
1975 var5 = ((val* (*)(val*))(var_after->class->vft[COLOR_flow__FlowContext__previous]))(var_after) /* previous on <var_after:nullable FlowContext(FlowContext)>*/;
1976 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__first]))(var5) /* first on <var5:Array[FlowContext]>*/;
1977 var = var6;
1978 goto RET_LABEL;
1979 RET_LABEL:;
1980 return var;
1981 }
1982 /* method flow#ABreakExpr#before_flow_context for (self: Object): nullable FlowContext */
1983 val* VIRTUAL_flow__ABreakExpr__before_flow_context(val* self) {
1984 val* var /* : nullable FlowContext */;
1985 val* var1 /* : nullable FlowContext */;
1986 var1 = flow__ABreakExpr__before_flow_context(self);
1987 var = var1;
1988 RET_LABEL:;
1989 return var;
1990 }
1991 /* method flow#ABreakExpr#accept_flow_visitor for (self: ABreakExpr, FlowVisitor) */
1992 void flow__ABreakExpr__accept_flow_visitor(val* self, val* p0) {
1993 val* var_v /* var v: FlowVisitor */;
1994 val* var /* : FlowContext */;
1995 var_v = p0;
1996 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__ABreakExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:ABreakExpr>*/;
1997 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
1998 var;
1999 RET_LABEL:;
2000 }
2001 /* method flow#ABreakExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2002 void VIRTUAL_flow__ABreakExpr__accept_flow_visitor(val* self, val* p0) {
2003 flow__ABreakExpr__accept_flow_visitor(self, p0);
2004 RET_LABEL:;
2005 }
2006 /* method flow#AAbortExpr#accept_flow_visitor for (self: AAbortExpr, FlowVisitor) */
2007 void flow__AAbortExpr__accept_flow_visitor(val* self, val* p0) {
2008 val* var_v /* var v: FlowVisitor */;
2009 val* var /* : FlowContext */;
2010 var_v = p0;
2011 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AAbortExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AAbortExpr>*/;
2012 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
2013 var;
2014 RET_LABEL:;
2015 }
2016 /* method flow#AAbortExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2017 void VIRTUAL_flow__AAbortExpr__accept_flow_visitor(val* self, val* p0) {
2018 flow__AAbortExpr__accept_flow_visitor(self, p0);
2019 RET_LABEL:;
2020 }
2021 /* method flow#ADoExpr#accept_flow_visitor for (self: ADoExpr, FlowVisitor) */
2022 void flow__ADoExpr__accept_flow_visitor(val* self, val* p0) {
2023 val* var_v /* var v: FlowVisitor */;
2024 val* var /* : nullable EscapeMark */;
2025 var_v = p0;
2026 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__ADoExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:ADoExpr>*/;
2027 var = ((val* (*)(val*))(self->class->vft[COLOR_scope__ADoExpr__escapemark]))(self) /* escapemark on <self:ADoExpr>*/;
2028 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_breaks]))(var_v, var) /* merge_breaks on <var_v:FlowVisitor>*/;
2029 RET_LABEL:;
2030 }
2031 /* method flow#ADoExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2032 void VIRTUAL_flow__ADoExpr__accept_flow_visitor(val* self, val* p0) {
2033 flow__ADoExpr__accept_flow_visitor(self, p0);
2034 RET_LABEL:;
2035 }
2036 /* method flow#AIfExpr#accept_flow_visitor for (self: AIfExpr, FlowVisitor) */
2037 void flow__AIfExpr__accept_flow_visitor(val* self, val* p0) {
2038 val* var_v /* var v: FlowVisitor */;
2039 val* var /* : AExpr */;
2040 val* var1 /* : FlowContext */;
2041 val* var_after_expr /* var after_expr: FlowContext */;
2042 val* var2 /* : FlowContext */;
2043 val* var3 /* : nullable AExpr */;
2044 val* var4 /* : FlowContext */;
2045 val* var_after_then /* var after_then: FlowContext */;
2046 val* var5 /* : FlowContext */;
2047 val* var6 /* : nullable AExpr */;
2048 val* var7 /* : FlowContext */;
2049 val* var_after_else /* var after_else: FlowContext */;
2050 val* var8 /* : FlowContext */;
2051 var_v = p0;
2052 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfExpr__n_expr]))(self) /* n_expr on <self:AIfExpr>*/;
2053 var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
2054 var_after_expr = var1;
2055 var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
2056 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
2057 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfExpr__n_then]))(self) /* n_then on <self:AIfExpr>*/;
2058 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var3) /* enter_visit on <var_v:FlowVisitor>*/;
2059 var4 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2060 var_after_then = var4;
2061 var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
2062 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var5) /* current_flow_context= on <var_v:FlowVisitor>*/;
2063 var6 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfExpr__n_else]))(self) /* n_else on <self:AIfExpr>*/;
2064 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var6) /* enter_visit on <var_v:FlowVisitor>*/;
2065 var7 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2066 var_after_else = var7;
2067 var8 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_merge_flow]))(var_v, var_after_then, var_after_else) /* make_merge_flow on <var_v:FlowVisitor>*/;
2068 var8;
2069 RET_LABEL:;
2070 }
2071 /* method flow#AIfExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2072 void VIRTUAL_flow__AIfExpr__accept_flow_visitor(val* self, val* p0) {
2073 flow__AIfExpr__accept_flow_visitor(self, p0);
2074 RET_LABEL:;
2075 }
2076 /* method flow#AIfexprExpr#accept_flow_visitor for (self: AIfexprExpr, FlowVisitor) */
2077 void flow__AIfexprExpr__accept_flow_visitor(val* self, val* p0) {
2078 val* var_v /* var v: FlowVisitor */;
2079 val* var /* : AExpr */;
2080 val* var1 /* : FlowContext */;
2081 val* var_after_expr /* var after_expr: FlowContext */;
2082 val* var2 /* : FlowContext */;
2083 val* var3 /* : AExpr */;
2084 val* var4 /* : FlowContext */;
2085 val* var_after_then /* var after_then: FlowContext */;
2086 val* var5 /* : FlowContext */;
2087 val* var6 /* : AExpr */;
2088 val* var7 /* : FlowContext */;
2089 val* var_after_else /* var after_else: FlowContext */;
2090 val* var8 /* : FlowContext */;
2091 var_v = p0;
2092 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfexprExpr__n_expr]))(self) /* n_expr on <self:AIfexprExpr>*/;
2093 var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
2094 var_after_expr = var1;
2095 var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
2096 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
2097 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfexprExpr__n_then]))(self) /* n_then on <self:AIfexprExpr>*/;
2098 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var3) /* enter_visit on <var_v:FlowVisitor>*/;
2099 var4 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2100 var_after_then = var4;
2101 var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
2102 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var5) /* current_flow_context= on <var_v:FlowVisitor>*/;
2103 var6 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfexprExpr__n_else]))(self) /* n_else on <self:AIfexprExpr>*/;
2104 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var6) /* enter_visit on <var_v:FlowVisitor>*/;
2105 var7 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2106 var_after_else = var7;
2107 var8 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_merge_flow]))(var_v, var_after_then, var_after_else) /* make_merge_flow on <var_v:FlowVisitor>*/;
2108 var8;
2109 RET_LABEL:;
2110 }
2111 /* method flow#AIfexprExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2112 void VIRTUAL_flow__AIfexprExpr__accept_flow_visitor(val* self, val* p0) {
2113 flow__AIfexprExpr__accept_flow_visitor(self, p0);
2114 RET_LABEL:;
2115 }
2116 /* method flow#AWhileExpr#accept_flow_visitor for (self: AWhileExpr, FlowVisitor) */
2117 void flow__AWhileExpr__accept_flow_visitor(val* self, val* p0) {
2118 val* var_v /* var v: FlowVisitor */;
2119 val* var /* : FlowContext */;
2120 val* var_before_loop /* var before_loop: FlowContext */;
2121 val* var1 /* : AExpr */;
2122 val* var2 /* : FlowContext */;
2123 val* var_after_expr /* var after_expr: FlowContext */;
2124 val* var3 /* : FlowContext */;
2125 val* var4 /* : nullable AExpr */;
2126 val* var5 /* : FlowContext */;
2127 val* var_after_block /* var after_block: FlowContext */;
2128 val* var6 /* : nullable EscapeMark */;
2129 val* var7 /* : FlowContext */;
2130 val* var8 /* : nullable EscapeMark */;
2131 var_v = p0;
2132 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
2133 var_before_loop = var;
2134 var1 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AWhileExpr__n_expr]))(self) /* n_expr on <self:AWhileExpr>*/;
2135 var2 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var1) /* visit_expr on <var_v:FlowVisitor>*/;
2136 var_after_expr = var2;
2137 var3 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
2138 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var3) /* current_flow_context= on <var_v:FlowVisitor>*/;
2139 var4 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AWhileExpr__n_block]))(self) /* n_block on <self:AWhileExpr>*/;
2140 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var4) /* enter_visit on <var_v:FlowVisitor>*/;
2141 var5 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2142 var_after_block = var5;
2143 ((void (*)(val*, val*))(var_before_loop->class->vft[COLOR_flow__FlowContext__add_loop]))(var_before_loop, var_after_block) /* add_loop on <var_before_loop:FlowContext>*/;
2144 var6 = ((val* (*)(val*))(self->class->vft[COLOR_scope__AWhileExpr__escapemark]))(self) /* escapemark on <self:AWhileExpr>*/;
2145 ((void (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_continues_to]))(var_v, var_after_block, var6) /* merge_continues_to on <var_v:FlowVisitor>*/;
2146 var7 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
2147 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var7) /* current_flow_context= on <var_v:FlowVisitor>*/;
2148 var8 = ((val* (*)(val*))(self->class->vft[COLOR_scope__AWhileExpr__escapemark]))(self) /* escapemark on <self:AWhileExpr>*/;
2149 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_breaks]))(var_v, var8) /* merge_breaks on <var_v:FlowVisitor>*/;
2150 RET_LABEL:;
2151 }
2152 /* method flow#AWhileExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2153 void VIRTUAL_flow__AWhileExpr__accept_flow_visitor(val* self, val* p0) {
2154 flow__AWhileExpr__accept_flow_visitor(self, p0);
2155 RET_LABEL:;
2156 }
2157 /* method flow#ALoopExpr#accept_flow_visitor for (self: ALoopExpr, FlowVisitor) */
2158 void flow__ALoopExpr__accept_flow_visitor(val* self, val* p0) {
2159 val* var_v /* var v: FlowVisitor */;
2160 val* var /* : FlowContext */;
2161 val* var_before_loop /* var before_loop: FlowContext */;
2162 val* var1 /* : nullable AExpr */;
2163 val* var2 /* : FlowContext */;
2164 val* var_after_block /* var after_block: FlowContext */;
2165 val* var3 /* : nullable EscapeMark */;
2166 val* var4 /* : FlowContext */;
2167 val* var5 /* : nullable EscapeMark */;
2168 var_v = p0;
2169 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
2170 var_before_loop = var;
2171 var1 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__ALoopExpr__n_block]))(self) /* n_block on <self:ALoopExpr>*/;
2172 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var1) /* enter_visit on <var_v:FlowVisitor>*/;
2173 var2 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2174 var_after_block = var2;
2175 ((void (*)(val*, val*))(var_before_loop->class->vft[COLOR_flow__FlowContext__add_loop]))(var_before_loop, var_after_block) /* add_loop on <var_before_loop:FlowContext>*/;
2176 var3 = ((val* (*)(val*))(self->class->vft[COLOR_scope__ALoopExpr__escapemark]))(self) /* escapemark on <self:ALoopExpr>*/;
2177 ((void (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_continues_to]))(var_v, var_after_block, var3) /* merge_continues_to on <var_v:FlowVisitor>*/;
2178 var4 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
2179 var4;
2180 var5 = ((val* (*)(val*))(self->class->vft[COLOR_scope__ALoopExpr__escapemark]))(self) /* escapemark on <self:ALoopExpr>*/;
2181 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_breaks]))(var_v, var5) /* merge_breaks on <var_v:FlowVisitor>*/;
2182 RET_LABEL:;
2183 }
2184 /* method flow#ALoopExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2185 void VIRTUAL_flow__ALoopExpr__accept_flow_visitor(val* self, val* p0) {
2186 flow__ALoopExpr__accept_flow_visitor(self, p0);
2187 RET_LABEL:;
2188 }
2189 /* method flow#AForExpr#accept_flow_visitor for (self: AForExpr, FlowVisitor) */
2190 void flow__AForExpr__accept_flow_visitor(val* self, val* p0) {
2191 val* var_v /* var v: FlowVisitor */;
2192 val* var /* : AExpr */;
2193 val* var1 /* : FlowContext */;
2194 val* var_before_loop /* var before_loop: FlowContext */;
2195 val* var2 /* : nullable AExpr */;
2196 val* var3 /* : FlowContext */;
2197 val* var_after_block /* var after_block: FlowContext */;
2198 val* var4 /* : nullable EscapeMark */;
2199 val* var5 /* : FlowContext */;
2200 val* var6 /* : FlowContext */;
2201 val* var7 /* : nullable EscapeMark */;
2202 var_v = p0;
2203 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AForExpr__n_expr]))(self) /* n_expr on <self:AForExpr>*/;
2204 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var) /* enter_visit on <var_v:FlowVisitor>*/;
2205 var1 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
2206 var_before_loop = var1;
2207 var2 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AForExpr__n_block]))(self) /* n_block on <self:AForExpr>*/;
2208 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var2) /* enter_visit on <var_v:FlowVisitor>*/;
2209 var3 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2210 var_after_block = var3;
2211 ((void (*)(val*, val*))(var_before_loop->class->vft[COLOR_flow__FlowContext__add_loop]))(var_before_loop, var_after_block) /* add_loop on <var_before_loop:FlowContext>*/;
2212 var4 = ((val* (*)(val*))(self->class->vft[COLOR_scope__AForExpr__escapemark]))(self) /* escapemark on <self:AForExpr>*/;
2213 ((void (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_continues_to]))(var_v, var_after_block, var4) /* merge_continues_to on <var_v:FlowVisitor>*/;
2214 var5 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2215 var6 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_merge_flow]))(var_v, var5, var_before_loop) /* make_merge_flow on <var_v:FlowVisitor>*/;
2216 var6;
2217 var7 = ((val* (*)(val*))(self->class->vft[COLOR_scope__AForExpr__escapemark]))(self) /* escapemark on <self:AForExpr>*/;
2218 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_breaks]))(var_v, var7) /* merge_breaks on <var_v:FlowVisitor>*/;
2219 RET_LABEL:;
2220 }
2221 /* method flow#AForExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2222 void VIRTUAL_flow__AForExpr__accept_flow_visitor(val* self, val* p0) {
2223 flow__AForExpr__accept_flow_visitor(self, p0);
2224 RET_LABEL:;
2225 }
2226 /* method flow#AAssertExpr#accept_flow_visitor for (self: AAssertExpr, FlowVisitor) */
2227 void flow__AAssertExpr__accept_flow_visitor(val* self, val* p0) {
2228 val* var_v /* var v: FlowVisitor */;
2229 val* var /* : AExpr */;
2230 val* var1 /* : FlowContext */;
2231 val* var_after_expr /* var after_expr: FlowContext */;
2232 val* var2 /* : FlowContext */;
2233 val* var3 /* : nullable AExpr */;
2234 val* var4 /* : FlowContext */;
2235 var_v = p0;
2236 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AAssertExpr__n_expr]))(self) /* n_expr on <self:AAssertExpr>*/;
2237 var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
2238 var_after_expr = var1;
2239 var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
2240 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
2241 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AAssertExpr__n_else]))(self) /* n_else on <self:AAssertExpr>*/;
2242 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var3) /* enter_visit on <var_v:FlowVisitor>*/;
2243 var4 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
2244 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var4) /* current_flow_context= on <var_v:FlowVisitor>*/;
2245 RET_LABEL:;
2246 }
2247 /* method flow#AAssertExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2248 void VIRTUAL_flow__AAssertExpr__accept_flow_visitor(val* self, val* p0) {
2249 flow__AAssertExpr__accept_flow_visitor(self, p0);
2250 RET_LABEL:;
2251 }
2252 /* method flow#AOrExpr#accept_flow_visitor for (self: AOrExpr, FlowVisitor) */
2253 void flow__AOrExpr__accept_flow_visitor(val* self, val* p0) {
2254 val* var_v /* var v: FlowVisitor */;
2255 val* var /* : AExpr */;
2256 val* var1 /* : FlowContext */;
2257 val* var_after_expr /* var after_expr: FlowContext */;
2258 val* var2 /* : FlowContext */;
2259 val* var3 /* : AExpr */;
2260 val* var4 /* : FlowContext */;
2261 val* var_after_expr2 /* var after_expr2: FlowContext */;
2262 val* var5 /* : FlowContext */;
2263 val* var6 /* : FlowContext */;
2264 val* var7 /* : FlowContext */;
2265 val* var_merge_true /* var merge_true: FlowContext */;
2266 static val* varonce;
2267 val* var8 /* : String */;
2268 char* var9 /* : NativeString */;
2269 long var10 /* : Int */;
2270 val* var11 /* : String */;
2271 val* var12 /* : FlowContext */;
2272 val* var13 /* : FlowContext */;
2273 var_v = p0;
2274 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AOrExpr__n_expr]))(self) /* n_expr on <self:AOrExpr>*/;
2275 var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
2276 var_after_expr = var1;
2277 var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
2278 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
2279 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AOrExpr__n_expr2]))(self) /* n_expr2 on <self:AOrExpr>*/;
2280 var4 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var3) /* visit_expr on <var_v:FlowVisitor>*/;
2281 var_after_expr2 = var4;
2282 var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
2283 var6 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr2) /* when_true on <var_after_expr2:FlowContext>*/;
2284 var7 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_merge_flow]))(var_v, var5, var6) /* make_merge_flow on <var_v:FlowVisitor>*/;
2285 var_merge_true = var7;
2286 if (varonce) {
2287 var8 = varonce;
2288 } else {
2289 var9 = "OR TRUE";
2290 var10 = 7;
2291 var11 = string__NativeString__to_s_with_length(var9, var10);
2292 var8 = var11;
2293 varonce = var8;
2294 }
2295 ((void (*)(val*, val*))(var_merge_true->class->vft[COLOR_flow__FlowContext__name_61d]))(var_merge_true, var8) /* name= on <var_merge_true:FlowContext>*/;
2296 var12 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr2) /* when_false on <var_after_expr2:FlowContext>*/;
2297 var13 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_true_false_flow]))(var_v, var_merge_true, var12) /* make_true_false_flow on <var_v:FlowVisitor>*/;
2298 var13;
2299 RET_LABEL:;
2300 }
2301 /* method flow#AOrExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2302 void VIRTUAL_flow__AOrExpr__accept_flow_visitor(val* self, val* p0) {
2303 flow__AOrExpr__accept_flow_visitor(self, p0);
2304 RET_LABEL:;
2305 }
2306 /* method flow#AImpliesExpr#accept_flow_visitor for (self: AImpliesExpr, FlowVisitor) */
2307 void flow__AImpliesExpr__accept_flow_visitor(val* self, val* p0) {
2308 val* var_v /* var v: FlowVisitor */;
2309 val* var /* : AExpr */;
2310 val* var1 /* : FlowContext */;
2311 val* var_after_expr /* var after_expr: FlowContext */;
2312 val* var2 /* : FlowContext */;
2313 val* var3 /* : AExpr */;
2314 val* var4 /* : FlowContext */;
2315 val* var_after_expr2 /* var after_expr2: FlowContext */;
2316 val* var5 /* : FlowContext */;
2317 val* var6 /* : FlowContext */;
2318 val* var7 /* : FlowContext */;
2319 val* var_merge_true /* var merge_true: FlowContext */;
2320 static val* varonce;
2321 val* var8 /* : String */;
2322 char* var9 /* : NativeString */;
2323 long var10 /* : Int */;
2324 val* var11 /* : String */;
2325 val* var12 /* : FlowContext */;
2326 val* var13 /* : FlowContext */;
2327 var_v = p0;
2328 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AImpliesExpr__n_expr]))(self) /* n_expr on <self:AImpliesExpr>*/;
2329 var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
2330 var_after_expr = var1;
2331 var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
2332 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
2333 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AImpliesExpr__n_expr2]))(self) /* n_expr2 on <self:AImpliesExpr>*/;
2334 var4 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var3) /* visit_expr on <var_v:FlowVisitor>*/;
2335 var_after_expr2 = var4;
2336 var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
2337 var6 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr2) /* when_true on <var_after_expr2:FlowContext>*/;
2338 var7 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_merge_flow]))(var_v, var5, var6) /* make_merge_flow on <var_v:FlowVisitor>*/;
2339 var_merge_true = var7;
2340 if (varonce) {
2341 var8 = varonce;
2342 } else {
2343 var9 = "OR TRUE";
2344 var10 = 7;
2345 var11 = string__NativeString__to_s_with_length(var9, var10);
2346 var8 = var11;
2347 varonce = var8;
2348 }
2349 ((void (*)(val*, val*))(var_merge_true->class->vft[COLOR_flow__FlowContext__name_61d]))(var_merge_true, var8) /* name= on <var_merge_true:FlowContext>*/;
2350 var12 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr2) /* when_false on <var_after_expr2:FlowContext>*/;
2351 var13 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_true_false_flow]))(var_v, var_merge_true, var12) /* make_true_false_flow on <var_v:FlowVisitor>*/;
2352 var13;
2353 RET_LABEL:;
2354 }
2355 /* method flow#AImpliesExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2356 void VIRTUAL_flow__AImpliesExpr__accept_flow_visitor(val* self, val* p0) {
2357 flow__AImpliesExpr__accept_flow_visitor(self, p0);
2358 RET_LABEL:;
2359 }
2360 /* method flow#AAndExpr#accept_flow_visitor for (self: AAndExpr, FlowVisitor) */
2361 void flow__AAndExpr__accept_flow_visitor(val* self, val* p0) {
2362 val* var_v /* var v: FlowVisitor */;
2363 val* var /* : AExpr */;
2364 val* var1 /* : FlowContext */;
2365 val* var_after_expr /* var after_expr: FlowContext */;
2366 val* var2 /* : FlowContext */;
2367 val* var3 /* : AExpr */;
2368 val* var4 /* : FlowContext */;
2369 val* var_after_expr2 /* var after_expr2: FlowContext */;
2370 val* var5 /* : FlowContext */;
2371 val* var6 /* : FlowContext */;
2372 val* var7 /* : FlowContext */;
2373 val* var_merge_false /* var merge_false: FlowContext */;
2374 static val* varonce;
2375 val* var8 /* : String */;
2376 char* var9 /* : NativeString */;
2377 long var10 /* : Int */;
2378 val* var11 /* : String */;
2379 val* var12 /* : FlowContext */;
2380 val* var13 /* : FlowContext */;
2381 var_v = p0;
2382 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AAndExpr__n_expr]))(self) /* n_expr on <self:AAndExpr>*/;
2383 var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
2384 var_after_expr = var1;
2385 var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
2386 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
2387 var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AAndExpr__n_expr2]))(self) /* n_expr2 on <self:AAndExpr>*/;
2388 var4 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var3) /* visit_expr on <var_v:FlowVisitor>*/;
2389 var_after_expr2 = var4;
2390 var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
2391 var6 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr2) /* when_false on <var_after_expr2:FlowContext>*/;
2392 var7 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_merge_flow]))(var_v, var5, var6) /* make_merge_flow on <var_v:FlowVisitor>*/;
2393 var_merge_false = var7;
2394 if (varonce) {
2395 var8 = varonce;
2396 } else {
2397 var9 = "AND FALSE";
2398 var10 = 9;
2399 var11 = string__NativeString__to_s_with_length(var9, var10);
2400 var8 = var11;
2401 varonce = var8;
2402 }
2403 ((void (*)(val*, val*))(var_merge_false->class->vft[COLOR_flow__FlowContext__name_61d]))(var_merge_false, var8) /* name= on <var_merge_false:FlowContext>*/;
2404 var12 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr2) /* when_true on <var_after_expr2:FlowContext>*/;
2405 var13 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_true_false_flow]))(var_v, var12, var_merge_false) /* make_true_false_flow on <var_v:FlowVisitor>*/;
2406 var13;
2407 RET_LABEL:;
2408 }
2409 /* method flow#AAndExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2410 void VIRTUAL_flow__AAndExpr__accept_flow_visitor(val* self, val* p0) {
2411 flow__AAndExpr__accept_flow_visitor(self, p0);
2412 RET_LABEL:;
2413 }
2414 /* method flow#ANotExpr#accept_flow_visitor for (self: ANotExpr, FlowVisitor) */
2415 void flow__ANotExpr__accept_flow_visitor(val* self, val* p0) {
2416 val* var_v /* var v: FlowVisitor */;
2417 val* var /* : AExpr */;
2418 val* var1 /* : FlowContext */;
2419 val* var_after_expr /* var after_expr: FlowContext */;
2420 val* var2 /* : FlowContext */;
2421 val* var3 /* : FlowContext */;
2422 val* var4 /* : FlowContext */;
2423 var_v = p0;
2424 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__ANotExpr__n_expr]))(self) /* n_expr on <self:ANotExpr>*/;
2425 var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
2426 var_after_expr = var1;
2427 var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
2428 var3 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
2429 var4 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_true_false_flow]))(var_v, var2, var3) /* make_true_false_flow on <var_v:FlowVisitor>*/;
2430 var4;
2431 RET_LABEL:;
2432 }
2433 /* method flow#ANotExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2434 void VIRTUAL_flow__ANotExpr__accept_flow_visitor(val* self, val* p0) {
2435 flow__ANotExpr__accept_flow_visitor(self, p0);
2436 RET_LABEL:;
2437 }
2438 /* method flow#AOrElseExpr#accept_flow_visitor for (self: AOrElseExpr, FlowVisitor) */
2439 void flow__AOrElseExpr__accept_flow_visitor(val* self, val* p0) {
2440 val* var_v /* var v: FlowVisitor */;
2441 var_v = p0;
2442 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AOrElseExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AOrElseExpr>*/;
2443 RET_LABEL:;
2444 }
2445 /* method flow#AOrElseExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2446 void VIRTUAL_flow__AOrElseExpr__accept_flow_visitor(val* self, val* p0) {
2447 flow__AOrElseExpr__accept_flow_visitor(self, p0);
2448 RET_LABEL:;
2449 }
2450 /* method flow#AEqExpr#accept_flow_visitor for (self: AEqExpr, FlowVisitor) */
2451 void flow__AEqExpr__accept_flow_visitor(val* self, val* p0) {
2452 val* var_v /* var v: FlowVisitor */;
2453 val* var /* : FlowContext */;
2454 var_v = p0;
2455 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AEqExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AEqExpr>*/;
2456 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_true_false_flow]))(var_v) /* make_sub_true_false_flow on <var_v:FlowVisitor>*/;
2457 var;
2458 RET_LABEL:;
2459 }
2460 /* method flow#AEqExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2461 void VIRTUAL_flow__AEqExpr__accept_flow_visitor(val* self, val* p0) {
2462 flow__AEqExpr__accept_flow_visitor(self, p0);
2463 RET_LABEL:;
2464 }
2465 /* method flow#ANeExpr#accept_flow_visitor for (self: ANeExpr, FlowVisitor) */
2466 void flow__ANeExpr__accept_flow_visitor(val* self, val* p0) {
2467 val* var_v /* var v: FlowVisitor */;
2468 val* var /* : FlowContext */;
2469 var_v = p0;
2470 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__ANeExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:ANeExpr>*/;
2471 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_true_false_flow]))(var_v) /* make_sub_true_false_flow on <var_v:FlowVisitor>*/;
2472 var;
2473 RET_LABEL:;
2474 }
2475 /* method flow#ANeExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2476 void VIRTUAL_flow__ANeExpr__accept_flow_visitor(val* self, val* p0) {
2477 flow__ANeExpr__accept_flow_visitor(self, p0);
2478 RET_LABEL:;
2479 }
2480 /* method flow#AClosureCallExpr#accept_flow_visitor for (self: AClosureCallExpr, FlowVisitor) */
2481 void flow__AClosureCallExpr__accept_flow_visitor(val* self, val* p0) {
2482 val* var_v /* var v: FlowVisitor */;
2483 var_v = p0;
2484 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AClosureCallExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AClosureCallExpr>*/;
2485 RET_LABEL:;
2486 }
2487 /* method flow#AClosureCallExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2488 void VIRTUAL_flow__AClosureCallExpr__accept_flow_visitor(val* self, val* p0) {
2489 flow__AClosureCallExpr__accept_flow_visitor(self, p0);
2490 RET_LABEL:;
2491 }
2492 /* method flow#AClosureDef#accept_flow_visitor for (self: AClosureDef, FlowVisitor) */
2493 void flow__AClosureDef__accept_flow_visitor(val* self, val* p0) {
2494 val* var_v /* var v: FlowVisitor */;
2495 val* var /* : FlowContext */;
2496 val* var_before_loop /* var before_loop: FlowContext */;
2497 val* var1 /* : nullable AExpr */;
2498 val* var2 /* : FlowContext */;
2499 val* var_after_block /* var after_block: FlowContext */;
2500 val* var3 /* : FlowContext */;
2501 val* var4 /* : FlowContext */;
2502 var_v = p0;
2503 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
2504 var_before_loop = var;
2505 var1 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AClosureDef__n_expr]))(self) /* n_expr on <self:AClosureDef>*/;
2506 ((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var1) /* enter_visit on <var_v:FlowVisitor>*/;
2507 var2 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2508 var_after_block = var2;
2509 ((void (*)(val*, val*))(var_before_loop->class->vft[COLOR_flow__FlowContext__add_loop]))(var_before_loop, var_after_block) /* add_loop on <var_before_loop:FlowContext>*/;
2510 var3 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
2511 var4 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_merge_flow]))(var_v, var3, var_before_loop) /* make_merge_flow on <var_v:FlowVisitor>*/;
2512 var4;
2513 RET_LABEL:;
2514 }
2515 /* method flow#AClosureDef#accept_flow_visitor for (self: Object, FlowVisitor) */
2516 void VIRTUAL_flow__AClosureDef__accept_flow_visitor(val* self, val* p0) {
2517 flow__AClosureDef__accept_flow_visitor(self, p0);
2518 RET_LABEL:;
2519 }
2520 /* method flow#AIsaExpr#accept_flow_visitor for (self: AIsaExpr, FlowVisitor) */
2521 void flow__AIsaExpr__accept_flow_visitor(val* self, val* p0) {
2522 val* var_v /* var v: FlowVisitor */;
2523 val* var /* : FlowContext */;
2524 var_v = p0;
2525 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AIsaExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AIsaExpr>*/;
2526 var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_true_false_flow]))(var_v) /* make_sub_true_false_flow on <var_v:FlowVisitor>*/;
2527 var;
2528 RET_LABEL:;
2529 }
2530 /* method flow#AIsaExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2531 void VIRTUAL_flow__AIsaExpr__accept_flow_visitor(val* self, val* p0) {
2532 flow__AIsaExpr__accept_flow_visitor(self, p0);
2533 RET_LABEL:;
2534 }
2535 /* method flow#AProxyExpr#accept_flow_visitor for (self: AProxyExpr, FlowVisitor) */
2536 void flow__AProxyExpr__accept_flow_visitor(val* self, val* p0) {
2537 val* var_v /* var v: FlowVisitor */;
2538 val* var /* : AExpr */;
2539 val* var1 /* : FlowContext */;
2540 val* var_after_expr /* var after_expr: FlowContext */;
2541 var_v = p0;
2542 var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AProxyExpr__n_expr]))(self) /* n_expr on <self:AProxyExpr>*/;
2543 var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
2544 var_after_expr = var1;
2545 ((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var_after_expr) /* current_flow_context= on <var_v:FlowVisitor>*/;
2546 RET_LABEL:;
2547 }
2548 /* method flow#AProxyExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
2549 void VIRTUAL_flow__AProxyExpr__accept_flow_visitor(val* self, val* p0) {
2550 flow__AProxyExpr__accept_flow_visitor(self, p0);
2551 RET_LABEL:;
2552 }