c_src: update
[nit.git] / c_src / flow.sep.1.c
index 6de74a6..a4d4f2f 100644 (file)
@@ -3,10 +3,10 @@
 val* flow__ToolContext__flow_phase(val* self) {
 val* var /* : Phase */;
 val* var1 /* : Phase */;
-var1 = self->attrs[COLOR_flow__ToolContext___64dflow_phase].val; /* @flow_phase on <self:ToolContext> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @flow_phase");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 26);
+var1 = self->attrs[COLOR_flow__ToolContext___flow_phase].val; /* _flow_phase on <self:ToolContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flow_phase");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 26);
 show_backtrace(1);
 }
 var = var1;
@@ -17,43 +17,57 @@ return var;
 val* VIRTUAL_flow__ToolContext__flow_phase(val* self) {
 val* var /* : Phase */;
 val* var1 /* : Phase */;
-var1 = flow__ToolContext__flow_phase(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : Phase */;
+{ /* Inline flow#ToolContext#flow_phase (self) on <self:Object(ToolContext)> */
+var3 = self->attrs[COLOR_flow__ToolContext___flow_phase].val; /* _flow_phase on <self:Object(ToolContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flow_phase");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 26);
+show_backtrace(1);
 }
-/* method flow#ToolContext#flow_phase= for (self: ToolContext, Phase) */
-void flow__ToolContext__flow_phase_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__ToolContext___64dflow_phase].val = p0; /* @flow_phase on <self:ToolContext> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method flow#ToolContext#flow_phase= for (self: Object, Phase) */
-void VIRTUAL_flow__ToolContext__flow_phase_61d(val* self, val* p0) {
-flow__ToolContext__flow_phase_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method flow#FlowPhase#process_npropdef for (self: FlowPhase, APropdef) */
 void flow__FlowPhase__process_npropdef(val* self, val* p0) {
 val* var_npropdef /* var npropdef: APropdef */;
 val* var /* : ToolContext */;
+val* var2 /* : ToolContext */;
 var_npropdef = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_phase__Phase__toolcontext]))(self) /* toolcontext on <self:FlowPhase>*/;
-((void (*)(val*, val*))(var_npropdef->class->vft[COLOR_flow__APropdef__do_flow]))(var_npropdef, var) /* do_flow on <var_npropdef:APropdef>*/;
+{
+{ /* Inline phase#Phase#toolcontext (self) on <self:FlowPhase> */
+var2 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:FlowPhase> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 145);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+flow__APropdef__do_flow(var_npropdef, var); /* Direct call flow#APropdef#do_flow on <var_npropdef:APropdef>*/
+}
 RET_LABEL:;
 }
 /* method flow#FlowPhase#process_npropdef for (self: Object, APropdef) */
 void VIRTUAL_flow__FlowPhase__process_npropdef(val* self, val* p0) {
-flow__FlowPhase__process_npropdef(self, p0);
+flow__FlowPhase__process_npropdef(self, p0); /* Direct call flow#FlowPhase#process_npropdef on <self:Object(FlowPhase)>*/
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#current_flow_context for (self: FlowVisitor): FlowContext */
 val* flow__FlowVisitor__current_flow_context(val* self) {
 val* var /* : FlowContext */;
 val* var1 /* : FlowContext */;
-var1 = self->attrs[COLOR_flow__FlowVisitor___64dcurrent_flow_context].val; /* @current_flow_context on <self:FlowVisitor> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @current_flow_context");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 39);
+var1 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
 show_backtrace(1);
 }
 var = var1;
@@ -64,29 +78,42 @@ return var;
 val* VIRTUAL_flow__FlowVisitor__current_flow_context(val* self) {
 val* var /* : FlowContext */;
 val* var1 /* : FlowContext */;
-var1 = flow__FlowVisitor__current_flow_context(self);
+val* var3 /* : FlowContext */;
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:Object(FlowVisitor)> */
+var3 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:Object(FlowVisitor)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#FlowVisitor#current_flow_context= for (self: FlowVisitor, FlowContext) */
 void flow__FlowVisitor__current_flow_context_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowVisitor___64dcurrent_flow_context].val = p0; /* @current_flow_context on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = p0; /* _current_flow_context on <self:FlowVisitor> */
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#current_flow_context= for (self: Object, FlowContext) */
 void VIRTUAL_flow__FlowVisitor__current_flow_context_61d(val* self, val* p0) {
-flow__FlowVisitor__current_flow_context_61d(self, p0);
+{ /* Inline flow#FlowVisitor#current_flow_context= (self,p0) on <self:Object(FlowVisitor)> */
+self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = p0; /* _current_flow_context on <self:Object(FlowVisitor)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#toolcontext for (self: FlowVisitor): ToolContext */
 val* flow__FlowVisitor__toolcontext(val* self) {
 val* var /* : ToolContext */;
 val* var1 /* : ToolContext */;
-var1 = self->attrs[COLOR_flow__FlowVisitor___64dtoolcontext].val; /* @toolcontext on <self:FlowVisitor> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @toolcontext");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 41);
+var1 = self->attrs[COLOR_flow__FlowVisitor___toolcontext].val; /* _toolcontext on <self:FlowVisitor> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 41);
 show_backtrace(1);
 }
 var = var1;
@@ -97,53 +124,127 @@ return var;
 val* VIRTUAL_flow__FlowVisitor__toolcontext(val* self) {
 val* var /* : ToolContext */;
 val* var1 /* : ToolContext */;
-var1 = flow__FlowVisitor__toolcontext(self);
+val* var3 /* : ToolContext */;
+{ /* Inline flow#FlowVisitor#toolcontext (self) on <self:Object(FlowVisitor)> */
+var3 = self->attrs[COLOR_flow__FlowVisitor___toolcontext].val; /* _toolcontext on <self:Object(FlowVisitor)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 41);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#FlowVisitor#toolcontext= for (self: FlowVisitor, ToolContext) */
 void flow__FlowVisitor__toolcontext_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowVisitor___64dtoolcontext].val = p0; /* @toolcontext on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___toolcontext].val = p0; /* _toolcontext on <self:FlowVisitor> */
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#toolcontext= for (self: Object, ToolContext) */
 void VIRTUAL_flow__FlowVisitor__toolcontext_61d(val* self, val* p0) {
-flow__FlowVisitor__toolcontext_61d(self, p0);
+{ /* Inline flow#FlowVisitor#toolcontext= (self,p0) on <self:Object(FlowVisitor)> */
+self->attrs[COLOR_flow__FlowVisitor___toolcontext].val = p0; /* _toolcontext on <self:Object(FlowVisitor)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#init for (self: FlowVisitor, ToolContext) */
 void flow__FlowVisitor__init(val* self, val* p0) {
 val* var_toolcontext /* var toolcontext: ToolContext */;
 val* var /* : FlowContext */;
-val* var1 /* : Array[FlowContext] */;
-val* var2 /* : FlowContext */;
-val* var3 /* : FlowContext */;
-short int var4 /* : Bool */;
+val* var5 /* : Array[FlowContext] */;
+val* var7 /* : Array[FlowContext] */;
+val* var8 /* : FlowContext */;
+val* var10 /* : FlowContext */;
+val* var11 /* : FlowContext */;
+val* var13 /* : FlowContext */;
+short int var14 /* : Bool */;
+{
+{ /* Inline parser_nodes#Visitor#init (self) on <self:FlowVisitor> */
+RET_LABEL1:(void)0;
+}
+}
 var_toolcontext = p0;
-((void (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__init]))(self) /* init on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__toolcontext_61d]))(self, var_toolcontext) /* toolcontext= on <self:FlowVisitor>*/;
+{
+{ /* Inline flow#FlowVisitor#toolcontext= (self,var_toolcontext) on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___toolcontext].val = var_toolcontext; /* _toolcontext on <self:FlowVisitor> */
+RET_LABEL2:(void)0;
+}
+}
 var = NEW_flow__FlowContext(&type_flow__FlowContext);
-((void (*)(val*))(var->class->vft[COLOR_flow__FlowContext__init]))(var) /* init on <var:FlowContext>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var) /* current_flow_context= on <self:FlowVisitor>*/;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var1, var2) /* add on <var1:Array[FlowContext]>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
-var4 = 1;
-((void (*)(val*, short int))(var3->class->vft[COLOR_flow__FlowContext__is_start_61d]))(var3, var4) /* is_start= on <var3:FlowContext>*/;
+{
+{ /* Inline flow#FlowContext#init (var) on <var:FlowContext> */
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (self,var) on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var; /* _current_flow_context on <self:FlowVisitor> */
+RET_LABEL4:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
+var7 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 80);
+show_backtrace(1);
+}
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var10 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+array__Array__add(var5, var8); /* Direct call array#Array#add on <var5:Array[FlowContext]>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var13 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var13 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+var14 = 1;
+{
+{ /* Inline flow#FlowContext#is_start= (var11,var14) on <var11:FlowContext> */
+var11->attrs[COLOR_flow__FlowContext___is_start].s = var14; /* _is_start on <var11:FlowContext> */
+RET_LABEL15:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#init for (self: Object, ToolContext) */
 void VIRTUAL_flow__FlowVisitor__init(val* self, val* p0) {
-flow__FlowVisitor__init(self, p0);
+flow__FlowVisitor__init(self, p0); /* Direct call flow#FlowVisitor#init on <self:Object(FlowVisitor)>*/
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#first for (self: FlowVisitor): nullable ANode */
 val* flow__FlowVisitor__first(val* self) {
 val* var /* : nullable ANode */;
 val* var1 /* : nullable ANode */;
-var1 = self->attrs[COLOR_flow__FlowVisitor___64dfirst].val; /* @first on <self:FlowVisitor> */
+var1 = self->attrs[COLOR_flow__FlowVisitor___first].val; /* _first on <self:FlowVisitor> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -152,132 +253,350 @@ return var;
 val* VIRTUAL_flow__FlowVisitor__first(val* self) {
 val* var /* : nullable ANode */;
 val* var1 /* : nullable ANode */;
-var1 = flow__FlowVisitor__first(self);
+val* var3 /* : nullable ANode */;
+{ /* Inline flow#FlowVisitor#first (self) on <self:Object(FlowVisitor)> */
+var3 = self->attrs[COLOR_flow__FlowVisitor___first].val; /* _first on <self:Object(FlowVisitor)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#FlowVisitor#first= for (self: FlowVisitor, nullable ANode) */
 void flow__FlowVisitor__first_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowVisitor___64dfirst].val = p0; /* @first on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___first].val = p0; /* _first on <self:FlowVisitor> */
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#first= for (self: Object, nullable ANode) */
 void VIRTUAL_flow__FlowVisitor__first_61d(val* self, val* p0) {
-flow__FlowVisitor__first_61d(self, p0);
+{ /* Inline flow#FlowVisitor#first= (self,p0) on <self:Object(FlowVisitor)> */
+self->attrs[COLOR_flow__FlowVisitor___first].val = p0; /* _first on <self:Object(FlowVisitor)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#visit for (self: FlowVisitor, ANode) */
 void flow__FlowVisitor__visit(val* self, val* p0) {
 val* var_node /* var node: ANode */;
 val* var /* : nullable ANode */;
-val* var1 /* : null */;
-short int var2 /* : Bool */;
-val* var3 /* : FlowContext */;
-val* var4 /* : nullable ANode */;
-val* var5 /* : null */;
-short int var6 /* : Bool */;
-val* var7 /* : FlowContext */;
-short int var8 /* : Bool */;
+val* var2 /* : nullable ANode */;
+val* var3 /* : null */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var11 /* : FlowContext */;
+val* var13 /* : FlowContext */;
+val* var14 /* : nullable ANode */;
+val* var16 /* : nullable ANode */;
+val* var17 /* : null */;
+short int var18 /* : Bool */;
+short int var19 /* : Bool */;
+short int var21 /* : Bool */;
+short int var23 /* : Bool */;
+val* var24 /* : FlowContext */;
+val* var26 /* : FlowContext */;
+short int var28 /* : Bool */;
 int cltype;
 int idtype;
-val* var9 /* : FlowContext */;
+val* var29 /* : FlowContext */;
+val* var31 /* : FlowContext */;
 val* var_flow /* var flow: FlowContext */;
-short int var10 /* : Bool */;
-val* var11 /* : FlowContext */;
-short int var12 /* : Bool */;
+short int var33 /* : Bool */;
+val* var34 /* : FlowContext */;
+val* var36 /* : FlowContext */;
+short int var37 /* : Bool */;
+short int var38 /* : Bool */;
+val* var_other40 /* var other: nullable Object */;
+short int var41 /* : Bool */;
+short int var42 /* : Bool */;
+short int var43 /* : Bool */;
 short int var_ /* var : Bool */;
-val* var13 /* : FlowContext */;
-short int var14 /* : Bool */;
-val* var15 /* : FlowContext */;
-val* var16 /* : FlowContext */;
+val* var44 /* : FlowContext */;
+val* var46 /* : FlowContext */;
+short int var47 /* : Bool */;
+short int var48 /* : Bool */;
+short int var50 /* : Bool */;
+short int var51 /* : Bool */;
+short int var52 /* : Bool */;
+val* var53 /* : FlowContext */;
+val* var54 /* : FlowContext */;
+val* var56 /* : FlowContext */;
 static val* varonce;
-val* var17 /* : String */;
-char* var18 /* : NativeString */;
-long var19 /* : Int */;
-val* var20 /* : String */;
-val* var21 /* : nullable ANode */;
-short int var22 /* : Bool */;
+val* var57 /* : String */;
+char* var58 /* : NativeString */;
+long var59 /* : Int */;
+val* var60 /* : FlatString */;
+val* var62 /* : nullable ANode */;
+val* var64 /* : nullable ANode */;
+short int var65 /* : Bool */;
+short int var66 /* : Bool */;
+short int var68 /* : Bool */;
+short int var70 /* : Bool */;
 var_node = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__first]))(self) /* first on <self:FlowVisitor>*/;
-var1 = NULL;
+{
+{ /* Inline flow#FlowVisitor#first (self) on <self:FlowVisitor> */
+var2 = self->attrs[COLOR_flow__FlowVisitor___first].val; /* _first on <self:FlowVisitor> */
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+var3 = NULL;
 if (var == NULL) {
-var2 = 1; /* is null */
+var4 = 1; /* is null */
 } else {
-var2 = 0; /* arg is null but recv is not */
+var4 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var,var3) on <var:nullable ANode> */
+var_other = var3;
+{
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:nullable ANode(ANode)> */
+var9 = var == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+}
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+var4 = var5;
+}
+if (var4){
+{
+{ /* Inline flow#FlowVisitor#first= (self,var_node) on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___first].val = var_node; /* _first on <self:FlowVisitor> */
+RET_LABEL10:(void)0;
+}
 }
-if (var2){
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__first_61d]))(self, var_node) /* first= on <self:FlowVisitor>*/;
 } else {
 }
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
-var4 = ((val* (*)(val*))(var3->class->vft[COLOR_flow__FlowContext__node]))(var3) /* node on <var3:FlowContext>*/;
-var5 = NULL;
-if (var4 == NULL) {
-var6 = 1; /* is null */
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var13 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var13 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#node (var11) on <var11:FlowContext> */
+var16 = var11->attrs[COLOR_flow__FlowContext___node].val; /* _node on <var11:FlowContext> */
+var14 = var16;
+RET_LABEL15:(void)0;
+}
+}
+var17 = NULL;
+if (var14 == NULL) {
+var18 = 1; /* is null */
 } else {
-var6 = 0; /* arg is null but recv is not */
+var18 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var14,var17) on <var14:nullable ANode> */
+var_other = var17;
+{
+{ /* Inline kernel#Object#is_same_instance (var14,var_other) on <var14:nullable ANode(ANode)> */
+var23 = var14 == var_other;
+var21 = var23;
+goto RET_LABEL22;
+RET_LABEL22:(void)0;
+}
+}
+var19 = var21;
+goto RET_LABEL20;
+RET_LABEL20:(void)0;
+}
+var18 = var19;
+}
+if (var18){
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var26 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var26 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var24 = var26;
+RET_LABEL25:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#node= (var24,var_node) on <var24:FlowContext> */
+var24->attrs[COLOR_flow__FlowContext___node].val = var_node; /* _node on <var24:FlowContext> */
+RET_LABEL27:(void)0;
+}
 }
-if (var6){
-var7 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var7->class->vft[COLOR_flow__FlowContext__node_61d]))(var7, var_node) /* node= on <var7:FlowContext>*/;
 } else {
 }
+{
 ((void (*)(val*, val*))(var_node->class->vft[COLOR_flow__ANode__accept_flow_visitor]))(var_node, self) /* accept_flow_visitor on <var_node:ANode>*/;
+}
 /* <var_node:ANode> isa AExpr */
 cltype = type_parser_nodes__AExpr.color;
 idtype = type_parser_nodes__AExpr.id;
 if(cltype >= var_node->type->table_size) {
-var8 = 0;
+var28 = 0;
 } else {
-var8 = var_node->type->type_table[cltype] == idtype;
-}
-if (var8){
-var9 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
-var_flow = var9;
-((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)>*/;
-var11 = ((val* (*)(val*))(var_flow->class->vft[COLOR_flow__FlowContext__when_true]))(var_flow) /* when_true on <var_flow:FlowContext>*/;
-var12 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___33d_61d]))(var11, var_flow) /* != on <var11:FlowContext>*/;
-var_ = var12;
-if (var12){
-var10 = var_;
+var28 = var_node->type->type_table[cltype] == idtype;
+}
+if (var28){
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var31 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var31 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var29 = var31;
+RET_LABEL30:(void)0;
+}
+}
+var_flow = var29;
+{
+{ /* Inline flow#AExpr#after_flow_context= (var_node,var_flow) on <var_node:ANode(AExpr)> */
+var_node->attrs[COLOR_flow__AExpr___after_flow_context].val = var_flow; /* _after_flow_context on <var_node:ANode(AExpr)> */
+RET_LABEL32:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#when_true (var_flow) on <var_flow:FlowContext> */
+var36 = var_flow->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_flow:FlowContext> */
+if (unlikely(var36 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var34 = var36;
+RET_LABEL35:(void)0;
+}
+}
+{
+{ /* Inline kernel#Object#!= (var34,var_flow) on <var34:FlowContext> */
+var_other40 = var_flow;
+{
+var42 = ((short int (*)(val*, val*))(var34->class->vft[COLOR_kernel__Object___61d_61d]))(var34, var_other40) /* == on <var34:FlowContext>*/;
+var41 = var42;
+}
+var43 = !var41;
+var38 = var43;
+goto RET_LABEL39;
+RET_LABEL39:(void)0;
+}
+var37 = var38;
+}
+var_ = var37;
+if (var37){
+var33 = var_;
 } else {
-var13 = ((val* (*)(val*))(var_flow->class->vft[COLOR_flow__FlowContext__when_false]))(var_flow) /* when_false on <var_flow:FlowContext>*/;
-var14 = ((short int (*)(val*, val*))(var13->class->vft[COLOR_kernel__Object___33d_61d]))(var13, var_flow) /* != on <var13:FlowContext>*/;
-var10 = var14;
+{
+{ /* Inline flow#FlowContext#when_false (var_flow) on <var_flow:FlowContext> */
+var46 = var_flow->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_flow:FlowContext> */
+if (unlikely(var46 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var44 = var46;
+RET_LABEL45:(void)0;
+}
+}
+{
+{ /* Inline kernel#Object#!= (var44,var_flow) on <var44:FlowContext> */
+var_other40 = var_flow;
+{
+var51 = ((short int (*)(val*, val*))(var44->class->vft[COLOR_kernel__Object___61d_61d]))(var44, var_other40) /* == on <var44:FlowContext>*/;
+var50 = var51;
+}
+var52 = !var50;
+var48 = var52;
+goto RET_LABEL49;
+RET_LABEL49:(void)0;
+}
+var47 = var48;
+}
+var33 = var47;
+}
+if (var33){
+{
+var53 = flow__FlowVisitor__make_sub_flow(self);
+}
+var53;
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var56 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var56 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var54 = var56;
+RET_LABEL55:(void)0;
+}
 }
-if (var10){
-var15 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(self) /* make_sub_flow on <self:FlowVisitor>*/;
-var15;
-var16 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
 if (varonce) {
-var17 = varonce;
+var57 = varonce;
 } else {
-var18 = "AUTOSUB";
-var19 = 7;
-var20 = string__NativeString__to_s_with_length(var18, var19);
-var17 = var20;
-varonce = var17;
+var58 = "AUTOSUB";
+var59 = 7;
+var60 = string__NativeString__to_s_with_length(var58, var59);
+var57 = var60;
+varonce = var57;
+}
+{
+{ /* Inline flow#FlowContext#name= (var54,var57) on <var54:FlowContext> */
+var54->attrs[COLOR_flow__FlowContext___name].val = var57; /* _name on <var54:FlowContext> */
+RET_LABEL61:(void)0;
+}
 }
-((void (*)(val*, val*))(var16->class->vft[COLOR_flow__FlowContext__name_61d]))(var16, var17) /* name= on <var16:FlowContext>*/;
 } else {
 }
 } else {
 }
-var21 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__first]))(self) /* first on <self:FlowVisitor>*/;
-if (var21 == NULL) {
-var22 = 0; /* <var_node:ANode> cannot be null */
+{
+{ /* Inline flow#FlowVisitor#first (self) on <self:FlowVisitor> */
+var64 = self->attrs[COLOR_flow__FlowVisitor___first].val; /* _first on <self:FlowVisitor> */
+var62 = var64;
+RET_LABEL63:(void)0;
+}
+}
+if (var62 == NULL) {
+var65 = 0; /* <var_node:ANode> cannot be null */
 } else {
-var22 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var_node) /* == on <var21:nullable ANode>*/;
+{ /* Inline kernel#Object#== (var62,var_node) on <var62:nullable ANode> */
+var_other = var_node;
+{
+{ /* Inline kernel#Object#is_same_instance (var62,var_other) on <var62:nullable ANode(ANode)> */
+var70 = var62 == var_other;
+var68 = var70;
+goto RET_LABEL69;
+RET_LABEL69:(void)0;
+}
 }
-if (var22){
+var66 = var68;
+goto RET_LABEL67;
+RET_LABEL67:(void)0;
+}
+var65 = var66;
+}
+if (var65){
 } else {
 }
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#visit for (self: Object, ANode) */
 void VIRTUAL_flow__FlowVisitor__visit(val* self, val* p0) {
-flow__FlowVisitor__visit(self, p0);
+flow__FlowVisitor__visit(self, p0); /* Direct call flow#FlowVisitor#visit on <self:Object(FlowVisitor)>*/
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#visit_expr for (self: FlowVisitor, AExpr): FlowContext */
@@ -285,12 +604,21 @@ val* flow__FlowVisitor__visit_expr(val* self, val* p0) {
 val* var /* : FlowContext */;
 val* var_node /* var node: AExpr */;
 val* var1 /* : nullable FlowContext */;
+val* var3 /* : nullable FlowContext */;
 var_node = p0;
-((void (*)(val*, val*))(self->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(self, var_node) /* enter_visit on <self:FlowVisitor>*/;
-var1 = ((val* (*)(val*))(var_node->class->vft[COLOR_flow__AExpr__after_flow_context]))(var_node) /* after_flow_context on <var_node:AExpr>*/;
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Cast failed");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 77);
+{
+parser_nodes__Visitor__enter_visit(self, var_node); /* Direct call parser_nodes#Visitor#enter_visit on <self:FlowVisitor>*/
+}
+{
+{ /* Inline flow#AExpr#after_flow_context (var_node) on <var_node:AExpr> */
+var3 = var_node->attrs[COLOR_flow__AExpr___after_flow_context].val; /* _after_flow_context on <var_node:AExpr> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 77);
 show_backtrace(1);
 }
 var = var1;
@@ -311,10 +639,10 @@ return var;
 val* flow__FlowVisitor__flows(val* self) {
 val* var /* : Array[FlowContext] */;
 val* var1 /* : Array[FlowContext] */;
-var1 = self->attrs[COLOR_flow__FlowVisitor___64dflows].val; /* @flows on <self:FlowVisitor> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @flows");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 80);
+var1 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 80);
 show_backtrace(1);
 }
 var = var1;
@@ -325,600 +653,83 @@ return var;
 val* VIRTUAL_flow__FlowVisitor__flows(val* self) {
 val* var /* : Array[FlowContext] */;
 val* var1 /* : Array[FlowContext] */;
-var1 = flow__FlowVisitor__flows(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : Array[FlowContext] */;
+{ /* Inline flow#FlowVisitor#flows (self) on <self:Object(FlowVisitor)> */
+var3 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:Object(FlowVisitor)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 80);
+show_backtrace(1);
 }
-/* method flow#FlowVisitor#flows= for (self: FlowVisitor, Array[FlowContext]) */
-void flow__FlowVisitor__flows_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowVisitor___64dflows].val = p0; /* @flows on <self:FlowVisitor> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method flow#FlowVisitor#flows= for (self: Object, Array[FlowContext]) */
-void VIRTUAL_flow__FlowVisitor__flows_61d(val* self, val* p0) {
-flow__FlowVisitor__flows_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
-/* method flow#FlowVisitor#printflow for (self: FlowVisitor) */
-void flow__FlowVisitor__printflow(val* self) {
-val* var /* : OFStream */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : String */;
-val* var_file /* var file: OFStream */;
-static val* varonce5;
-val* var6 /* : String */;
-char* var7 /* : NativeString */;
-long var8 /* : Int */;
-val* var9 /* : String */;
-val* var10 /* : Array[FlowContext] */;
-val* var11 /* : Iterator[nullable Object] */;
-short int var12 /* : Bool */;
-val* var13 /* : nullable Object */;
-val* var_f /* var f: FlowContext */;
-static val* varonce14;
-val* var15 /* : String */;
-char* var16 /* : NativeString */;
-long var17 /* : Int */;
-val* var18 /* : String */;
-val* var_s /* var s: String */;
-val* var19 /* : nullable ANode */;
-short int var20 /* : Bool */;
-int cltype;
-int idtype;
-val* var21 /* : Array[Object] */;
-long var22 /* : Int */;
-val* var_ /* var : Array[Object] */;
-static val* varonce23;
-val* var24 /* : String */;
-char* var25 /* : NativeString */;
-long var26 /* : Int */;
-val* var27 /* : String */;
-val* var28 /* : nullable ANode */;
-short int var29 /* : Bool */;
-int cltype30;
-int idtype31;
-const char* var_class_name;
-val* var32 /* : nullable FlowContext */;
-long var33 /* : Int */;
-val* var34 /* : nullable Object */;
-static val* varonce35;
-val* var36 /* : String */;
-char* var37 /* : NativeString */;
-long var38 /* : Int */;
-val* var39 /* : String */;
-val* var40 /* : String */;
-static val* varonce41;
-val* var42 /* : String */;
-char* var43 /* : NativeString */;
-long var44 /* : Int */;
-val* var45 /* : String */;
-long var46 /* : Int */;
-static val* varonce47;
-val* var48 /* : String */;
-char* var49 /* : NativeString */;
-long var50 /* : Int */;
-val* var51 /* : String */;
-long var52 /* : Int */;
-static val* varonce53;
-val* var54 /* : String */;
-char* var55 /* : NativeString */;
-long var56 /* : Int */;
-val* var57 /* : String */;
-val* var58 /* : nullable ANode */;
-val* var59 /* : Location */;
-static val* varonce60;
-val* var61 /* : String */;
-char* var62 /* : NativeString */;
-long var63 /* : Int */;
-val* var64 /* : String */;
-val* var65 /* : nullable ANode */;
-val* var66 /* : String */;
-static val* varonce67;
-val* var68 /* : String */;
-char* var69 /* : NativeString */;
-long var70 /* : Int */;
-val* var71 /* : String */;
-val* var72 /* : String */;
-static val* varonce73;
-val* var74 /* : String */;
-char* var75 /* : NativeString */;
-long var76 /* : Int */;
-val* var77 /* : String */;
-val* var78 /* : Array[Object] */;
-long var79 /* : Int */;
-val* var80 /* : NativeArray[Object] */;
-val* var81 /* : Object */;
-val* var82 /* : Object */;
-val* var83 /* : String */;
-val* var84 /* : Array[FlowContext] */;
-val* var85 /* : Iterator[nullable Object] */;
-short int var86 /* : Bool */;
-val* var87 /* : nullable Object */;
-val* var_p /* var p: FlowContext */;
-static val* varonce88;
-val* var89 /* : String */;
-char* var90 /* : NativeString */;
-long var91 /* : Int */;
-val* var92 /* : String */;
-long var93 /* : Int */;
-static val* varonce94;
-val* var95 /* : String */;
-char* var96 /* : NativeString */;
-long var97 /* : Int */;
-val* var98 /* : String */;
-long var99 /* : Int */;
-static val* varonce100;
-val* var101 /* : String */;
-char* var102 /* : NativeString */;
-long var103 /* : Int */;
-val* var104 /* : String */;
-val* var105 /* : Array[Object] */;
-long var106 /* : Int */;
-val* var107 /* : NativeArray[Object] */;
-val* var108 /* : Object */;
-val* var109 /* : Object */;
-val* var110 /* : String */;
-val* var111 /* : FlowContext */;
-short int var112 /* : Bool */;
-static val* varonce113;
-val* var114 /* : String */;
-char* var115 /* : NativeString */;
-long var116 /* : Int */;
-val* var117 /* : String */;
-long var118 /* : Int */;
-static val* varonce119;
-val* var120 /* : String */;
-char* var121 /* : NativeString */;
-long var122 /* : Int */;
-val* var123 /* : String */;
-val* var124 /* : FlowContext */;
-long var125 /* : Int */;
-static val* varonce126;
-val* var127 /* : String */;
-char* var128 /* : NativeString */;
-long var129 /* : Int */;
-val* var130 /* : String */;
-val* var131 /* : Array[Object] */;
-long var132 /* : Int */;
-val* var133 /* : NativeArray[Object] */;
-val* var134 /* : Object */;
-val* var135 /* : Object */;
-val* var136 /* : String */;
-val* var137 /* : FlowContext */;
-short int var138 /* : Bool */;
-static val* varonce139;
-val* var140 /* : String */;
-char* var141 /* : NativeString */;
-long var142 /* : Int */;
-val* var143 /* : String */;
-long var144 /* : Int */;
-static val* varonce145;
-val* var146 /* : String */;
-char* var147 /* : NativeString */;
-long var148 /* : Int */;
-val* var149 /* : String */;
-val* var150 /* : FlowContext */;
-long var151 /* : Int */;
-static val* varonce152;
-val* var153 /* : String */;
-char* var154 /* : NativeString */;
-long var155 /* : Int */;
-val* var156 /* : String */;
-val* var157 /* : Array[Object] */;
-long var158 /* : Int */;
-val* var159 /* : NativeArray[Object] */;
-val* var160 /* : Object */;
-val* var161 /* : Object */;
-val* var162 /* : String */;
-static val* varonce164;
-val* var165 /* : String */;
-char* var166 /* : NativeString */;
-long var167 /* : Int */;
-val* var168 /* : String */;
-var = NEW_file__OFStream(&type_file__OFStream);
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = "flow.dot";
-var3 = 8;
-var4 = string__NativeString__to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
-}
-((void (*)(val*, val*))(var->class->vft[COLOR_file__OFStream__open]))(var, var1) /* open on <var:OFStream>*/;
-var_file = var;
-if (varonce5) {
-var6 = varonce5;
-} else {
-var7 = "digraph {\n";
-var8 = 10;
-var9 = string__NativeString__to_s_with_length(var7, var8);
-var6 = var9;
-varonce5 = var6;
-}
-((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var6) /* write on <var_file:OFStream>*/;
-var10 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
-var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_collection__Collection__iterator]))(var10) /* iterator on <var10:Array[FlowContext]>*/;
-for(;;) {
-var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var11) /* is_ok on <var11:Iterator[nullable Object]>*/;
-if(!var12) break;
-var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__item]))(var11) /* item on <var11:Iterator[nullable Object]>*/;
-var_f = var13;
-if (varonce14) {
-var15 = varonce14;
-} else {
-var16 = "";
-var17 = 0;
-var18 = string__NativeString__to_s_with_length(var16, var17);
-var15 = var18;
-varonce14 = var15;
-}
-var_s = var15;
-var19 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__node]))(var_f) /* node on <var_f:FlowContext>*/;
-/* <var19:nullable ANode> isa AExpr */
-cltype = type_parser_nodes__AExpr.color;
-idtype = type_parser_nodes__AExpr.id;
-if(var19 == NULL) {
-var20 = 0;
-} else {
-if(cltype >= var19->type->table_size) {
-var20 = 0;
-} else {
-var20 = var19->type->type_table[cltype] == idtype;
-}
-}
-if (var20){
-var21 = NEW_array__Array(&type_array__Arraykernel__Object);
-var22 = 3;
-((void (*)(val*, long))(var21->class->vft[COLOR_array__Array__with_capacity]))(var21, var22) /* with_capacity on <var21:Array[Object]>*/;
-var_ = var21;
-if (varonce23) {
-var24 = varonce23;
-} else {
-var25 = "\\nmain=";
-var26 = 7;
-var27 = string__NativeString__to_s_with_length(var25, var26);
-var24 = var27;
-varonce23 = var24;
-}
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var24) /* add on <var_:Array[Object]>*/;
-var28 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__node]))(var_f) /* node on <var_f:FlowContext>*/;
-/* <var28:nullable ANode> isa AExpr */
-cltype30 = type_parser_nodes__AExpr.color;
-idtype31 = type_parser_nodes__AExpr.id;
-if(var28 == NULL) {
-var29 = 0;
-} else {
-if(cltype30 >= var28->type->table_size) {
-var29 = 0;
-} else {
-var29 = var28->type->type_table[cltype30] == idtype31;
-}
+/* method flow#FlowVisitor#make_sub_flow for (self: FlowVisitor): FlowContext */
+val* flow__FlowVisitor__make_sub_flow(val* self) {
+val* var /* : FlowContext */;
+val* var1 /* : FlowContext */;
+val* var_flow /* var flow: FlowContext */;
+val* var3 /* : Array[FlowContext] */;
+val* var5 /* : Array[FlowContext] */;
+val* var6 /* : nullable ANode */;
+val* var8 /* : FlowContext */;
+val* var10 /* : FlowContext */;
+var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
+{
+{ /* Inline flow#FlowContext#init (var1) on <var1:FlowContext> */
+RET_LABEL2:(void)0;
 }
-if (!var29) {
-var_class_name = var28 == NULL ? "null" : var28->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 89);
-show_backtrace(1);
 }
-var32 = ((val* (*)(val*))(var28->class->vft[COLOR_flow__AExpr__after_flow_context]))(var28) /* after_flow_context on <var28:nullable ANode(AExpr)>*/;
-if (var32 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 89);
+var_flow = var1;
+{
+{ /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
+var5 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 80);
 show_backtrace(1);
-} else {
-var33 = ((long (*)(val*))(var32->class->vft[COLOR_kernel__Object__object_id]))(var32) /* object_id on <var32:nullable FlowContext>*/;
 }
-var34 = BOX_kernel__Int(var33); /* autobox from Int to nullable Object */
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var34) /* add on <var_:Array[Object]>*/;
-if (varonce35) {
-var36 = varonce35;
-} else {
-var37 = "";
-var38 = 0;
-var39 = string__NativeString__to_s_with_length(var37, var38);
-var36 = var39;
-varonce35 = var36;
-}
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var36) /* add on <var_:Array[Object]>*/;
-var40 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
-var_s = var40;
-} else {
+var3 = var5;
+RET_LABEL4:(void)0;
 }
-if (varonce41) {
-var42 = varonce41;
-} else {
-var43 = "F";
-var44 = 1;
-var45 = string__NativeString__to_s_with_length(var43, var44);
-var42 = var45;
-varonce41 = var42;
-}
-var46 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
-if (varonce47) {
-var48 = varonce47;
-} else {
-var49 = " [label=\"";
-var50 = 9;
-var51 = string__NativeString__to_s_with_length(var49, var50);
-var48 = var51;
-varonce47 = var48;
-}
-var52 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
-if (varonce53) {
-var54 = varonce53;
-} else {
-var55 = "\\n";
-var56 = 2;
-var57 = string__NativeString__to_s_with_length(var55, var56);
-var54 = var57;
-varonce53 = var54;
 }
-var58 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__node]))(var_f) /* node on <var_f:FlowContext>*/;
-if (var58 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 91);
-show_backtrace(1);
-} else {
-var59 = ((val* (*)(val*))(var58->class->vft[COLOR_parser_nodes__ANode__location]))(var58) /* location on <var58:nullable ANode>*/;
+{
+array__Array__add(var3, var_flow); /* Direct call array#Array#add on <var3:Array[FlowContext]>*/
 }
-if (varonce60) {
-var61 = varonce60;
-} else {
-var62 = "\\n";
-var63 = 2;
-var64 = string__NativeString__to_s_with_length(var62, var63);
-var61 = var64;
-varonce60 = var61;
+{
+var6 = parser_nodes__Visitor__current_node(self);
 }
-var65 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__node]))(var_f) /* node on <var_f:FlowContext>*/;
-if (var65 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 91);
-show_backtrace(1);
-} else {
-var66 = ((val* (*)(val*))(var65->class->vft[COLOR_string__Object__class_name]))(var65) /* class_name on <var65:nullable ANode>*/;
+{
+{ /* Inline flow#FlowContext#node= (var_flow,var6) on <var_flow:FlowContext> */
+var_flow->attrs[COLOR_flow__FlowContext___node].val = var6; /* _node on <var_flow:FlowContext> */
+RET_LABEL7:(void)0;
 }
-if (varonce67) {
-var68 = varonce67;
-} else {
-var69 = "\\n";
-var70 = 2;
-var71 = string__NativeString__to_s_with_length(var69, var70);
-var68 = var71;
-varonce67 = var68;
-}
-var72 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__name]))(var_f) /* name on <var_f:FlowContext>*/;
-if (varonce73) {
-var74 = varonce73;
-} else {
-var75 = "\"];\n";
-var76 = 4;
-var77 = string__NativeString__to_s_with_length(var75, var76);
-var74 = var77;
-varonce73 = var74;
-}
-var78 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var78 = array_instance Array[Object] */
-var79 = 12;
-var80 = NEW_array__NativeArray(var79, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var80)->values[0] = (val*) var42;
-var81 = BOX_kernel__Int(var46); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var80)->values[1] = (val*) var81;
-((struct instance_array__NativeArray*)var80)->values[2] = (val*) var48;
-var82 = BOX_kernel__Int(var52); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var80)->values[3] = (val*) var82;
-((struct instance_array__NativeArray*)var80)->values[4] = (val*) var54;
-((struct instance_array__NativeArray*)var80)->values[5] = (val*) var59;
-((struct instance_array__NativeArray*)var80)->values[6] = (val*) var61;
-((struct instance_array__NativeArray*)var80)->values[7] = (val*) var66;
-((struct instance_array__NativeArray*)var80)->values[8] = (val*) var68;
-((struct instance_array__NativeArray*)var80)->values[9] = (val*) var72;
-((struct instance_array__NativeArray*)var80)->values[10] = (val*) var_s;
-((struct instance_array__NativeArray*)var80)->values[11] = (val*) var74;
-((void (*)(val*, val*, long))(var78->class->vft[COLOR_array__Array__with_native]))(var78, var80, var79) /* with_native on <var78:Array[Object]>*/;
-}
-var83 = ((val* (*)(val*))(var78->class->vft[COLOR_string__Object__to_s]))(var78) /* to_s on <var78:Array[Object]>*/;
-((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var83) /* write on <var_file:OFStream>*/;
-var84 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__previous]))(var_f) /* previous on <var_f:FlowContext>*/;
-var85 = ((val* (*)(val*))(var84->class->vft[COLOR_abstract_collection__Collection__iterator]))(var84) /* iterator on <var84:Array[FlowContext]>*/;
-for(;;) {
-var86 = ((short int (*)(val*))(var85->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var85) /* is_ok on <var85:Iterator[nullable Object]>*/;
-if(!var86) break;
-var87 = ((val* (*)(val*))(var85->class->vft[COLOR_abstract_collection__Iterator__item]))(var85) /* item on <var85:Iterator[nullable Object]>*/;
-var_p = var87;
-if (varonce88) {
-var89 = varonce88;
-} else {
-var90 = "F";
-var91 = 1;
-var92 = string__NativeString__to_s_with_length(var90, var91);
-var89 = var92;
-varonce88 = var89;
-}
-var93 = ((long (*)(val*))(var_p->class->vft[COLOR_kernel__Object__object_id]))(var_p) /* object_id on <var_p:FlowContext>*/;
-if (varonce94) {
-var95 = varonce94;
-} else {
-var96 = " -> F";
-var97 = 5;
-var98 = string__NativeString__to_s_with_length(var96, var97);
-var95 = var98;
-varonce94 = var95;
-}
-var99 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
-if (varonce100) {
-var101 = varonce100;
-} else {
-var102 = ";\n";
-var103 = 2;
-var104 = string__NativeString__to_s_with_length(var102, var103);
-var101 = var104;
-varonce100 = var101;
-}
-var105 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var105 = array_instance Array[Object] */
-var106 = 5;
-var107 = NEW_array__NativeArray(var106, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var107)->values[0] = (val*) var89;
-var108 = BOX_kernel__Int(var93); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var107)->values[1] = (val*) var108;
-((struct instance_array__NativeArray*)var107)->values[2] = (val*) var95;
-var109 = BOX_kernel__Int(var99); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var107)->values[3] = (val*) var109;
-((struct instance_array__NativeArray*)var107)->values[4] = (val*) var101;
-((void (*)(val*, val*, long))(var105->class->vft[COLOR_array__Array__with_native]))(var105, var107, var106) /* with_native on <var105:Array[Object]>*/;
-}
-var110 = ((val* (*)(val*))(var105->class->vft[COLOR_string__Object__to_s]))(var105) /* to_s on <var105:Array[Object]>*/;
-((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var110) /* write on <var_file:OFStream>*/;
-CONTINUE_label: (void)0;
-((void (*)(val*))(var85->class->vft[COLOR_abstract_collection__Iterator__next]))(var85) /* next on <var85:Iterator[nullable Object]>*/;
 }
-BREAK_label: (void)0;
-var111 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__when_true]))(var_f) /* when_true on <var_f:FlowContext>*/;
-var112 = ((short int (*)(val*, val*))(var111->class->vft[COLOR_kernel__Object___33d_61d]))(var111, var_f) /* != on <var111:FlowContext>*/;
-if (var112){
-if (varonce113) {
-var114 = varonce113;
-} else {
-var115 = "F";
-var116 = 1;
-var117 = string__NativeString__to_s_with_length(var115, var116);
-var114 = var117;
-varonce113 = var114;
-}
-var118 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
-if (varonce119) {
-var120 = varonce119;
-} else {
-var121 = " -> F";
-var122 = 5;
-var123 = string__NativeString__to_s_with_length(var121, var122);
-var120 = var123;
-varonce119 = var120;
-}
-var124 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__when_true]))(var_f) /* when_true on <var_f:FlowContext>*/;
-var125 = ((long (*)(val*))(var124->class->vft[COLOR_kernel__Object__object_id]))(var124) /* object_id on <var124:FlowContext>*/;
-if (varonce126) {
-var127 = varonce126;
-} else {
-var128 = "[label=TRUE, style=dotted];\n";
-var129 = 28;
-var130 = string__NativeString__to_s_with_length(var128, var129);
-var127 = var130;
-varonce126 = var127;
-}
-var131 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var131 = array_instance Array[Object] */
-var132 = 5;
-var133 = NEW_array__NativeArray(var132, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var133)->values[0] = (val*) var114;
-var134 = BOX_kernel__Int(var118); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var133)->values[1] = (val*) var134;
-((struct instance_array__NativeArray*)var133)->values[2] = (val*) var120;
-var135 = BOX_kernel__Int(var125); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var133)->values[3] = (val*) var135;
-((struct instance_array__NativeArray*)var133)->values[4] = (val*) var127;
-((void (*)(val*, val*, long))(var131->class->vft[COLOR_array__Array__with_native]))(var131, var133, var132) /* with_native on <var131:Array[Object]>*/;
-}
-var136 = ((val* (*)(val*))(var131->class->vft[COLOR_string__Object__to_s]))(var131) /* to_s on <var131:Array[Object]>*/;
-((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var136) /* write on <var_file:OFStream>*/;
-} else {
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var10 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
 }
-var137 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__when_false]))(var_f) /* when_false on <var_f:FlowContext>*/;
-var138 = ((short int (*)(val*, val*))(var137->class->vft[COLOR_kernel__Object___33d_61d]))(var137, var_f) /* != on <var137:FlowContext>*/;
-if (var138){
-if (varonce139) {
-var140 = varonce139;
-} else {
-var141 = "F";
-var142 = 1;
-var143 = string__NativeString__to_s_with_length(var141, var142);
-var140 = var143;
-varonce139 = var140;
-}
-var144 = ((long (*)(val*))(var_f->class->vft[COLOR_kernel__Object__object_id]))(var_f) /* object_id on <var_f:FlowContext>*/;
-if (varonce145) {
-var146 = varonce145;
-} else {
-var147 = " -> F";
-var148 = 5;
-var149 = string__NativeString__to_s_with_length(var147, var148);
-var146 = var149;
-varonce145 = var146;
-}
-var150 = ((val* (*)(val*))(var_f->class->vft[COLOR_flow__FlowContext__when_false]))(var_f) /* when_false on <var_f:FlowContext>*/;
-var151 = ((long (*)(val*))(var150->class->vft[COLOR_kernel__Object__object_id]))(var150) /* object_id on <var150:FlowContext>*/;
-if (varonce152) {
-var153 = varonce152;
-} else {
-var154 = "[label=FALSE,style=dotted];\n";
-var155 = 28;
-var156 = string__NativeString__to_s_with_length(var154, var155);
-var153 = var156;
-varonce152 = var153;
-}
-var157 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var157 = array_instance Array[Object] */
-var158 = 5;
-var159 = NEW_array__NativeArray(var158, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var159)->values[0] = (val*) var140;
-var160 = BOX_kernel__Int(var144); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var159)->values[1] = (val*) var160;
-((struct instance_array__NativeArray*)var159)->values[2] = (val*) var146;
-var161 = BOX_kernel__Int(var151); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var159)->values[3] = (val*) var161;
-((struct instance_array__NativeArray*)var159)->values[4] = (val*) var153;
-((void (*)(val*, val*, long))(var157->class->vft[COLOR_array__Array__with_native]))(var157, var159, var158) /* with_native on <var157:Array[Object]>*/;
-}
-var162 = ((val* (*)(val*))(var157->class->vft[COLOR_string__Object__to_s]))(var157) /* to_s on <var157:Array[Object]>*/;
-((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var162) /* write on <var_file:OFStream>*/;
-} else {
+var8 = var10;
+RET_LABEL9:(void)0;
 }
-CONTINUE_label163: (void)0;
-((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__next]))(var11) /* next on <var11:Iterator[nullable Object]>*/;
 }
-BREAK_label163: (void)0;
-if (varonce164) {
-var165 = varonce164;
-} else {
-var166 = "}\n";
-var167 = 2;
-var168 = string__NativeString__to_s_with_length(var166, var167);
-var165 = var168;
-varonce164 = var165;
+{
+flow__FlowContext__add_previous(var_flow, var8); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
 }
-((void (*)(val*, val*))(var_file->class->vft[COLOR_stream__OStream__write]))(var_file, var165) /* write on <var_file:OFStream>*/;
-((void (*)(val*))(var_file->class->vft[COLOR_stream__IOS__close]))(var_file) /* close on <var_file:OFStream>*/;
-RET_LABEL:;
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (self,var_flow) on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_flow; /* _current_flow_context on <self:FlowVisitor> */
+RET_LABEL11:(void)0;
 }
-/* method flow#FlowVisitor#printflow for (self: Object) */
-void VIRTUAL_flow__FlowVisitor__printflow(val* self) {
-flow__FlowVisitor__printflow(self);
-RET_LABEL:;
 }
-/* method flow#FlowVisitor#make_sub_flow for (self: FlowVisitor): FlowContext */
-val* flow__FlowVisitor__make_sub_flow(val* self) {
-val* var /* : FlowContext */;
-val* var1 /* : FlowContext */;
-val* var_flow /* var flow: FlowContext */;
-val* var2 /* : Array[FlowContext] */;
-val* var3 /* : nullable ANode */;
-val* var4 /* : FlowContext */;
-var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
-((void (*)(val*))(var1->class->vft[COLOR_flow__FlowContext__init]))(var1) /* init on <var1:FlowContext>*/;
-var_flow = var1;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_flow) /* add on <var2:Array[FlowContext]>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_flow, var3) /* node= on <var_flow:FlowContext>*/;
-var4 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var4) /* add_previous on <var_flow:FlowContext>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var_flow) /* current_flow_context= on <self:FlowVisitor>*/;
 var = var_flow;
 goto RET_LABEL;
 RET_LABEL:;
@@ -940,26 +751,60 @@ val* var_flow1 /* var flow1: FlowContext */;
 val* var_flow2 /* var flow2: FlowContext */;
 val* var1 /* : FlowContext */;
 val* var_flow /* var flow: FlowContext */;
-val* var2 /* : Array[FlowContext] */;
-val* var3 /* : nullable ANode */;
+val* var3 /* : Array[FlowContext] */;
+val* var5 /* : Array[FlowContext] */;
+val* var6 /* : nullable ANode */;
 var_flow1 = p0;
 var_flow2 = p1;
 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
-((void (*)(val*))(var1->class->vft[COLOR_flow__FlowContext__init]))(var1) /* init on <var1:FlowContext>*/;
+{
+{ /* Inline flow#FlowContext#init (var1) on <var1:FlowContext> */
+RET_LABEL2:(void)0;
+}
+}
 var_flow = var1;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_flow) /* add on <var2:Array[FlowContext]>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_flow, var3) /* node= on <var_flow:FlowContext>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var_flow1) /* add_previous on <var_flow:FlowContext>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var_flow2) /* add_previous on <var_flow:FlowContext>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var_flow) /* current_flow_context= on <self:FlowVisitor>*/;
-var = var_flow;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+{ /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
+var5 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 80);
+show_backtrace(1);
 }
-/* method flow#FlowVisitor#make_merge_flow for (self: Object, FlowContext, FlowContext): FlowContext */
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+array__Array__add(var3, var_flow); /* Direct call array#Array#add on <var3:Array[FlowContext]>*/
+}
+{
+var6 = parser_nodes__Visitor__current_node(self);
+}
+{
+{ /* Inline flow#FlowContext#node= (var_flow,var6) on <var_flow:FlowContext> */
+var_flow->attrs[COLOR_flow__FlowContext___node].val = var6; /* _node on <var_flow:FlowContext> */
+RET_LABEL7:(void)0;
+}
+}
+{
+flow__FlowContext__add_previous(var_flow, var_flow1); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
+}
+{
+flow__FlowContext__add_previous(var_flow, var_flow2); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (self,var_flow) on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_flow; /* _current_flow_context on <self:FlowVisitor> */
+RET_LABEL8:(void)0;
+}
+}
+var = var_flow;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method flow#FlowVisitor#make_merge_flow for (self: Object, FlowContext, FlowContext): FlowContext */
 val* VIRTUAL_flow__FlowVisitor__make_merge_flow(val* self, val* p0, val* p1) {
 val* var /* : FlowContext */;
 val* var1 /* : FlowContext */;
@@ -975,22 +820,66 @@ val* var_true_flow /* var true_flow: FlowContext */;
 val* var_false_flow /* var false_flow: FlowContext */;
 val* var1 /* : FlowContext */;
 val* var_flow /* var flow: FlowContext */;
-val* var2 /* : Array[FlowContext] */;
-val* var3 /* : nullable ANode */;
+val* var3 /* : Array[FlowContext] */;
+val* var5 /* : Array[FlowContext] */;
+val* var6 /* : nullable ANode */;
 var_true_flow = p0;
 var_false_flow = p1;
 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
-((void (*)(val*))(var1->class->vft[COLOR_flow__FlowContext__init]))(var1) /* init on <var1:FlowContext>*/;
+{
+{ /* Inline flow#FlowContext#init (var1) on <var1:FlowContext> */
+RET_LABEL2:(void)0;
+}
+}
 var_flow = var1;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_flow) /* add on <var2:Array[FlowContext]>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_flow, var3) /* node= on <var_flow:FlowContext>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var_true_flow) /* add_previous on <var_flow:FlowContext>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var_false_flow) /* add_previous on <var_flow:FlowContext>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__when_true_61d]))(var_flow, var_true_flow) /* when_true= on <var_flow:FlowContext>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__when_false_61d]))(var_flow, var_false_flow) /* when_false= on <var_flow:FlowContext>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var_flow) /* current_flow_context= on <self:FlowVisitor>*/;
+{
+{ /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
+var5 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 80);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+array__Array__add(var3, var_flow); /* Direct call array#Array#add on <var3:Array[FlowContext]>*/
+}
+{
+var6 = parser_nodes__Visitor__current_node(self);
+}
+{
+{ /* Inline flow#FlowContext#node= (var_flow,var6) on <var_flow:FlowContext> */
+var_flow->attrs[COLOR_flow__FlowContext___node].val = var6; /* _node on <var_flow:FlowContext> */
+RET_LABEL7:(void)0;
+}
+}
+{
+flow__FlowContext__add_previous(var_flow, var_true_flow); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
+}
+{
+flow__FlowContext__add_previous(var_flow, var_false_flow); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
+}
+{
+{ /* Inline flow#FlowContext#when_true= (var_flow,var_true_flow) on <var_flow:FlowContext> */
+var_flow->attrs[COLOR_flow__FlowContext___when_true].val = var_true_flow; /* _when_true on <var_flow:FlowContext> */
+RET_LABEL8:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#when_false= (var_flow,var_false_flow) on <var_flow:FlowContext> */
+var_flow->attrs[COLOR_flow__FlowContext___when_false].val = var_false_flow; /* _when_false on <var_flow:FlowContext> */
+RET_LABEL9:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (self,var_flow) on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_flow; /* _current_flow_context on <self:FlowVisitor> */
+RET_LABEL10:(void)0;
+}
+}
 var = var_flow;
 goto RET_LABEL;
 RET_LABEL:;
@@ -1009,66 +898,144 @@ return var;
 val* flow__FlowVisitor__make_sub_true_false_flow(val* self) {
 val* var /* : FlowContext */;
 val* var1 /* : FlowContext */;
+val* var3 /* : FlowContext */;
 val* var_orig_flow /* var orig_flow: FlowContext */;
-val* var2 /* : FlowContext */;
+val* var4 /* : FlowContext */;
 val* var_true_flow /* var true_flow: FlowContext */;
-val* var3 /* : Array[FlowContext] */;
-val* var4 /* : nullable ANode */;
+val* var6 /* : Array[FlowContext] */;
+val* var8 /* : Array[FlowContext] */;
+val* var9 /* : nullable ANode */;
 static val* varonce;
-val* var5 /* : String */;
-char* var6 /* : NativeString */;
-long var7 /* : Int */;
-val* var8 /* : String */;
-val* var9 /* : FlowContext */;
+val* var11 /* : String */;
+char* var12 /* : NativeString */;
+long var13 /* : Int */;
+val* var14 /* : FlatString */;
+val* var16 /* : FlowContext */;
 val* var_false_flow /* var false_flow: FlowContext */;
-val* var10 /* : Array[FlowContext] */;
-val* var11 /* : nullable ANode */;
-static val* varonce12;
-val* var13 /* : String */;
-char* var14 /* : NativeString */;
-long var15 /* : Int */;
-val* var16 /* : String */;
-val* var17 /* : FlowContext */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
+val* var18 /* : Array[FlowContext] */;
+val* var20 /* : Array[FlowContext] */;
+val* var21 /* : nullable ANode */;
+static val* varonce23;
+val* var24 /* : String */;
+char* var25 /* : NativeString */;
+long var26 /* : Int */;
+val* var27 /* : FlatString */;
+val* var29 /* : FlowContext */;
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var3 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
 var_orig_flow = var1;
-var2 = NEW_flow__FlowContext(&type_flow__FlowContext);
-((void (*)(val*))(var2->class->vft[COLOR_flow__FlowContext__init]))(var2) /* init on <var2:FlowContext>*/;
-var_true_flow = var2;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var3, var_true_flow) /* add on <var3:Array[FlowContext]>*/;
-var4 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var_true_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_true_flow, var4) /* node= on <var_true_flow:FlowContext>*/;
-((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>*/;
+var4 = NEW_flow__FlowContext(&type_flow__FlowContext);
+{
+{ /* Inline flow#FlowContext#init (var4) on <var4:FlowContext> */
+RET_LABEL5:(void)0;
+}
+}
+var_true_flow = var4;
+{
+{ /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
+var8 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
+if (unlikely(var8 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 80);
+show_backtrace(1);
+}
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+array__Array__add(var6, var_true_flow); /* Direct call array#Array#add on <var6:Array[FlowContext]>*/
+}
+{
+var9 = parser_nodes__Visitor__current_node(self);
+}
+{
+{ /* Inline flow#FlowContext#node= (var_true_flow,var9) on <var_true_flow:FlowContext> */
+var_true_flow->attrs[COLOR_flow__FlowContext___node].val = var9; /* _node on <var_true_flow:FlowContext> */
+RET_LABEL10:(void)0;
+}
+}
+{
+flow__FlowContext__add_previous(var_true_flow, var_orig_flow); /* Direct call flow#FlowContext#add_previous on <var_true_flow:FlowContext>*/
+}
 if (varonce) {
-var5 = varonce;
+var11 = varonce;
 } else {
-var6 = "TRUE";
-var7 = 4;
-var8 = string__NativeString__to_s_with_length(var6, var7);
-var5 = var8;
-varonce = var5;
-}
-((void (*)(val*, val*))(var_true_flow->class->vft[COLOR_flow__FlowContext__name_61d]))(var_true_flow, var5) /* name= on <var_true_flow:FlowContext>*/;
-var9 = NEW_flow__FlowContext(&type_flow__FlowContext);
-((void (*)(val*))(var9->class->vft[COLOR_flow__FlowContext__init]))(var9) /* init on <var9:FlowContext>*/;
-var_false_flow = var9;
-var10 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var10, var_false_flow) /* add on <var10:Array[FlowContext]>*/;
-var11 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var_false_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_false_flow, var11) /* node= on <var_false_flow:FlowContext>*/;
-((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>*/;
-if (varonce12) {
-var13 = varonce12;
+var12 = "TRUE";
+var13 = 4;
+var14 = string__NativeString__to_s_with_length(var12, var13);
+var11 = var14;
+varonce = var11;
+}
+{
+{ /* Inline flow#FlowContext#name= (var_true_flow,var11) on <var_true_flow:FlowContext> */
+var_true_flow->attrs[COLOR_flow__FlowContext___name].val = var11; /* _name on <var_true_flow:FlowContext> */
+RET_LABEL15:(void)0;
+}
+}
+var16 = NEW_flow__FlowContext(&type_flow__FlowContext);
+{
+{ /* Inline flow#FlowContext#init (var16) on <var16:FlowContext> */
+RET_LABEL17:(void)0;
+}
+}
+var_false_flow = var16;
+{
+{ /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
+var20 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
+if (unlikely(var20 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 80);
+show_backtrace(1);
+}
+var18 = var20;
+RET_LABEL19:(void)0;
+}
+}
+{
+array__Array__add(var18, var_false_flow); /* Direct call array#Array#add on <var18:Array[FlowContext]>*/
+}
+{
+var21 = parser_nodes__Visitor__current_node(self);
+}
+{
+{ /* Inline flow#FlowContext#node= (var_false_flow,var21) on <var_false_flow:FlowContext> */
+var_false_flow->attrs[COLOR_flow__FlowContext___node].val = var21; /* _node on <var_false_flow:FlowContext> */
+RET_LABEL22:(void)0;
+}
+}
+{
+flow__FlowContext__add_previous(var_false_flow, var_orig_flow); /* Direct call flow#FlowContext#add_previous on <var_false_flow:FlowContext>*/
+}
+if (varonce23) {
+var24 = varonce23;
 } else {
-var14 = "FALSE";
-var15 = 5;
-var16 = string__NativeString__to_s_with_length(var14, var15);
-var13 = var16;
-varonce12 = var13;
-}
-((void (*)(val*, val*))(var_false_flow->class->vft[COLOR_flow__FlowContext__name_61d]))(var_false_flow, var13) /* name= on <var_false_flow:FlowContext>*/;
-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>*/;
-var = var17;
+var25 = "FALSE";
+var26 = 5;
+var27 = string__NativeString__to_s_with_length(var25, var26);
+var24 = var27;
+varonce23 = var24;
+}
+{
+{ /* Inline flow#FlowContext#name= (var_false_flow,var24) on <var_false_flow:FlowContext> */
+var_false_flow->attrs[COLOR_flow__FlowContext___name].val = var24; /* _name on <var_false_flow:FlowContext> */
+RET_LABEL28:(void)0;
+}
+}
+{
+var29 = flow__FlowVisitor__make_true_false_flow(self, var_true_flow, var_false_flow);
+}
+var = var29;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1087,22 +1054,71 @@ val* flow__FlowVisitor__make_unreachable_flow(val* self) {
 val* var /* : FlowContext */;
 val* var1 /* : FlowContext */;
 val* var_flow /* var flow: FlowContext */;
-val* var2 /* : Array[FlowContext] */;
-val* var3 /* : nullable ANode */;
-val* var4 /* : FlowContext */;
-short int var5 /* : Bool */;
+val* var3 /* : Array[FlowContext] */;
+val* var5 /* : Array[FlowContext] */;
+val* var6 /* : nullable ANode */;
+val* var8 /* : FlowContext */;
+val* var10 /* : FlowContext */;
+short int var11 /* : Bool */;
 var1 = NEW_flow__FlowContext(&type_flow__FlowContext);
-((void (*)(val*))(var1->class->vft[COLOR_flow__FlowContext__init]))(var1) /* init on <var1:FlowContext>*/;
+{
+{ /* Inline flow#FlowContext#init (var1) on <var1:FlowContext> */
+RET_LABEL2:(void)0;
+}
+}
 var_flow = var1;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__flows]))(self) /* flows on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var2, var_flow) /* add on <var2:Array[FlowContext]>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__Visitor__current_node]))(self) /* current_node on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__node_61d]))(var_flow, var3) /* node= on <var_flow:FlowContext>*/;
-var4 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
-((void (*)(val*, val*))(var_flow->class->vft[COLOR_flow__FlowContext__add_previous]))(var_flow, var4) /* add_previous on <var_flow:FlowContext>*/;
-var5 = 1;
-((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>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(self, var_flow) /* current_flow_context= on <self:FlowVisitor>*/;
+{
+{ /* Inline flow#FlowVisitor#flows (self) on <self:FlowVisitor> */
+var5 = self->attrs[COLOR_flow__FlowVisitor___flows].val; /* _flows on <self:FlowVisitor> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _flows");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 80);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+array__Array__add(var3, var_flow); /* Direct call array#Array#add on <var3:Array[FlowContext]>*/
+}
+{
+var6 = parser_nodes__Visitor__current_node(self);
+}
+{
+{ /* Inline flow#FlowContext#node= (var_flow,var6) on <var_flow:FlowContext> */
+var_flow->attrs[COLOR_flow__FlowContext___node].val = var6; /* _node on <var_flow:FlowContext> */
+RET_LABEL7:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var10 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+flow__FlowContext__add_previous(var_flow, var8); /* Direct call flow#FlowContext#add_previous on <var_flow:FlowContext>*/
+}
+var11 = 1;
+{
+{ /* Inline flow#FlowContext#is_marked_unreachable= (var_flow,var11) on <var_flow:FlowContext> */
+var_flow->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s = var11; /* _is_marked_unreachable on <var_flow:FlowContext> */
+RET_LABEL12:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (self,var_flow) on <self:FlowVisitor> */
+self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_flow; /* _current_flow_context on <self:FlowVisitor> */
+RET_LABEL13:(void)0;
+}
+}
 var = var_flow;
 goto RET_LABEL;
 RET_LABEL:;
@@ -1123,15 +1139,23 @@ val* var_before_loop /* var before_loop: FlowContext */;
 val* var_escapemark /* var escapemark: nullable EscapeMark */;
 val* var /* : null */;
 short int var1 /* : Bool */;
-val* var2 /* : Array[AContinueExpr] */;
-val* var3 /* : Iterator[nullable Object] */;
+short int var2 /* : Bool */;
+val* var_other /* var other: nullable Object */;
 short int var4 /* : Bool */;
-val* var5 /* : nullable Object */;
+short int var6 /* : Bool */;
+val* var7 /* : Array[AContinueExpr] */;
+val* var9 /* : Array[AContinueExpr] */;
+val* var10 /* : ArrayIterator[nullable Object] */;
+short int var11 /* : Bool */;
+val* var12 /* : nullable Object */;
 val* var_b /* var b: AContinueExpr */;
-val* var6 /* : nullable FlowContext */;
+val* var13 /* : nullable FlowContext */;
 val* var_before /* var before: nullable FlowContext */;
-val* var7 /* : null */;
-short int var8 /* : Bool */;
+val* var14 /* : null */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
 var_before_loop = p0;
 var_escapemark = p1;
 var = NULL;
@@ -1140,39 +1164,96 @@ var1 = 1; /* is null */
 } else {
 var1 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_escapemark,var) on <var_escapemark:nullable EscapeMark> */
+var_other = var;
+{
+{ /* Inline kernel#Object#is_same_instance (var_escapemark,var_other) on <var_escapemark:nullable EscapeMark(EscapeMark)> */
+var6 = var_escapemark == var_other;
+var4 = var6;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
+}
+}
+var2 = var4;
+goto RET_LABEL3;
+RET_LABEL3:(void)0;
+}
+var1 = var2;
+}
 if (var1){
 goto RET_LABEL;
 } else {
 }
-var2 = ((val* (*)(val*))(var_escapemark->class->vft[COLOR_scope__EscapeMark__continues]))(var_escapemark) /* continues on <var_escapemark:nullable EscapeMark(EscapeMark)>*/;
-var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Array[AContinueExpr]>*/;
+{
+{ /* Inline scope#EscapeMark#continues (var_escapemark) on <var_escapemark:nullable EscapeMark(EscapeMark)> */
+var9 = var_escapemark->attrs[COLOR_scope__EscapeMark___continues].val; /* _continues on <var_escapemark:nullable EscapeMark(EscapeMark)> */
+if (unlikely(var9 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _continues");
+PRINT_ERROR(" (%s:%d)\n", "src/scope.nit", 53);
+show_backtrace(1);
+}
+var7 = var9;
+RET_LABEL8:(void)0;
+}
+}
+{
+var10 = array__AbstractArrayRead__iterator(var7);
+}
 for(;;) {
-var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
-if(!var4) break;
-var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
-var_b = var5;
-var6 = ((val* (*)(val*))(var_b->class->vft[COLOR_flow__AContinueExpr__before_flow_context]))(var_b) /* before_flow_context on <var_b:AContinueExpr>*/;
-var_before = var6;
-var7 = NULL;
+{
+var11 = array__ArrayIterator__is_ok(var10);
+}
+if(!var11) break;
+{
+var12 = array__ArrayIterator__item(var10);
+}
+var_b = var12;
+{
+var13 = flow__AContinueExpr__before_flow_context(var_b);
+}
+var_before = var13;
+var14 = NULL;
 if (var_before == NULL) {
-var8 = 1; /* is null */
+var15 = 1; /* is null */
 } else {
-var8 = 0; /* arg is null but recv is not */
+var15 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_before,var14) on <var_before:nullable FlowContext> */
+var_other = var14;
+{
+{ /* Inline kernel#Object#is_same_instance (var_before,var_other) on <var_before:nullable FlowContext(FlowContext)> */
+var20 = var_before == var_other;
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
 }
-if (var8){
+var16 = var18;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
+}
+var15 = var16;
+}
+if (var15){
 goto CONTINUE_label;
 } else {
 }
-((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>*/;
+{
+flow__FlowContext__add_loop(var_before_loop, var_before); /* Direct call flow#FlowContext#add_loop on <var_before_loop:FlowContext>*/
+}
 CONTINUE_label: (void)0;
-((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
+{
+array__ArrayIterator__next(var10); /* Direct call array#ArrayIterator#next on <var10:ArrayIterator[nullable Object]>*/
+}
 }
 BREAK_label: (void)0;
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#merge_continues_to for (self: Object, FlowContext, nullable EscapeMark) */
 void VIRTUAL_flow__FlowVisitor__merge_continues_to(val* self, val* p0, val* p1) {
-flow__FlowVisitor__merge_continues_to(self, p0, p1);
+flow__FlowVisitor__merge_continues_to(self, p0, p1); /* Direct call flow#FlowVisitor#merge_continues_to on <self:Object(FlowVisitor)>*/
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#merge_breaks for (self: FlowVisitor, nullable EscapeMark) */
@@ -1180,17 +1261,26 @@ void flow__FlowVisitor__merge_breaks(val* self, val* p0) {
 val* var_escapemark /* var escapemark: nullable EscapeMark */;
 val* var /* : null */;
 short int var1 /* : Bool */;
-val* var2 /* : Array[ABreakExpr] */;
-val* var3 /* : Iterator[nullable Object] */;
+short int var2 /* : Bool */;
+val* var_other /* var other: nullable Object */;
 short int var4 /* : Bool */;
-val* var5 /* : nullable Object */;
+short int var6 /* : Bool */;
+val* var7 /* : Array[ABreakExpr] */;
+val* var9 /* : Array[ABreakExpr] */;
+val* var10 /* : ArrayIterator[nullable Object] */;
+short int var11 /* : Bool */;
+val* var12 /* : nullable Object */;
 val* var_b /* var b: ABreakExpr */;
-val* var6 /* : nullable FlowContext */;
+val* var13 /* : nullable FlowContext */;
 val* var_before /* var before: nullable FlowContext */;
-val* var7 /* : null */;
-short int var8 /* : Bool */;
-val* var9 /* : FlowContext */;
-val* var10 /* : FlowContext */;
+val* var14 /* : null */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+val* var21 /* : FlowContext */;
+val* var23 /* : FlowContext */;
+val* var24 /* : FlowContext */;
 var_escapemark = p0;
 var = NULL;
 if (var_escapemark == NULL) {
@@ -1198,51 +1288,119 @@ var1 = 1; /* is null */
 } else {
 var1 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_escapemark,var) on <var_escapemark:nullable EscapeMark> */
+var_other = var;
+{
+{ /* Inline kernel#Object#is_same_instance (var_escapemark,var_other) on <var_escapemark:nullable EscapeMark(EscapeMark)> */
+var6 = var_escapemark == var_other;
+var4 = var6;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
+}
+}
+var2 = var4;
+goto RET_LABEL3;
+RET_LABEL3:(void)0;
+}
+var1 = var2;
+}
 if (var1){
 goto RET_LABEL;
 } else {
 }
-var2 = ((val* (*)(val*))(var_escapemark->class->vft[COLOR_scope__EscapeMark__breaks]))(var_escapemark) /* breaks on <var_escapemark:nullable EscapeMark(EscapeMark)>*/;
-var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Array[ABreakExpr]>*/;
+{
+{ /* Inline scope#EscapeMark#breaks (var_escapemark) on <var_escapemark:nullable EscapeMark(EscapeMark)> */
+var9 = var_escapemark->attrs[COLOR_scope__EscapeMark___breaks].val; /* _breaks on <var_escapemark:nullable EscapeMark(EscapeMark)> */
+if (unlikely(var9 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _breaks");
+PRINT_ERROR(" (%s:%d)\n", "src/scope.nit", 56);
+show_backtrace(1);
+}
+var7 = var9;
+RET_LABEL8:(void)0;
+}
+}
+{
+var10 = array__AbstractArrayRead__iterator(var7);
+}
 for(;;) {
-var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
-if(!var4) break;
-var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
-var_b = var5;
-var6 = ((val* (*)(val*))(var_b->class->vft[COLOR_flow__ABreakExpr__before_flow_context]))(var_b) /* before_flow_context on <var_b:ABreakExpr>*/;
-var_before = var6;
-var7 = NULL;
+{
+var11 = array__ArrayIterator__is_ok(var10);
+}
+if(!var11) break;
+{
+var12 = array__ArrayIterator__item(var10);
+}
+var_b = var12;
+{
+var13 = flow__ABreakExpr__before_flow_context(var_b);
+}
+var_before = var13;
+var14 = NULL;
 if (var_before == NULL) {
-var8 = 1; /* is null */
+var15 = 1; /* is null */
 } else {
-var8 = 0; /* arg is null but recv is not */
+var15 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_before,var14) on <var_before:nullable FlowContext> */
+var_other = var14;
+{
+{ /* Inline kernel#Object#is_same_instance (var_before,var_other) on <var_before:nullable FlowContext(FlowContext)> */
+var20 = var_before == var_other;
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+var16 = var18;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
 }
-if (var8){
+var15 = var16;
+}
+if (var15){
 goto CONTINUE_label;
 } else {
 }
-var9 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(self) /* current_flow_context on <self:FlowVisitor>*/;
-var10 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_flow__FlowVisitor__make_merge_flow]))(self, var9, var_before) /* make_merge_flow on <self:FlowVisitor>*/;
-var10;
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (self) on <self:FlowVisitor> */
+var23 = self->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <self:FlowVisitor> */
+if (unlikely(var23 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var21 = var23;
+RET_LABEL22:(void)0;
+}
+}
+{
+var24 = flow__FlowVisitor__make_merge_flow(self, var21, var_before);
+}
+var24;
 CONTINUE_label: (void)0;
-((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
+{
+array__ArrayIterator__next(var10); /* Direct call array#ArrayIterator#next on <var10:ArrayIterator[nullable Object]>*/
+}
 }
 BREAK_label: (void)0;
 RET_LABEL:;
 }
 /* method flow#FlowVisitor#merge_breaks for (self: Object, nullable EscapeMark) */
 void VIRTUAL_flow__FlowVisitor__merge_breaks(val* self, val* p0) {
-flow__FlowVisitor__merge_breaks(self, p0);
+flow__FlowVisitor__merge_breaks(self, p0); /* Direct call flow#FlowVisitor#merge_breaks on <self:Object(FlowVisitor)>*/
 RET_LABEL:;
 }
 /* method flow#FlowContext#previous for (self: FlowContext): Array[FlowContext] */
 val* flow__FlowContext__previous(val* self) {
 val* var /* : Array[FlowContext] */;
 val* var1 /* : Array[FlowContext] */;
-var1 = self->attrs[COLOR_flow__FlowContext___64dprevious].val; /* @previous on <self:FlowContext> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @previous");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 192);
+var1 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 192);
 show_backtrace(1);
 }
 var = var1;
@@ -1253,29 +1411,29 @@ return var;
 val* VIRTUAL_flow__FlowContext__previous(val* self) {
 val* var /* : Array[FlowContext] */;
 val* var1 /* : Array[FlowContext] */;
-var1 = flow__FlowContext__previous(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : Array[FlowContext] */;
+{ /* Inline flow#FlowContext#previous (self) on <self:Object(FlowContext)> */
+var3 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:Object(FlowContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 192);
+show_backtrace(1);
 }
-/* method flow#FlowContext#previous= for (self: FlowContext, Array[FlowContext]) */
-void flow__FlowContext__previous_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowContext___64dprevious].val = p0; /* @previous on <self:FlowContext> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method flow#FlowContext#previous= for (self: Object, Array[FlowContext]) */
-void VIRTUAL_flow__FlowContext__previous_61d(val* self, val* p0) {
-flow__FlowContext__previous_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method flow#FlowContext#loops for (self: FlowContext): Array[FlowContext] */
 val* flow__FlowContext__loops(val* self) {
 val* var /* : Array[FlowContext] */;
 val* var1 /* : Array[FlowContext] */;
-var1 = self->attrs[COLOR_flow__FlowContext___64dloops].val; /* @loops on <self:FlowContext> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @loops");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 195);
+var1 = self->attrs[COLOR_flow__FlowContext___loops].val; /* _loops on <self:FlowContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _loops");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 195);
 show_backtrace(1);
 }
 var = var1;
@@ -1286,26 +1444,26 @@ return var;
 val* VIRTUAL_flow__FlowContext__loops(val* self) {
 val* var /* : Array[FlowContext] */;
 val* var1 /* : Array[FlowContext] */;
-var1 = flow__FlowContext__loops(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : Array[FlowContext] */;
+{ /* Inline flow#FlowContext#loops (self) on <self:Object(FlowContext)> */
+var3 = self->attrs[COLOR_flow__FlowContext___loops].val; /* _loops on <self:Object(FlowContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _loops");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 195);
+show_backtrace(1);
 }
-/* method flow#FlowContext#loops= for (self: FlowContext, Array[FlowContext]) */
-void flow__FlowContext__loops_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowContext___64dloops].val = p0; /* @loops on <self:FlowContext> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method flow#FlowContext#loops= for (self: Object, Array[FlowContext]) */
-void VIRTUAL_flow__FlowContext__loops_61d(val* self, val* p0) {
-flow__FlowContext__loops_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method flow#FlowContext#is_marked_unreachable for (self: FlowContext): Bool */
 short int flow__FlowContext__is_marked_unreachable(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = self->attrs[COLOR_flow__FlowContext___64dis_marked_unreachable].s; /* @is_marked_unreachable on <self:FlowContext> */
+var1 = self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s; /* _is_marked_unreachable on <self:FlowContext> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -1314,66 +1472,106 @@ return var;
 short int VIRTUAL_flow__FlowContext__is_marked_unreachable(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = flow__FlowContext__is_marked_unreachable(self);
+short int var3 /* : Bool */;
+{ /* Inline flow#FlowContext#is_marked_unreachable (self) on <self:Object(FlowContext)> */
+var3 = self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s; /* _is_marked_unreachable on <self:Object(FlowContext)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#FlowContext#is_marked_unreachable= for (self: FlowContext, Bool) */
 void flow__FlowContext__is_marked_unreachable_61d(val* self, short int p0) {
-self->attrs[COLOR_flow__FlowContext___64dis_marked_unreachable].s = p0; /* @is_marked_unreachable on <self:FlowContext> */
+self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s = p0; /* _is_marked_unreachable on <self:FlowContext> */
 RET_LABEL:;
 }
 /* method flow#FlowContext#is_marked_unreachable= for (self: Object, Bool) */
 void VIRTUAL_flow__FlowContext__is_marked_unreachable_61d(val* self, short int p0) {
-flow__FlowContext__is_marked_unreachable_61d(self, p0);
+{ /* Inline flow#FlowContext#is_marked_unreachable= (self,p0) on <self:Object(FlowContext)> */
+self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s = p0; /* _is_marked_unreachable on <self:Object(FlowContext)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#FlowContext#is_unreachable for (self: FlowContext): Bool */
 short int flow__FlowContext__is_unreachable(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-short int var2 /* : Bool */;
 short int var3 /* : Bool */;
 short int var4 /* : Bool */;
-val* var5 /* : Array[FlowContext] */;
-long var6 /* : Int */;
-long var7 /* : Int */;
+short int var5 /* : Bool */;
+short int var7 /* : Bool */;
 short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var11 /* : Bool */;
-short int var12 /* : Bool */;
-var1 = ((short int (*)(val*))(self->class->vft[COLOR_flow__FlowContext__is_marked_unreachable]))(self) /* is_marked_unreachable on <self:FlowContext>*/;
+val* var9 /* : Array[FlowContext] */;
+val* var11 /* : Array[FlowContext] */;
+long var12 /* : Int */;
+long var13 /* : Int */;
+short int var14 /* : Bool */;
+short int var15 /* : Bool */;
+short int var17 /* : Bool */;
+short int var18 /* : Bool */;
+short int var19 /* : Bool */;
+{
+{ /* Inline flow#FlowContext#is_marked_unreachable (self) on <self:FlowContext> */
+var3 = self->attrs[COLOR_flow__FlowContext___is_marked_unreachable].s; /* _is_marked_unreachable on <self:FlowContext> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
 if (var1){
-var2 = 1;
-var = var2;
+var4 = 1;
+var = var4;
 goto RET_LABEL;
 } else {
 }
-var3 = ((short int (*)(val*))(self->class->vft[COLOR_flow__FlowContext__is_start]))(self) /* is_start on <self:FlowContext>*/;
-if (var3){
-var4 = 0;
-var = var4;
+{
+{ /* Inline flow#FlowContext#is_start (self) on <self:FlowContext> */
+var7 = self->attrs[COLOR_flow__FlowContext___is_start].s; /* _is_start on <self:FlowContext> */
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+if (var5){
+var8 = 0;
+var = var8;
 goto RET_LABEL;
 } else {
 }
-var5 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__previous]))(self) /* previous on <self:FlowContext>*/;
-var6 = ((long (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__length]))(var5) /* length on <var5:Array[FlowContext]>*/;
-var7 = 0;
-{ /* Inline kernel#Int#== (var6,var7) */
-var10 = var6 == var7;
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+{
+{ /* Inline flow#FlowContext#previous (self) on <self:FlowContext> */
+var11 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
+if (unlikely(var11 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 192);
+show_backtrace(1);
 }
-if (var8){
-var11 = 1;
-var = var11;
+var9 = var11;
+RET_LABEL10:(void)0;
+}
+}
+{
+var12 = array__AbstractArrayRead__length(var9);
+}
+var13 = 0;
+{
+{ /* Inline kernel#Int#== (var12,var13) on <var12:Int> */
+var17 = var12 == var13;
+var15 = var17;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
+}
+var14 = var15;
+}
+if (var14){
+var18 = 1;
+var = var18;
 goto RET_LABEL;
 } else {
 }
-var12 = 0;
-var = var12;
+var19 = 0;
+var = var19;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1391,7 +1589,7 @@ return var;
 short int flow__FlowContext__is_already_unreachable(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = self->attrs[COLOR_flow__FlowContext___64dis_already_unreachable].s; /* @is_already_unreachable on <self:FlowContext> */
+var1 = self->attrs[COLOR_flow__FlowContext___is_already_unreachable].s; /* _is_already_unreachable on <self:FlowContext> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -1400,26 +1598,34 @@ return var;
 short int VIRTUAL_flow__FlowContext__is_already_unreachable(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = flow__FlowContext__is_already_unreachable(self);
+short int var3 /* : Bool */;
+{ /* Inline flow#FlowContext#is_already_unreachable (self) on <self:Object(FlowContext)> */
+var3 = self->attrs[COLOR_flow__FlowContext___is_already_unreachable].s; /* _is_already_unreachable on <self:Object(FlowContext)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#FlowContext#is_already_unreachable= for (self: FlowContext, Bool) */
 void flow__FlowContext__is_already_unreachable_61d(val* self, short int p0) {
-self->attrs[COLOR_flow__FlowContext___64dis_already_unreachable].s = p0; /* @is_already_unreachable on <self:FlowContext> */
+self->attrs[COLOR_flow__FlowContext___is_already_unreachable].s = p0; /* _is_already_unreachable on <self:FlowContext> */
 RET_LABEL:;
 }
 /* method flow#FlowContext#is_already_unreachable= for (self: Object, Bool) */
 void VIRTUAL_flow__FlowContext__is_already_unreachable_61d(val* self, short int p0) {
-flow__FlowContext__is_already_unreachable_61d(self, p0);
+{ /* Inline flow#FlowContext#is_already_unreachable= (self,p0) on <self:Object(FlowContext)> */
+self->attrs[COLOR_flow__FlowContext___is_already_unreachable].s = p0; /* _is_already_unreachable on <self:Object(FlowContext)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#FlowContext#is_start for (self: FlowContext): Bool */
 short int flow__FlowContext__is_start(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = self->attrs[COLOR_flow__FlowContext___64dis_start].s; /* @is_start on <self:FlowContext> */
+var1 = self->attrs[COLOR_flow__FlowContext___is_start].s; /* _is_start on <self:FlowContext> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -1428,26 +1634,34 @@ return var;
 short int VIRTUAL_flow__FlowContext__is_start(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = flow__FlowContext__is_start(self);
+short int var3 /* : Bool */;
+{ /* Inline flow#FlowContext#is_start (self) on <self:Object(FlowContext)> */
+var3 = self->attrs[COLOR_flow__FlowContext___is_start].s; /* _is_start on <self:Object(FlowContext)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#FlowContext#is_start= for (self: FlowContext, Bool) */
 void flow__FlowContext__is_start_61d(val* self, short int p0) {
-self->attrs[COLOR_flow__FlowContext___64dis_start].s = p0; /* @is_start on <self:FlowContext> */
+self->attrs[COLOR_flow__FlowContext___is_start].s = p0; /* _is_start on <self:FlowContext> */
 RET_LABEL:;
 }
 /* method flow#FlowContext#is_start= for (self: Object, Bool) */
 void VIRTUAL_flow__FlowContext__is_start_61d(val* self, short int p0) {
-flow__FlowContext__is_start_61d(self, p0);
+{ /* Inline flow#FlowContext#is_start= (self,p0) on <self:Object(FlowContext)> */
+self->attrs[COLOR_flow__FlowContext___is_start].s = p0; /* _is_start on <self:Object(FlowContext)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#FlowContext#node for (self: FlowContext): nullable ANode */
 val* flow__FlowContext__node(val* self) {
 val* var /* : nullable ANode */;
 val* var1 /* : nullable ANode */;
-var1 = self->attrs[COLOR_flow__FlowContext___64dnode].val; /* @node on <self:FlowContext> */
+var1 = self->attrs[COLOR_flow__FlowContext___node].val; /* _node on <self:FlowContext> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -1456,62 +1670,50 @@ return var;
 val* VIRTUAL_flow__FlowContext__node(val* self) {
 val* var /* : nullable ANode */;
 val* var1 /* : nullable ANode */;
-var1 = flow__FlowContext__node(self);
+val* var3 /* : nullable ANode */;
+{ /* Inline flow#FlowContext#node (self) on <self:Object(FlowContext)> */
+var3 = self->attrs[COLOR_flow__FlowContext___node].val; /* _node on <self:Object(FlowContext)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#FlowContext#node= for (self: FlowContext, nullable ANode) */
 void flow__FlowContext__node_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowContext___64dnode].val = p0; /* @node on <self:FlowContext> */
+self->attrs[COLOR_flow__FlowContext___node].val = p0; /* _node on <self:FlowContext> */
 RET_LABEL:;
 }
 /* method flow#FlowContext#node= for (self: Object, nullable ANode) */
 void VIRTUAL_flow__FlowContext__node_61d(val* self, val* p0) {
-flow__FlowContext__node_61d(self, p0);
-RET_LABEL:;
-}
-/* method flow#FlowContext#name for (self: FlowContext): String */
-val* flow__FlowContext__name(val* self) {
-val* var /* : String */;
-val* var1 /* : String */;
-var1 = self->attrs[COLOR_flow__FlowContext___64dname].val; /* @name on <self:FlowContext> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @name");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 225);
-show_backtrace(1);
-}
-var = var1;
-RET_LABEL:;
-return var;
+{ /* Inline flow#FlowContext#node= (self,p0) on <self:Object(FlowContext)> */
+self->attrs[COLOR_flow__FlowContext___node].val = p0; /* _node on <self:Object(FlowContext)> */
+RET_LABEL1:(void)0;
 }
-/* method flow#FlowContext#name for (self: Object): String */
-val* VIRTUAL_flow__FlowContext__name(val* self) {
-val* var /* : String */;
-val* var1 /* : String */;
-var1 = flow__FlowContext__name(self);
-var = var1;
 RET_LABEL:;
-return var;
 }
 /* method flow#FlowContext#name= for (self: FlowContext, String) */
 void flow__FlowContext__name_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowContext___64dname].val = p0; /* @name on <self:FlowContext> */
+self->attrs[COLOR_flow__FlowContext___name].val = p0; /* _name on <self:FlowContext> */
 RET_LABEL:;
 }
 /* method flow#FlowContext#name= for (self: Object, String) */
 void VIRTUAL_flow__FlowContext__name_61d(val* self, val* p0) {
-flow__FlowContext__name_61d(self, p0);
+{ /* Inline flow#FlowContext#name= (self,p0) on <self:Object(FlowContext)> */
+self->attrs[COLOR_flow__FlowContext___name].val = p0; /* _name on <self:Object(FlowContext)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#FlowContext#when_true for (self: FlowContext): FlowContext */
 val* flow__FlowContext__when_true(val* self) {
 val* var /* : FlowContext */;
 val* var1 /* : FlowContext */;
-var1 = self->attrs[COLOR_flow__FlowContext___64dwhen_true].val; /* @when_true on <self:FlowContext> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @when_true");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 228);
+var1 = self->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <self:FlowContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
 show_backtrace(1);
 }
 var = var1;
@@ -1522,29 +1724,42 @@ return var;
 val* VIRTUAL_flow__FlowContext__when_true(val* self) {
 val* var /* : FlowContext */;
 val* var1 /* : FlowContext */;
-var1 = flow__FlowContext__when_true(self);
+val* var3 /* : FlowContext */;
+{ /* Inline flow#FlowContext#when_true (self) on <self:Object(FlowContext)> */
+var3 = self->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <self:Object(FlowContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#FlowContext#when_true= for (self: FlowContext, FlowContext) */
 void flow__FlowContext__when_true_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowContext___64dwhen_true].val = p0; /* @when_true on <self:FlowContext> */
+self->attrs[COLOR_flow__FlowContext___when_true].val = p0; /* _when_true on <self:FlowContext> */
 RET_LABEL:;
 }
 /* method flow#FlowContext#when_true= for (self: Object, FlowContext) */
 void VIRTUAL_flow__FlowContext__when_true_61d(val* self, val* p0) {
-flow__FlowContext__when_true_61d(self, p0);
+{ /* Inline flow#FlowContext#when_true= (self,p0) on <self:Object(FlowContext)> */
+self->attrs[COLOR_flow__FlowContext___when_true].val = p0; /* _when_true on <self:Object(FlowContext)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#FlowContext#when_false for (self: FlowContext): FlowContext */
 val* flow__FlowContext__when_false(val* self) {
 val* var /* : FlowContext */;
 val* var1 /* : FlowContext */;
-var1 = self->attrs[COLOR_flow__FlowContext___64dwhen_false].val; /* @when_false on <self:FlowContext> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @when_false");
-fprintf(stderr, " (%s:%d)\n", "src/flow.nit", 231);
+var1 = self->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <self:FlowContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
 show_backtrace(1);
 }
 var = var1;
@@ -1555,19 +1770,32 @@ return var;
 val* VIRTUAL_flow__FlowContext__when_false(val* self) {
 val* var /* : FlowContext */;
 val* var1 /* : FlowContext */;
-var1 = flow__FlowContext__when_false(self);
+val* var3 /* : FlowContext */;
+{ /* Inline flow#FlowContext#when_false (self) on <self:Object(FlowContext)> */
+var3 = self->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <self:Object(FlowContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#FlowContext#when_false= for (self: FlowContext, FlowContext) */
 void flow__FlowContext__when_false_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__FlowContext___64dwhen_false].val = p0; /* @when_false on <self:FlowContext> */
+self->attrs[COLOR_flow__FlowContext___when_false].val = p0; /* _when_false on <self:FlowContext> */
 RET_LABEL:;
 }
 /* method flow#FlowContext#when_false= for (self: Object, FlowContext) */
 void VIRTUAL_flow__FlowContext__when_false_61d(val* self, val* p0) {
-flow__FlowContext__when_false_61d(self, p0);
+{ /* Inline flow#FlowContext#when_false= (self,p0) on <self:Object(FlowContext)> */
+self->attrs[COLOR_flow__FlowContext___when_false].val = p0; /* _when_false on <self:Object(FlowContext)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#FlowContext#add_previous for (self: FlowContext, FlowContext) */
@@ -1578,31 +1806,61 @@ short int var1 /* : Bool */;
 short int var2 /* : Bool */;
 short int var_ /* var : Bool */;
 val* var3 /* : Array[FlowContext] */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
-val* var6 /* : Array[FlowContext] */;
+val* var5 /* : Array[FlowContext] */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : Array[FlowContext] */;
+val* var10 /* : Array[FlowContext] */;
 var_flow = p0;
-var1 = ((short int (*)(val*))(var_flow->class->vft[COLOR_flow__FlowContext__is_unreachable]))(var_flow) /* is_unreachable on <var_flow:FlowContext>*/;
+{
+var1 = flow__FlowContext__is_unreachable(var_flow);
+}
 var2 = !var1;
 var_ = var2;
 if (var2){
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__previous]))(self) /* previous on <self:FlowContext>*/;
-var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_flow) /* has on <var3:Array[FlowContext]>*/;
-var5 = !var4;
-var = var5;
-} else {
+{
+{ /* Inline flow#FlowContext#previous (self) on <self:FlowContext> */
+var5 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 192);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+var6 = array__AbstractArrayRead__has(var3, var_flow);
+}
+var7 = !var6;
+var = var7;
+} else {
 var = var_;
 }
 if (var){
-var6 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__previous]))(self) /* previous on <self:FlowContext>*/;
-((void (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var6, var_flow) /* add on <var6:Array[FlowContext]>*/;
+{
+{ /* Inline flow#FlowContext#previous (self) on <self:FlowContext> */
+var10 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 192);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+array__Array__add(var8, var_flow); /* Direct call array#Array#add on <var8:Array[FlowContext]>*/
+}
 } else {
 }
 RET_LABEL:;
 }
 /* method flow#FlowContext#add_previous for (self: Object, FlowContext) */
 void VIRTUAL_flow__FlowContext__add_previous(val* self, val* p0) {
-flow__FlowContext__add_previous(self, p0);
+flow__FlowContext__add_previous(self, p0); /* Direct call flow#FlowContext#add_previous on <self:Object(FlowContext)>*/
 RET_LABEL:;
 }
 /* method flow#FlowContext#add_loop for (self: FlowContext, FlowContext) */
@@ -1613,31 +1871,61 @@ short int var1 /* : Bool */;
 short int var2 /* : Bool */;
 short int var_ /* var : Bool */;
 val* var3 /* : Array[FlowContext] */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
-val* var6 /* : Array[FlowContext] */;
+val* var5 /* : Array[FlowContext] */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : Array[FlowContext] */;
+val* var10 /* : Array[FlowContext] */;
 var_flow = p0;
-var1 = ((short int (*)(val*))(var_flow->class->vft[COLOR_flow__FlowContext__is_unreachable]))(var_flow) /* is_unreachable on <var_flow:FlowContext>*/;
+{
+var1 = flow__FlowContext__is_unreachable(var_flow);
+}
 var2 = !var1;
 var_ = var2;
 if (var2){
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__previous]))(self) /* previous on <self:FlowContext>*/;
-var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_flow) /* has on <var3:Array[FlowContext]>*/;
-var5 = !var4;
-var = var5;
+{
+{ /* Inline flow#FlowContext#previous (self) on <self:FlowContext> */
+var5 = self->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <self:FlowContext> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 192);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+var6 = array__AbstractArrayRead__has(var3, var_flow);
+}
+var7 = !var6;
+var = var7;
 } else {
 var = var_;
 }
 if (var){
-var6 = ((val* (*)(val*))(self->class->vft[COLOR_flow__FlowContext__loops]))(self) /* loops on <self:FlowContext>*/;
-((void (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var6, var_flow) /* add on <var6:Array[FlowContext]>*/;
+{
+{ /* Inline flow#FlowContext#loops (self) on <self:FlowContext> */
+var10 = self->attrs[COLOR_flow__FlowContext___loops].val; /* _loops on <self:FlowContext> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _loops");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 195);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+array__Array__add(var8, var_flow); /* Direct call array#Array#add on <var8:Array[FlowContext]>*/
+}
 } else {
 }
 RET_LABEL:;
 }
 /* method flow#FlowContext#add_loop for (self: Object, FlowContext) */
 void VIRTUAL_flow__FlowContext__add_loop(val* self, val* p0) {
-flow__FlowContext__add_loop(self, p0);
+flow__FlowContext__add_loop(self, p0); /* Direct call flow#FlowContext#add_loop on <self:Object(FlowContext)>*/
 RET_LABEL:;
 }
 /* method flow#FlowContext#init for (self: FlowContext) */
@@ -1646,19 +1934,23 @@ RET_LABEL:;
 }
 /* method flow#FlowContext#init for (self: Object) */
 void VIRTUAL_flow__FlowContext__init(val* self) {
-flow__FlowContext__init(self);
+{ /* Inline flow#FlowContext#init (self) on <self:Object(FlowContext)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#ANode#accept_flow_visitor for (self: ANode, FlowVisitor) */
 void flow__ANode__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_parser_nodes__ANode__visit_all]))(self, var_v) /* visit_all on <self:ANode>*/;
+}
 RET_LABEL:;
 }
 /* method flow#ANode#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__ANode__accept_flow_visitor(val* self, val* p0) {
-flow__ANode__accept_flow_visitor(self, p0);
+flow__ANode__accept_flow_visitor(self, p0); /* Direct call flow#ANode#accept_flow_visitor on <self:Object(ANode)>*/
 RET_LABEL:;
 }
 /* method flow#APropdef#do_flow for (self: APropdef, ToolContext) */
@@ -1668,95 +1960,105 @@ val* var /* : FlowVisitor */;
 val* var_v /* var v: FlowVisitor */;
 var_toolcontext = p0;
 var = NEW_flow__FlowVisitor(&type_flow__FlowVisitor);
-((void (*)(val*, val*))(var->class->vft[COLOR_flow__FlowVisitor__init]))(var, var_toolcontext) /* init on <var:FlowVisitor>*/;
+{
+flow__FlowVisitor__init(var, var_toolcontext); /* Direct call flow#FlowVisitor#init on <var:FlowVisitor>*/
+}
 var_v = var;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, self) /* enter_visit on <var_v:FlowVisitor>*/;
+{
+parser_nodes__Visitor__enter_visit(var_v, self); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
 RET_LABEL:;
 }
 /* method flow#APropdef#do_flow for (self: Object, ToolContext) */
 void VIRTUAL_flow__APropdef__do_flow(val* self, val* p0) {
-flow__APropdef__do_flow(self, p0);
-RET_LABEL:;
-}
-/* method flow#APropdef#before_flow_context for (self: APropdef): nullable FlowContext */
-val* flow__APropdef__before_flow_context(val* self) {
-val* var /* : nullable FlowContext */;
-val* var1 /* : nullable FlowContext */;
-var1 = self->attrs[COLOR_flow__APropdef___64dbefore_flow_context].val; /* @before_flow_context on <self:APropdef> */
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method flow#APropdef#before_flow_context for (self: Object): nullable FlowContext */
-val* VIRTUAL_flow__APropdef__before_flow_context(val* self) {
-val* var /* : nullable FlowContext */;
-val* var1 /* : nullable FlowContext */;
-var1 = flow__APropdef__before_flow_context(self);
-var = var1;
+flow__APropdef__do_flow(self, p0); /* Direct call flow#APropdef#do_flow on <self:Object(APropdef)>*/
 RET_LABEL:;
-return var;
 }
 /* method flow#APropdef#before_flow_context= for (self: APropdef, nullable FlowContext) */
 void flow__APropdef__before_flow_context_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__APropdef___64dbefore_flow_context].val = p0; /* @before_flow_context on <self:APropdef> */
+self->attrs[COLOR_flow__APropdef___before_flow_context].val = p0; /* _before_flow_context on <self:APropdef> */
 RET_LABEL:;
 }
 /* method flow#APropdef#before_flow_context= for (self: Object, nullable FlowContext) */
 void VIRTUAL_flow__APropdef__before_flow_context_61d(val* self, val* p0) {
-flow__APropdef__before_flow_context_61d(self, p0);
-RET_LABEL:;
-}
-/* method flow#APropdef#after_flow_context for (self: APropdef): nullable FlowContext */
-val* flow__APropdef__after_flow_context(val* self) {
-val* var /* : nullable FlowContext */;
-val* var1 /* : nullable FlowContext */;
-var1 = self->attrs[COLOR_flow__APropdef___64dafter_flow_context].val; /* @after_flow_context on <self:APropdef> */
-var = var1;
-RET_LABEL:;
-return var;
+{ /* Inline flow#APropdef#before_flow_context= (self,p0) on <self:Object(APropdef)> */
+self->attrs[COLOR_flow__APropdef___before_flow_context].val = p0; /* _before_flow_context on <self:Object(APropdef)> */
+RET_LABEL1:(void)0;
 }
-/* method flow#APropdef#after_flow_context for (self: Object): nullable FlowContext */
-val* VIRTUAL_flow__APropdef__after_flow_context(val* self) {
-val* var /* : nullable FlowContext */;
-val* var1 /* : nullable FlowContext */;
-var1 = flow__APropdef__after_flow_context(self);
-var = var1;
 RET_LABEL:;
-return var;
 }
 /* method flow#APropdef#after_flow_context= for (self: APropdef, nullable FlowContext) */
 void flow__APropdef__after_flow_context_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__APropdef___64dafter_flow_context].val = p0; /* @after_flow_context on <self:APropdef> */
+self->attrs[COLOR_flow__APropdef___after_flow_context].val = p0; /* _after_flow_context on <self:APropdef> */
 RET_LABEL:;
 }
 /* method flow#APropdef#after_flow_context= for (self: Object, nullable FlowContext) */
 void VIRTUAL_flow__APropdef__after_flow_context_61d(val* self, val* p0) {
-flow__APropdef__after_flow_context_61d(self, p0);
+{ /* Inline flow#APropdef#after_flow_context= (self,p0) on <self:Object(APropdef)> */
+self->attrs[COLOR_flow__APropdef___after_flow_context].val = p0; /* _after_flow_context on <self:Object(APropdef)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#APropdef#accept_flow_visitor for (self: APropdef, FlowVisitor) */
 void flow__APropdef__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
-val* var1 /* : FlowContext */;
+val* var2 /* : FlowContext */;
+val* var4 /* : FlowContext */;
+val* var6 /* : FlowContext */;
 var_v = p0;
-var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__APropdef__before_flow_context_61d]))(self, var) /* before_flow_context= on <self:APropdef>*/;
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var2 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline flow#APropdef#before_flow_context= (self,var) on <self:APropdef> */
+self->attrs[COLOR_flow__APropdef___before_flow_context].val = var; /* _before_flow_context on <self:APropdef> */
+RET_LABEL3:(void)0;
+}
+}
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__APropdef__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:APropdef>*/;
-var1 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__APropdef__after_flow_context_61d]))(self, var1) /* after_flow_context= on <self:APropdef>*/;
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var6 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var4 = var6;
+RET_LABEL5:(void)0;
+}
+}
+{
+{ /* Inline flow#APropdef#after_flow_context= (self,var4) on <self:APropdef> */
+self->attrs[COLOR_flow__APropdef___after_flow_context].val = var4; /* _after_flow_context on <self:APropdef> */
+RET_LABEL7:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method flow#APropdef#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__APropdef__accept_flow_visitor(val* self, val* p0) {
-flow__APropdef__accept_flow_visitor(self, p0);
+flow__APropdef__accept_flow_visitor(self, p0); /* Direct call flow#APropdef#accept_flow_visitor on <self:Object(APropdef)>*/
 RET_LABEL:;
 }
 /* method flow#AExpr#after_flow_context for (self: AExpr): nullable FlowContext */
 val* flow__AExpr__after_flow_context(val* self) {
 val* var /* : nullable FlowContext */;
 val* var1 /* : nullable FlowContext */;
-var1 = self->attrs[COLOR_flow__AExpr___64dafter_flow_context].val; /* @after_flow_context on <self:AExpr> */
+var1 = self->attrs[COLOR_flow__AExpr___after_flow_context].val; /* _after_flow_context on <self:AExpr> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -1765,19 +2067,27 @@ return var;
 val* VIRTUAL_flow__AExpr__after_flow_context(val* self) {
 val* var /* : nullable FlowContext */;
 val* var1 /* : nullable FlowContext */;
-var1 = flow__AExpr__after_flow_context(self);
+val* var3 /* : nullable FlowContext */;
+{ /* Inline flow#AExpr#after_flow_context (self) on <self:Object(AExpr)> */
+var3 = self->attrs[COLOR_flow__AExpr___after_flow_context].val; /* _after_flow_context on <self:Object(AExpr)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method flow#AExpr#after_flow_context= for (self: AExpr, nullable FlowContext) */
 void flow__AExpr__after_flow_context_61d(val* self, val* p0) {
-self->attrs[COLOR_flow__AExpr___64dafter_flow_context].val = p0; /* @after_flow_context on <self:AExpr> */
+self->attrs[COLOR_flow__AExpr___after_flow_context].val = p0; /* _after_flow_context on <self:AExpr> */
 RET_LABEL:;
 }
 /* method flow#AExpr#after_flow_context= for (self: Object, nullable FlowContext) */
 void VIRTUAL_flow__AExpr__after_flow_context_61d(val* self, val* p0) {
-flow__AExpr__after_flow_context_61d(self, p0);
+{ /* Inline flow#AExpr#after_flow_context= (self,p0) on <self:Object(AExpr)> */
+self->attrs[COLOR_flow__AExpr___after_flow_context].val = p0; /* _after_flow_context on <self:Object(AExpr)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method flow#AVarAssignExpr#accept_flow_visitor for (self: AVarAssignExpr, FlowVisitor) */
@@ -1785,14 +2095,23 @@ void flow__AVarAssignExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AVarAssignExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AVarAssignExpr>*/;
-var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__AExpr__after_flow_context_61d]))(self, var) /* after_flow_context= on <self:AVarAssignExpr>*/;
+}
+{
+var = flow__FlowVisitor__make_sub_flow(var_v);
+}
+{
+{ /* Inline flow#AExpr#after_flow_context= (self,var) on <self:AVarAssignExpr> */
+self->attrs[COLOR_flow__AExpr___after_flow_context].val = var; /* _after_flow_context on <self:AVarAssignExpr> */
+RET_LABEL1:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method flow#AVarAssignExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AVarAssignExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AVarAssignExpr__accept_flow_visitor(self, p0);
+flow__AVarAssignExpr__accept_flow_visitor(self, p0); /* Direct call flow#AVarAssignExpr#accept_flow_visitor on <self:Object(AVarAssignExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AReassignFormExpr#accept_flow_visitor for (self: AReassignFormExpr, FlowVisitor) */
@@ -1800,84 +2119,181 @@ void flow__AReassignFormExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AReassignFormExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AReassignFormExpr>*/;
-var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_flow__AExpr__after_flow_context_61d]))(self, var) /* after_flow_context= on <self:AReassignFormExpr>*/;
+}
+{
+var = flow__FlowVisitor__make_sub_flow(var_v);
+}
+{
+{ /* Inline flow#AExpr#after_flow_context= (self,var) on <self:AReassignFormExpr> */
+self->attrs[COLOR_flow__AExpr___after_flow_context].val = var; /* _after_flow_context on <self:AReassignFormExpr> */
+RET_LABEL1:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method flow#AReassignFormExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AReassignFormExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AReassignFormExpr__accept_flow_visitor(self, p0);
+flow__AReassignFormExpr__accept_flow_visitor(self, p0); /* Direct call flow#AReassignFormExpr#accept_flow_visitor on <self:Object(AReassignFormExpr)>*/
 RET_LABEL:;
 }
 /* method flow#ABlockExpr#accept_flow_visitor for (self: ABlockExpr, FlowVisitor) */
 void flow__ABlockExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : ANodes[AExpr] */;
-val* var1 /* : Iterator[nullable Object] */;
-short int var2 /* : Bool */;
-val* var3 /* : nullable Object */;
+val* var2 /* : ANodes[AExpr] */;
+val* var3 /* : Iterator[ANode] */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable Object */;
 val* var_e /* var e: AExpr */;
-val* var4 /* : FlowContext */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-val* var7 /* : FlowContext */;
-short int var8 /* : Bool */;
+val* var6 /* : FlowContext */;
+val* var8 /* : FlowContext */;
 short int var9 /* : Bool */;
-val* var10 /* : FlowContext */;
-short int var11 /* : Bool */;
-val* var12 /* : ToolContext */;
-val* var13 /* : Location */;
+short int var10 /* : Bool */;
+val* var11 /* : FlowContext */;
+val* var13 /* : FlowContext */;
+short int var14 /* : Bool */;
+short int var16 /* : Bool */;
+short int var17 /* : Bool */;
+val* var18 /* : FlowContext */;
+val* var20 /* : FlowContext */;
+short int var21 /* : Bool */;
+val* var23 /* : ToolContext */;
+val* var25 /* : ToolContext */;
+val* var26 /* : Location */;
 static val* varonce;
-val* var14 /* : String */;
-char* var15 /* : NativeString */;
-long var16 /* : Int */;
-val* var17 /* : String */;
+val* var27 /* : String */;
+char* var28 /* : NativeString */;
+long var29 /* : Int */;
+val* var30 /* : FlatString */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__ABlockExpr__n_expr]))(self) /* n_expr on <self:ABlockExpr>*/;
-var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_collection__Collection__iterator]))(var) /* iterator on <var:ANodes[AExpr]>*/;
+{
+{ /* Inline parser_nodes#ABlockExpr#n_expr (self) on <self:ABlockExpr> */
+var2 = self->attrs[COLOR_parser_nodes__ABlockExpr___n_expr].val; /* _n_expr on <self:ABlockExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", "src/parser/parser_nodes.nit", 1424);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+var3 = parser_nodes__ANodes__iterator(var);
+}
 for(;;) {
-var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
-if(!var2) break;
-var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
-var_e = var3;
-var4 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-var5 = ((short int (*)(val*))(var4->class->vft[COLOR_flow__FlowContext__is_unreachable]))(var4) /* is_unreachable on <var4:FlowContext>*/;
-var6 = !var5;
-if (var6){
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var_e) /* enter_visit on <var_v:FlowVisitor>*/;
+{
+var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[ANode]>*/;
+}
+if(!var4) break;
+{
+var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[ANode]>*/;
+}
+var_e = var5;
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var8 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var8 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+var9 = flow__FlowContext__is_unreachable(var6);
+}
+var10 = !var9;
+if (var10){
+{
+parser_nodes__Visitor__enter_visit(var_v, var_e); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
 } else {
-var7 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-var8 = ((short int (*)(val*))(var7->class->vft[COLOR_flow__FlowContext__is_already_unreachable]))(var7) /* is_already_unreachable on <var7:FlowContext>*/;
-var9 = !var8;
-if (var9){
-var10 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-var11 = 1;
-((void (*)(val*, short int))(var10->class->vft[COLOR_flow__FlowContext__is_already_unreachable_61d]))(var10, var11) /* is_already_unreachable= on <var10:FlowContext>*/;
-var12 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__toolcontext]))(var_v) /* toolcontext on <var_v:FlowVisitor>*/;
-var13 = ((val* (*)(val*))(var_e->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_e) /* hot_location on <var_e:AExpr>*/;
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var13 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var13 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#is_already_unreachable (var11) on <var11:FlowContext> */
+var16 = var11->attrs[COLOR_flow__FlowContext___is_already_unreachable].s; /* _is_already_unreachable on <var11:FlowContext> */
+var14 = var16;
+RET_LABEL15:(void)0;
+}
+}
+var17 = !var14;
+if (var17){
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var20 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var20 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var18 = var20;
+RET_LABEL19:(void)0;
+}
+}
+var21 = 1;
+{
+{ /* Inline flow#FlowContext#is_already_unreachable= (var18,var21) on <var18:FlowContext> */
+var18->attrs[COLOR_flow__FlowContext___is_already_unreachable].s = var21; /* _is_already_unreachable on <var18:FlowContext> */
+RET_LABEL22:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#toolcontext (var_v) on <var_v:FlowVisitor> */
+var25 = var_v->attrs[COLOR_flow__FlowVisitor___toolcontext].val; /* _toolcontext on <var_v:FlowVisitor> */
+if (unlikely(var25 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 41);
+show_backtrace(1);
+}
+var23 = var25;
+RET_LABEL24:(void)0;
+}
+}
+{
+var26 = parser_nodes__ANode__hot_location(var_e);
+}
 if (varonce) {
-var14 = varonce;
+var27 = varonce;
 } else {
-var15 = "Error: unreachable statement.";
-var16 = 29;
-var17 = string__NativeString__to_s_with_length(var15, var16);
-var14 = var17;
-varonce = var14;
+var28 = "Error: unreachable statement.";
+var29 = 29;
+var30 = string__NativeString__to_s_with_length(var28, var29);
+var27 = var30;
+varonce = var27;
+}
+{
+toolcontext__ToolContext__error(var23, var26, var27); /* Direct call toolcontext#ToolContext#error on <var23:ToolContext>*/
 }
-((void (*)(val*, val*, val*))(var12->class->vft[COLOR_toolcontext__ToolContext__error]))(var12, var13, var14) /* error on <var12:ToolContext>*/;
 } else {
 }
 }
 CONTINUE_label: (void)0;
-((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
+{
+((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[ANode]>*/;
+}
 }
 BREAK_label: (void)0;
 RET_LABEL:;
 }
 /* method flow#ABlockExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__ABlockExpr__accept_flow_visitor(val* self, val* p0) {
-flow__ABlockExpr__accept_flow_visitor(self, p0);
+flow__ABlockExpr__accept_flow_visitor(self, p0); /* Direct call flow#ABlockExpr#accept_flow_visitor on <self:Object(ABlockExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AReturnExpr#accept_flow_visitor for (self: AReturnExpr, FlowVisitor) */
@@ -1885,43 +2301,89 @@ void flow__AReturnExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AReturnExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AReturnExpr>*/;
-var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
+}
+{
+var = flow__FlowVisitor__make_unreachable_flow(var_v);
+}
 var;
 RET_LABEL:;
 }
 /* method flow#AReturnExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AReturnExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AReturnExpr__accept_flow_visitor(self, p0);
+flow__AReturnExpr__accept_flow_visitor(self, p0); /* Direct call flow#AReturnExpr#accept_flow_visitor on <self:Object(AReturnExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AContinueExpr#before_flow_context for (self: AContinueExpr): nullable FlowContext */
 val* flow__AContinueExpr__before_flow_context(val* self) {
 val* var /* : nullable FlowContext */;
 val* var1 /* : nullable FlowContext */;
+val* var3 /* : nullable FlowContext */;
 val* var_after /* var after: nullable FlowContext */;
-val* var2 /* : null */;
-short int var3 /* : Bool */;
 val* var4 /* : null */;
-val* var5 /* : Array[FlowContext] */;
-val* var6 /* : nullable Object */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_flow__AExpr__after_flow_context]))(self) /* after_flow_context on <self:AContinueExpr>*/;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
+val* var11 /* : null */;
+val* var12 /* : Array[FlowContext] */;
+val* var14 /* : Array[FlowContext] */;
+val* var15 /* : nullable Object */;
+{
+{ /* Inline flow#AExpr#after_flow_context (self) on <self:AContinueExpr> */
+var3 = self->attrs[COLOR_flow__AExpr___after_flow_context].val; /* _after_flow_context on <self:AContinueExpr> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
 var_after = var1;
-var2 = NULL;
+var4 = NULL;
 if (var_after == NULL) {
-var3 = 1; /* is null */
+var5 = 1; /* is null */
 } else {
-var3 = 0; /* arg is null but recv is not */
+var5 = 0; /* arg is null but recv is not */
 }
-if (var3){
-var4 = NULL;
-var = var4;
+if (0) {
+{ /* Inline kernel#Object#== (var_after,var4) on <var_after:nullable FlowContext> */
+var_other = var4;
+{
+{ /* Inline kernel#Object#is_same_instance (var_after,var_other) on <var_after:nullable FlowContext(FlowContext)> */
+var10 = var_after == var_other;
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
+}
+}
+var6 = var8;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
+}
+var5 = var6;
+}
+if (var5){
+var11 = NULL;
+var = var11;
 goto RET_LABEL;
 } else {
 }
-var5 = ((val* (*)(val*))(var_after->class->vft[COLOR_flow__FlowContext__previous]))(var_after) /* previous on <var_after:nullable FlowContext(FlowContext)>*/;
-var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__first]))(var5) /* first on <var5:Array[FlowContext]>*/;
-var = var6;
+{
+{ /* Inline flow#FlowContext#previous (var_after) on <var_after:nullable FlowContext(FlowContext)> */
+var14 = var_after->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <var_after:nullable FlowContext(FlowContext)> */
+if (unlikely(var14 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 192);
+show_backtrace(1);
+}
+var12 = var14;
+RET_LABEL13:(void)0;
+}
+}
+{
+var15 = abstract_collection__SequenceRead__first(var12);
+}
+var = var15;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1940,43 +2402,89 @@ void flow__AContinueExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AContinueExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AContinueExpr>*/;
-var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
+}
+{
+var = flow__FlowVisitor__make_unreachable_flow(var_v);
+}
 var;
 RET_LABEL:;
 }
 /* method flow#AContinueExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AContinueExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AContinueExpr__accept_flow_visitor(self, p0);
+flow__AContinueExpr__accept_flow_visitor(self, p0); /* Direct call flow#AContinueExpr#accept_flow_visitor on <self:Object(AContinueExpr)>*/
 RET_LABEL:;
 }
 /* method flow#ABreakExpr#before_flow_context for (self: ABreakExpr): nullable FlowContext */
 val* flow__ABreakExpr__before_flow_context(val* self) {
 val* var /* : nullable FlowContext */;
 val* var1 /* : nullable FlowContext */;
+val* var3 /* : nullable FlowContext */;
 val* var_after /* var after: nullable FlowContext */;
-val* var2 /* : null */;
-short int var3 /* : Bool */;
 val* var4 /* : null */;
-val* var5 /* : Array[FlowContext] */;
-val* var6 /* : nullable Object */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_flow__AExpr__after_flow_context]))(self) /* after_flow_context on <self:ABreakExpr>*/;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
+val* var11 /* : null */;
+val* var12 /* : Array[FlowContext] */;
+val* var14 /* : Array[FlowContext] */;
+val* var15 /* : nullable Object */;
+{
+{ /* Inline flow#AExpr#after_flow_context (self) on <self:ABreakExpr> */
+var3 = self->attrs[COLOR_flow__AExpr___after_flow_context].val; /* _after_flow_context on <self:ABreakExpr> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
 var_after = var1;
-var2 = NULL;
+var4 = NULL;
 if (var_after == NULL) {
-var3 = 1; /* is null */
+var5 = 1; /* is null */
 } else {
-var3 = 0; /* arg is null but recv is not */
+var5 = 0; /* arg is null but recv is not */
 }
-if (var3){
-var4 = NULL;
-var = var4;
+if (0) {
+{ /* Inline kernel#Object#== (var_after,var4) on <var_after:nullable FlowContext> */
+var_other = var4;
+{
+{ /* Inline kernel#Object#is_same_instance (var_after,var_other) on <var_after:nullable FlowContext(FlowContext)> */
+var10 = var_after == var_other;
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
+}
+}
+var6 = var8;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
+}
+var5 = var6;
+}
+if (var5){
+var11 = NULL;
+var = var11;
 goto RET_LABEL;
 } else {
 }
-var5 = ((val* (*)(val*))(var_after->class->vft[COLOR_flow__FlowContext__previous]))(var_after) /* previous on <var_after:nullable FlowContext(FlowContext)>*/;
-var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__first]))(var5) /* first on <var5:Array[FlowContext]>*/;
-var = var6;
+{
+{ /* Inline flow#FlowContext#previous (var_after) on <var_after:nullable FlowContext(FlowContext)> */
+var14 = var_after->attrs[COLOR_flow__FlowContext___previous].val; /* _previous on <var_after:nullable FlowContext(FlowContext)> */
+if (unlikely(var14 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _previous");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 192);
+show_backtrace(1);
+}
+var12 = var14;
+RET_LABEL13:(void)0;
+}
+}
+{
+var15 = abstract_collection__SequenceRead__first(var12);
+}
+var = var15;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1995,14 +2503,18 @@ void flow__ABreakExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__ABreakExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:ABreakExpr>*/;
-var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
+}
+{
+var = flow__FlowVisitor__make_unreachable_flow(var_v);
+}
 var;
 RET_LABEL:;
 }
 /* method flow#ABreakExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__ABreakExpr__accept_flow_visitor(val* self, val* p0) {
-flow__ABreakExpr__accept_flow_visitor(self, p0);
+flow__ABreakExpr__accept_flow_visitor(self, p0); /* Direct call flow#ABreakExpr#accept_flow_visitor on <self:Object(ABreakExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AAbortExpr#accept_flow_visitor for (self: AAbortExpr, FlowVisitor) */
@@ -2010,29 +2522,44 @@ void flow__AAbortExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AAbortExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AAbortExpr>*/;
-var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
+}
+{
+var = flow__FlowVisitor__make_unreachable_flow(var_v);
+}
 var;
 RET_LABEL:;
 }
 /* method flow#AAbortExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AAbortExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AAbortExpr__accept_flow_visitor(self, p0);
+flow__AAbortExpr__accept_flow_visitor(self, p0); /* Direct call flow#AAbortExpr#accept_flow_visitor on <self:Object(AAbortExpr)>*/
 RET_LABEL:;
 }
 /* method flow#ADoExpr#accept_flow_visitor for (self: ADoExpr, FlowVisitor) */
 void flow__ADoExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : nullable EscapeMark */;
+val* var2 /* : nullable EscapeMark */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__ADoExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:ADoExpr>*/;
-var = ((val* (*)(val*))(self->class->vft[COLOR_scope__ADoExpr__escapemark]))(self) /* escapemark on <self:ADoExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_breaks]))(var_v, var) /* merge_breaks on <var_v:FlowVisitor>*/;
+}
+{
+{ /* Inline scope#ADoExpr#escapemark (self) on <self:ADoExpr> */
+var2 = self->attrs[COLOR_scope__ADoExpr___escapemark].val; /* _escapemark on <self:ADoExpr> */
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+flow__FlowVisitor__merge_breaks(var_v, var); /* Direct call flow#FlowVisitor#merge_breaks on <var_v:FlowVisitor>*/
+}
 RET_LABEL:;
 }
 /* method flow#ADoExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__ADoExpr__accept_flow_visitor(val* self, val* p0) {
-flow__ADoExpr__accept_flow_visitor(self, p0);
+flow__ADoExpr__accept_flow_visitor(self, p0); /* Direct call flow#ADoExpr#accept_flow_visitor on <self:Object(ADoExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AIfExpr#accept_flow_visitor for (self: AIfExpr, FlowVisitor) */
@@ -2042,37 +2569,109 @@ val* var /* : AExpr */;
 val* var1 /* : FlowContext */;
 val* var_after_expr /* var after_expr: FlowContext */;
 val* var2 /* : FlowContext */;
-val* var3 /* : nullable AExpr */;
 val* var4 /* : FlowContext */;
-val* var_after_then /* var after_then: FlowContext */;
-val* var5 /* : FlowContext */;
 val* var6 /* : nullable AExpr */;
 val* var7 /* : FlowContext */;
+val* var9 /* : FlowContext */;
+val* var_after_then /* var after_then: FlowContext */;
+val* var10 /* : FlowContext */;
+val* var12 /* : FlowContext */;
+val* var14 /* : nullable AExpr */;
+val* var15 /* : FlowContext */;
+val* var17 /* : FlowContext */;
 val* var_after_else /* var after_else: FlowContext */;
-val* var8 /* : FlowContext */;
+val* var18 /* : FlowContext */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfExpr__n_expr]))(self) /* n_expr on <self:AIfExpr>*/;
-var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
+{
+var = parser_nodes__AIfExpr__n_expr(self);
+}
+{
+var1 = flow__FlowVisitor__visit_expr(var_v, var);
+}
 var_after_expr = var1;
-var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfExpr__n_then]))(self) /* n_then on <self:AIfExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var3) /* enter_visit on <var_v:FlowVisitor>*/;
-var4 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-var_after_then = var4;
-var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var5) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var6 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfExpr__n_else]))(self) /* n_else on <self:AIfExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var6) /* enter_visit on <var_v:FlowVisitor>*/;
-var7 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-var_after_else = var7;
-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>*/;
-var8;
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
+var4 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var2) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var2; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL5:(void)0;
+}
+}
+{
+var6 = parser_nodes__AIfExpr__n_then(self);
+}
+{
+parser_nodes__Visitor__enter_visit(var_v, var6); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var9 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var9 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var7 = var9;
+RET_LABEL8:(void)0;
+}
+}
+var_after_then = var7;
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
+var12 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var10) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var10; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL13:(void)0;
+}
+}
+{
+var14 = parser_nodes__AIfExpr__n_else(self);
+}
+{
+parser_nodes__Visitor__enter_visit(var_v, var14); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var17 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var15 = var17;
+RET_LABEL16:(void)0;
+}
+}
+var_after_else = var15;
+{
+var18 = flow__FlowVisitor__make_merge_flow(var_v, var_after_then, var_after_else);
+}
+var18;
 RET_LABEL:;
 }
 /* method flow#AIfExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AIfExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AIfExpr__accept_flow_visitor(self, p0);
+flow__AIfExpr__accept_flow_visitor(self, p0); /* Direct call flow#AIfExpr#accept_flow_visitor on <self:Object(AIfExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AIfexprExpr#accept_flow_visitor for (self: AIfexprExpr, FlowVisitor) */
@@ -2082,40 +2681,112 @@ val* var /* : AExpr */;
 val* var1 /* : FlowContext */;
 val* var_after_expr /* var after_expr: FlowContext */;
 val* var2 /* : FlowContext */;
-val* var3 /* : AExpr */;
 val* var4 /* : FlowContext */;
-val* var_after_then /* var after_then: FlowContext */;
-val* var5 /* : FlowContext */;
 val* var6 /* : AExpr */;
 val* var7 /* : FlowContext */;
+val* var9 /* : FlowContext */;
+val* var_after_then /* var after_then: FlowContext */;
+val* var10 /* : FlowContext */;
+val* var12 /* : FlowContext */;
+val* var14 /* : AExpr */;
+val* var15 /* : FlowContext */;
+val* var17 /* : FlowContext */;
 val* var_after_else /* var after_else: FlowContext */;
-val* var8 /* : FlowContext */;
+val* var18 /* : FlowContext */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfexprExpr__n_expr]))(self) /* n_expr on <self:AIfexprExpr>*/;
-var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
+{
+var = parser_nodes__AIfexprExpr__n_expr(self);
+}
+{
+var1 = flow__FlowVisitor__visit_expr(var_v, var);
+}
 var_after_expr = var1;
-var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfexprExpr__n_then]))(self) /* n_then on <self:AIfexprExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var3) /* enter_visit on <var_v:FlowVisitor>*/;
-var4 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-var_after_then = var4;
-var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var5) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var6 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AIfexprExpr__n_else]))(self) /* n_else on <self:AIfexprExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var6) /* enter_visit on <var_v:FlowVisitor>*/;
-var7 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-var_after_else = var7;
-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>*/;
-var8;
-RET_LABEL:;
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
+var4 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
 }
-/* method flow#AIfexprExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
-void VIRTUAL_flow__AIfexprExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AIfexprExpr__accept_flow_visitor(self, p0);
-RET_LABEL:;
+var2 = var4;
+RET_LABEL3:(void)0;
 }
-/* method flow#AWhileExpr#accept_flow_visitor for (self: AWhileExpr, FlowVisitor) */
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var2) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var2; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL5:(void)0;
+}
+}
+{
+var6 = parser_nodes__AIfexprExpr__n_then(self);
+}
+{
+parser_nodes__Visitor__enter_visit(var_v, var6); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var9 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var9 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var7 = var9;
+RET_LABEL8:(void)0;
+}
+}
+var_after_then = var7;
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
+var12 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var10) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var10; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL13:(void)0;
+}
+}
+{
+var14 = parser_nodes__AIfexprExpr__n_else(self);
+}
+{
+parser_nodes__Visitor__enter_visit(var_v, var14); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var17 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var15 = var17;
+RET_LABEL16:(void)0;
+}
+}
+var_after_else = var15;
+{
+var18 = flow__FlowVisitor__make_merge_flow(var_v, var_after_then, var_after_else);
+}
+var18;
+RET_LABEL:;
+}
+/* method flow#AIfexprExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
+void VIRTUAL_flow__AIfexprExpr__accept_flow_visitor(val* self, val* p0) {
+flow__AIfexprExpr__accept_flow_visitor(self, p0); /* Direct call flow#AIfexprExpr#accept_flow_visitor on <self:Object(AIfexprExpr)>*/
+RET_LABEL:;
+}
+/* method flow#AWhileExpr#accept_flow_visitor for (self: AWhileExpr, FlowVisitor) */
 void flow__AWhileExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
@@ -2124,36 +2795,112 @@ val* var1 /* : AExpr */;
 val* var2 /* : FlowContext */;
 val* var_after_expr /* var after_expr: FlowContext */;
 val* var3 /* : FlowContext */;
-val* var4 /* : nullable AExpr */;
 val* var5 /* : FlowContext */;
+val* var7 /* : nullable AExpr */;
+val* var8 /* : FlowContext */;
+val* var10 /* : FlowContext */;
 val* var_after_block /* var after_block: FlowContext */;
-val* var6 /* : nullable EscapeMark */;
-val* var7 /* : FlowContext */;
-val* var8 /* : nullable EscapeMark */;
+val* var11 /* : nullable EscapeMark */;
+val* var13 /* : nullable EscapeMark */;
+val* var14 /* : FlowContext */;
+val* var16 /* : FlowContext */;
+val* var18 /* : nullable EscapeMark */;
+val* var20 /* : nullable EscapeMark */;
 var_v = p0;
-var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
+{
+var = flow__FlowVisitor__make_sub_flow(var_v);
+}
 var_before_loop = var;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AWhileExpr__n_expr]))(self) /* n_expr on <self:AWhileExpr>*/;
-var2 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var1) /* visit_expr on <var_v:FlowVisitor>*/;
+{
+var1 = parser_nodes__AWhileExpr__n_expr(self);
+}
+{
+var2 = flow__FlowVisitor__visit_expr(var_v, var1);
+}
 var_after_expr = var2;
-var3 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var3) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var4 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AWhileExpr__n_block]))(self) /* n_block on <self:AWhileExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var4) /* enter_visit on <var_v:FlowVisitor>*/;
-var5 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-var_after_block = var5;
-((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>*/;
-var6 = ((val* (*)(val*))(self->class->vft[COLOR_scope__AWhileExpr__escapemark]))(self) /* escapemark on <self:AWhileExpr>*/;
-((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>*/;
-var7 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var7) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var8 = ((val* (*)(val*))(self->class->vft[COLOR_scope__AWhileExpr__escapemark]))(self) /* escapemark on <self:AWhileExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_breaks]))(var_v, var8) /* merge_breaks on <var_v:FlowVisitor>*/;
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
+var5 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var3) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var3; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL6:(void)0;
+}
+}
+{
+var7 = parser_nodes__AWhileExpr__n_block(self);
+}
+{
+parser_nodes__Visitor__enter_visit(var_v, var7); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var10 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+var_after_block = var8;
+{
+flow__FlowContext__add_loop(var_before_loop, var_after_block); /* Direct call flow#FlowContext#add_loop on <var_before_loop:FlowContext>*/
+}
+{
+{ /* Inline scope#AWhileExpr#escapemark (self) on <self:AWhileExpr> */
+var13 = self->attrs[COLOR_scope__AWhileExpr___escapemark].val; /* _escapemark on <self:AWhileExpr> */
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+{
+flow__FlowVisitor__merge_continues_to(var_v, var_after_block, var11); /* Direct call flow#FlowVisitor#merge_continues_to on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
+var16 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
+if (unlikely(var16 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var14 = var16;
+RET_LABEL15:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var14) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var14; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL17:(void)0;
+}
+}
+{
+{ /* Inline scope#AWhileExpr#escapemark (self) on <self:AWhileExpr> */
+var20 = self->attrs[COLOR_scope__AWhileExpr___escapemark].val; /* _escapemark on <self:AWhileExpr> */
+var18 = var20;
+RET_LABEL19:(void)0;
+}
+}
+{
+flow__FlowVisitor__merge_breaks(var_v, var18); /* Direct call flow#FlowVisitor#merge_breaks on <var_v:FlowVisitor>*/
+}
 RET_LABEL:;
 }
 /* method flow#AWhileExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AWhileExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AWhileExpr__accept_flow_visitor(self, p0);
+flow__AWhileExpr__accept_flow_visitor(self, p0); /* Direct call flow#AWhileExpr#accept_flow_visitor on <self:Object(AWhileExpr)>*/
 RET_LABEL:;
 }
 /* method flow#ALoopExpr#accept_flow_visitor for (self: ALoopExpr, FlowVisitor) */
@@ -2163,29 +2910,69 @@ val* var /* : FlowContext */;
 val* var_before_loop /* var before_loop: FlowContext */;
 val* var1 /* : nullable AExpr */;
 val* var2 /* : FlowContext */;
-val* var_after_block /* var after_block: FlowContext */;
-val* var3 /* : nullable EscapeMark */;
 val* var4 /* : FlowContext */;
+val* var_after_block /* var after_block: FlowContext */;
 val* var5 /* : nullable EscapeMark */;
+val* var7 /* : nullable EscapeMark */;
+val* var8 /* : FlowContext */;
+val* var9 /* : nullable EscapeMark */;
+val* var11 /* : nullable EscapeMark */;
 var_v = p0;
-var = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
+{
+var = flow__FlowVisitor__make_sub_flow(var_v);
+}
 var_before_loop = var;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__ALoopExpr__n_block]))(self) /* n_block on <self:ALoopExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var1) /* enter_visit on <var_v:FlowVisitor>*/;
-var2 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
+{
+var1 = parser_nodes__ALoopExpr__n_block(self);
+}
+{
+parser_nodes__Visitor__enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var4 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
 var_after_block = var2;
-((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>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_scope__ALoopExpr__escapemark]))(self) /* escapemark on <self:ALoopExpr>*/;
-((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>*/;
-var4 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_unreachable_flow]))(var_v) /* make_unreachable_flow on <var_v:FlowVisitor>*/;
-var4;
-var5 = ((val* (*)(val*))(self->class->vft[COLOR_scope__ALoopExpr__escapemark]))(self) /* escapemark on <self:ALoopExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_breaks]))(var_v, var5) /* merge_breaks on <var_v:FlowVisitor>*/;
+{
+flow__FlowContext__add_loop(var_before_loop, var_after_block); /* Direct call flow#FlowContext#add_loop on <var_before_loop:FlowContext>*/
+}
+{
+{ /* Inline scope#ALoopExpr#escapemark (self) on <self:ALoopExpr> */
+var7 = self->attrs[COLOR_scope__ALoopExpr___escapemark].val; /* _escapemark on <self:ALoopExpr> */
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+flow__FlowVisitor__merge_continues_to(var_v, var_after_block, var5); /* Direct call flow#FlowVisitor#merge_continues_to on <var_v:FlowVisitor>*/
+}
+{
+var8 = flow__FlowVisitor__make_unreachable_flow(var_v);
+}
+var8;
+{
+{ /* Inline scope#ALoopExpr#escapemark (self) on <self:ALoopExpr> */
+var11 = self->attrs[COLOR_scope__ALoopExpr___escapemark].val; /* _escapemark on <self:ALoopExpr> */
+var9 = var11;
+RET_LABEL10:(void)0;
+}
+}
+{
+flow__FlowVisitor__merge_breaks(var_v, var9); /* Direct call flow#FlowVisitor#merge_breaks on <var_v:FlowVisitor>*/
+}
 RET_LABEL:;
 }
 /* method flow#ALoopExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__ALoopExpr__accept_flow_visitor(val* self, val* p0) {
-flow__ALoopExpr__accept_flow_visitor(self, p0);
+flow__ALoopExpr__accept_flow_visitor(self, p0); /* Direct call flow#ALoopExpr#accept_flow_visitor on <self:Object(ALoopExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AForExpr#accept_flow_visitor for (self: AForExpr, FlowVisitor) */
@@ -2196,33 +2983,89 @@ val* var1 /* : FlowContext */;
 val* var_before_loop /* var before_loop: FlowContext */;
 val* var2 /* : nullable AExpr */;
 val* var3 /* : FlowContext */;
-val* var_after_block /* var after_block: FlowContext */;
-val* var4 /* : nullable EscapeMark */;
 val* var5 /* : FlowContext */;
-val* var6 /* : FlowContext */;
-val* var7 /* : nullable EscapeMark */;
+val* var_after_block /* var after_block: FlowContext */;
+val* var6 /* : nullable EscapeMark */;
+val* var8 /* : nullable EscapeMark */;
+val* var9 /* : FlowContext */;
+val* var11 /* : FlowContext */;
+val* var12 /* : FlowContext */;
+val* var13 /* : nullable EscapeMark */;
+val* var15 /* : nullable EscapeMark */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AForExpr__n_expr]))(self) /* n_expr on <self:AForExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var) /* enter_visit on <var_v:FlowVisitor>*/;
-var1 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__make_sub_flow]))(var_v) /* make_sub_flow on <var_v:FlowVisitor>*/;
+{
+var = parser_nodes__AForExpr__n_expr(self);
+}
+{
+parser_nodes__Visitor__enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
+{
+var1 = flow__FlowVisitor__make_sub_flow(var_v);
+}
 var_before_loop = var1;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AForExpr__n_block]))(self) /* n_block on <self:AForExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var2) /* enter_visit on <var_v:FlowVisitor>*/;
-var3 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
+{
+var2 = parser_nodes__AForExpr__n_block(self);
+}
+{
+parser_nodes__Visitor__enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var5 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
 var_after_block = var3;
-((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>*/;
-var4 = ((val* (*)(val*))(self->class->vft[COLOR_scope__AForExpr__escapemark]))(self) /* escapemark on <self:AForExpr>*/;
-((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>*/;
-var5 = ((val* (*)(val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context]))(var_v) /* current_flow_context on <var_v:FlowVisitor>*/;
-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>*/;
-var6;
-var7 = ((val* (*)(val*))(self->class->vft[COLOR_scope__AForExpr__escapemark]))(self) /* escapemark on <self:AForExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__merge_breaks]))(var_v, var7) /* merge_breaks on <var_v:FlowVisitor>*/;
+{
+flow__FlowContext__add_loop(var_before_loop, var_after_block); /* Direct call flow#FlowContext#add_loop on <var_before_loop:FlowContext>*/
+}
+{
+{ /* Inline scope#AForExpr#escapemark (self) on <self:AForExpr> */
+var8 = self->attrs[COLOR_scope__AForExpr___escapemark].val; /* _escapemark on <self:AForExpr> */
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+flow__FlowVisitor__merge_continues_to(var_v, var_after_block, var6); /* Direct call flow#FlowVisitor#merge_continues_to on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context (var_v) on <var_v:FlowVisitor> */
+var11 = var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val; /* _current_flow_context on <var_v:FlowVisitor> */
+if (unlikely(var11 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _current_flow_context");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 39);
+show_backtrace(1);
+}
+var9 = var11;
+RET_LABEL10:(void)0;
+}
+}
+{
+var12 = flow__FlowVisitor__make_merge_flow(var_v, var9, var_before_loop);
+}
+var12;
+{
+{ /* Inline scope#AForExpr#escapemark (self) on <self:AForExpr> */
+var15 = self->attrs[COLOR_scope__AForExpr___escapemark].val; /* _escapemark on <self:AForExpr> */
+var13 = var15;
+RET_LABEL14:(void)0;
+}
+}
+{
+flow__FlowVisitor__merge_breaks(var_v, var13); /* Direct call flow#FlowVisitor#merge_breaks on <var_v:FlowVisitor>*/
+}
 RET_LABEL:;
 }
 /* method flow#AForExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AForExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AForExpr__accept_flow_visitor(self, p0);
+flow__AForExpr__accept_flow_visitor(self, p0); /* Direct call flow#AForExpr#accept_flow_visitor on <self:Object(AForExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AAssertExpr#accept_flow_visitor for (self: AAssertExpr, FlowVisitor) */
@@ -2232,23 +3075,65 @@ val* var /* : AExpr */;
 val* var1 /* : FlowContext */;
 val* var_after_expr /* var after_expr: FlowContext */;
 val* var2 /* : FlowContext */;
-val* var3 /* : nullable AExpr */;
 val* var4 /* : FlowContext */;
+val* var6 /* : nullable AExpr */;
+val* var7 /* : FlowContext */;
+val* var9 /* : FlowContext */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AAssertExpr__n_expr]))(self) /* n_expr on <self:AAssertExpr>*/;
-var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
+{
+var = parser_nodes__AAssertExpr__n_expr(self);
+}
+{
+var1 = flow__FlowVisitor__visit_expr(var_v, var);
+}
 var_after_expr = var1;
-var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AAssertExpr__n_else]))(self) /* n_else on <self:AAssertExpr>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_parser_nodes__Visitor__enter_visit]))(var_v, var3) /* enter_visit on <var_v:FlowVisitor>*/;
-var4 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var4) /* current_flow_context= on <var_v:FlowVisitor>*/;
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
+var4 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var2) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var2; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL5:(void)0;
+}
+}
+{
+var6 = parser_nodes__AAssertExpr__n_else(self);
+}
+{
+parser_nodes__Visitor__enter_visit(var_v, var6); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:FlowVisitor>*/
+}
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
+var9 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
+if (unlikely(var9 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var7 = var9;
+RET_LABEL8:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var7) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var7; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL10:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method flow#AAssertExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AAssertExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AAssertExpr__accept_flow_visitor(self, p0);
+flow__AAssertExpr__accept_flow_visitor(self, p0); /* Direct call flow#AAssertExpr#accept_flow_visitor on <self:Object(AAssertExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AOrExpr#accept_flow_visitor for (self: AOrExpr, FlowVisitor) */
@@ -2258,51 +3143,121 @@ val* var /* : AExpr */;
 val* var1 /* : FlowContext */;
 val* var_after_expr /* var after_expr: FlowContext */;
 val* var2 /* : FlowContext */;
-val* var3 /* : AExpr */;
 val* var4 /* : FlowContext */;
-val* var_after_expr2 /* var after_expr2: FlowContext */;
-val* var5 /* : FlowContext */;
-val* var6 /* : FlowContext */;
+val* var6 /* : AExpr */;
 val* var7 /* : FlowContext */;
+val* var_after_expr2 /* var after_expr2: FlowContext */;
+val* var8 /* : FlowContext */;
+val* var10 /* : FlowContext */;
+val* var11 /* : FlowContext */;
+val* var13 /* : FlowContext */;
+val* var14 /* : FlowContext */;
 val* var_merge_true /* var merge_true: FlowContext */;
 static val* varonce;
-val* var8 /* : String */;
-char* var9 /* : NativeString */;
-long var10 /* : Int */;
-val* var11 /* : String */;
-val* var12 /* : FlowContext */;
-val* var13 /* : FlowContext */;
+val* var15 /* : String */;
+char* var16 /* : NativeString */;
+long var17 /* : Int */;
+val* var18 /* : FlatString */;
+val* var20 /* : FlowContext */;
+val* var22 /* : FlowContext */;
+val* var23 /* : FlowContext */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AOrExpr__n_expr]))(self) /* n_expr on <self:AOrExpr>*/;
-var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
+{
+var = parser_nodes__AOrExpr__n_expr(self);
+}
+{
+var1 = flow__FlowVisitor__visit_expr(var_v, var);
+}
 var_after_expr = var1;
-var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AOrExpr__n_expr2]))(self) /* n_expr2 on <self:AOrExpr>*/;
-var4 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var3) /* visit_expr on <var_v:FlowVisitor>*/;
-var_after_expr2 = var4;
-var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
-var6 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr2) /* when_true on <var_after_expr2:FlowContext>*/;
-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>*/;
-var_merge_true = var7;
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
+var4 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var2) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var2; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL5:(void)0;
+}
+}
+{
+var6 = parser_nodes__AOrExpr__n_expr2(self);
+}
+{
+var7 = flow__FlowVisitor__visit_expr(var_v, var6);
+}
+var_after_expr2 = var7;
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
+var10 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr2) on <var_after_expr2:FlowContext> */
+var13 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr2:FlowContext> */
+if (unlikely(var13 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+{
+var14 = flow__FlowVisitor__make_merge_flow(var_v, var8, var11);
+}
+var_merge_true = var14;
 if (varonce) {
-var8 = varonce;
+var15 = varonce;
 } else {
-var9 = "OR TRUE";
-var10 = 7;
-var11 = string__NativeString__to_s_with_length(var9, var10);
-var8 = var11;
-varonce = var8;
+var16 = "OR TRUE";
+var17 = 7;
+var18 = string__NativeString__to_s_with_length(var16, var17);
+var15 = var18;
+varonce = var15;
+}
+{
+{ /* Inline flow#FlowContext#name= (var_merge_true,var15) on <var_merge_true:FlowContext> */
+var_merge_true->attrs[COLOR_flow__FlowContext___name].val = var15; /* _name on <var_merge_true:FlowContext> */
+RET_LABEL19:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr2) on <var_after_expr2:FlowContext> */
+var22 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr2:FlowContext> */
+if (unlikely(var22 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var20 = var22;
+RET_LABEL21:(void)0;
+}
 }
-((void (*)(val*, val*))(var_merge_true->class->vft[COLOR_flow__FlowContext__name_61d]))(var_merge_true, var8) /* name= on <var_merge_true:FlowContext>*/;
-var12 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr2) /* when_false on <var_after_expr2:FlowContext>*/;
-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>*/;
-var13;
+{
+var23 = flow__FlowVisitor__make_true_false_flow(var_v, var_merge_true, var20);
+}
+var23;
 RET_LABEL:;
 }
 /* method flow#AOrExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AOrExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AOrExpr__accept_flow_visitor(self, p0);
+flow__AOrExpr__accept_flow_visitor(self, p0); /* Direct call flow#AOrExpr#accept_flow_visitor on <self:Object(AOrExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AImpliesExpr#accept_flow_visitor for (self: AImpliesExpr, FlowVisitor) */
@@ -2312,51 +3267,121 @@ val* var /* : AExpr */;
 val* var1 /* : FlowContext */;
 val* var_after_expr /* var after_expr: FlowContext */;
 val* var2 /* : FlowContext */;
-val* var3 /* : AExpr */;
 val* var4 /* : FlowContext */;
-val* var_after_expr2 /* var after_expr2: FlowContext */;
-val* var5 /* : FlowContext */;
-val* var6 /* : FlowContext */;
+val* var6 /* : AExpr */;
 val* var7 /* : FlowContext */;
+val* var_after_expr2 /* var after_expr2: FlowContext */;
+val* var8 /* : FlowContext */;
+val* var10 /* : FlowContext */;
+val* var11 /* : FlowContext */;
+val* var13 /* : FlowContext */;
+val* var14 /* : FlowContext */;
 val* var_merge_true /* var merge_true: FlowContext */;
 static val* varonce;
-val* var8 /* : String */;
-char* var9 /* : NativeString */;
-long var10 /* : Int */;
-val* var11 /* : String */;
-val* var12 /* : FlowContext */;
-val* var13 /* : FlowContext */;
+val* var15 /* : String */;
+char* var16 /* : NativeString */;
+long var17 /* : Int */;
+val* var18 /* : FlatString */;
+val* var20 /* : FlowContext */;
+val* var22 /* : FlowContext */;
+val* var23 /* : FlowContext */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AImpliesExpr__n_expr]))(self) /* n_expr on <self:AImpliesExpr>*/;
-var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
+{
+var = parser_nodes__AImpliesExpr__n_expr(self);
+}
+{
+var1 = flow__FlowVisitor__visit_expr(var_v, var);
+}
 var_after_expr = var1;
-var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AImpliesExpr__n_expr2]))(self) /* n_expr2 on <self:AImpliesExpr>*/;
-var4 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var3) /* visit_expr on <var_v:FlowVisitor>*/;
-var_after_expr2 = var4;
-var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
-var6 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr2) /* when_true on <var_after_expr2:FlowContext>*/;
-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>*/;
-var_merge_true = var7;
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
+var4 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var2) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var2; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL5:(void)0;
+}
+}
+{
+var6 = parser_nodes__AImpliesExpr__n_expr2(self);
+}
+{
+var7 = flow__FlowVisitor__visit_expr(var_v, var6);
+}
+var_after_expr2 = var7;
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
+var10 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr2) on <var_after_expr2:FlowContext> */
+var13 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr2:FlowContext> */
+if (unlikely(var13 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+{
+var14 = flow__FlowVisitor__make_merge_flow(var_v, var8, var11);
+}
+var_merge_true = var14;
 if (varonce) {
-var8 = varonce;
+var15 = varonce;
 } else {
-var9 = "OR TRUE";
-var10 = 7;
-var11 = string__NativeString__to_s_with_length(var9, var10);
-var8 = var11;
-varonce = var8;
+var16 = "OR TRUE";
+var17 = 7;
+var18 = string__NativeString__to_s_with_length(var16, var17);
+var15 = var18;
+varonce = var15;
+}
+{
+{ /* Inline flow#FlowContext#name= (var_merge_true,var15) on <var_merge_true:FlowContext> */
+var_merge_true->attrs[COLOR_flow__FlowContext___name].val = var15; /* _name on <var_merge_true:FlowContext> */
+RET_LABEL19:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr2) on <var_after_expr2:FlowContext> */
+var22 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr2:FlowContext> */
+if (unlikely(var22 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var20 = var22;
+RET_LABEL21:(void)0;
+}
 }
-((void (*)(val*, val*))(var_merge_true->class->vft[COLOR_flow__FlowContext__name_61d]))(var_merge_true, var8) /* name= on <var_merge_true:FlowContext>*/;
-var12 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr2) /* when_false on <var_after_expr2:FlowContext>*/;
-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>*/;
-var13;
+{
+var23 = flow__FlowVisitor__make_true_false_flow(var_v, var_merge_true, var20);
+}
+var23;
 RET_LABEL:;
 }
 /* method flow#AImpliesExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AImpliesExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AImpliesExpr__accept_flow_visitor(self, p0);
+flow__AImpliesExpr__accept_flow_visitor(self, p0); /* Direct call flow#AImpliesExpr#accept_flow_visitor on <self:Object(AImpliesExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AAndExpr#accept_flow_visitor for (self: AAndExpr, FlowVisitor) */
@@ -2366,51 +3391,121 @@ val* var /* : AExpr */;
 val* var1 /* : FlowContext */;
 val* var_after_expr /* var after_expr: FlowContext */;
 val* var2 /* : FlowContext */;
-val* var3 /* : AExpr */;
 val* var4 /* : FlowContext */;
-val* var_after_expr2 /* var after_expr2: FlowContext */;
-val* var5 /* : FlowContext */;
-val* var6 /* : FlowContext */;
+val* var6 /* : AExpr */;
 val* var7 /* : FlowContext */;
+val* var_after_expr2 /* var after_expr2: FlowContext */;
+val* var8 /* : FlowContext */;
+val* var10 /* : FlowContext */;
+val* var11 /* : FlowContext */;
+val* var13 /* : FlowContext */;
+val* var14 /* : FlowContext */;
 val* var_merge_false /* var merge_false: FlowContext */;
 static val* varonce;
-val* var8 /* : String */;
-char* var9 /* : NativeString */;
-long var10 /* : Int */;
-val* var11 /* : String */;
-val* var12 /* : FlowContext */;
-val* var13 /* : FlowContext */;
+val* var15 /* : String */;
+char* var16 /* : NativeString */;
+long var17 /* : Int */;
+val* var18 /* : FlatString */;
+val* var20 /* : FlowContext */;
+val* var22 /* : FlowContext */;
+val* var23 /* : FlowContext */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AAndExpr__n_expr]))(self) /* n_expr on <self:AAndExpr>*/;
-var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
+{
+var = parser_nodes__AAndExpr__n_expr(self);
+}
+{
+var1 = flow__FlowVisitor__visit_expr(var_v, var);
+}
 var_after_expr = var1;
-var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
-((void (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__current_flow_context_61d]))(var_v, var2) /* current_flow_context= on <var_v:FlowVisitor>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AAndExpr__n_expr2]))(self) /* n_expr2 on <self:AAndExpr>*/;
-var4 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var3) /* visit_expr on <var_v:FlowVisitor>*/;
-var_after_expr2 = var4;
-var5 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
-var6 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr2) /* when_false on <var_after_expr2:FlowContext>*/;
-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>*/;
-var_merge_false = var7;
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
+var4 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var2) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var2; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL5:(void)0;
+}
+}
+{
+var6 = parser_nodes__AAndExpr__n_expr2(self);
+}
+{
+var7 = flow__FlowVisitor__visit_expr(var_v, var6);
+}
+var_after_expr2 = var7;
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
+var10 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr2) on <var_after_expr2:FlowContext> */
+var13 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr2:FlowContext> */
+if (unlikely(var13 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+{
+var14 = flow__FlowVisitor__make_merge_flow(var_v, var8, var11);
+}
+var_merge_false = var14;
 if (varonce) {
-var8 = varonce;
+var15 = varonce;
 } else {
-var9 = "AND FALSE";
-var10 = 9;
-var11 = string__NativeString__to_s_with_length(var9, var10);
-var8 = var11;
-varonce = var8;
+var16 = "AND FALSE";
+var17 = 9;
+var18 = string__NativeString__to_s_with_length(var16, var17);
+var15 = var18;
+varonce = var15;
+}
+{
+{ /* Inline flow#FlowContext#name= (var_merge_false,var15) on <var_merge_false:FlowContext> */
+var_merge_false->attrs[COLOR_flow__FlowContext___name].val = var15; /* _name on <var_merge_false:FlowContext> */
+RET_LABEL19:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr2) on <var_after_expr2:FlowContext> */
+var22 = var_after_expr2->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr2:FlowContext> */
+if (unlikely(var22 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var20 = var22;
+RET_LABEL21:(void)0;
+}
+}
+{
+var23 = flow__FlowVisitor__make_true_false_flow(var_v, var20, var_merge_false);
 }
-((void (*)(val*, val*))(var_merge_false->class->vft[COLOR_flow__FlowContext__name_61d]))(var_merge_false, var8) /* name= on <var_merge_false:FlowContext>*/;
-var12 = ((val* (*)(val*))(var_after_expr2->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr2) /* when_true on <var_after_expr2:FlowContext>*/;
-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>*/;
-var13;
+var23;
 RET_LABEL:;
 }
 /* method flow#AAndExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AAndExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AAndExpr__accept_flow_visitor(self, p0);
+flow__AAndExpr__accept_flow_visitor(self, p0); /* Direct call flow#AAndExpr#accept_flow_visitor on <self:Object(AAndExpr)>*/
 RET_LABEL:;
 }
 /* method flow#ANotExpr#accept_flow_visitor for (self: ANotExpr, FlowVisitor) */
@@ -2420,33 +3515,65 @@ val* var /* : AExpr */;
 val* var1 /* : FlowContext */;
 val* var_after_expr /* var after_expr: FlowContext */;
 val* var2 /* : FlowContext */;
-val* var3 /* : FlowContext */;
 val* var4 /* : FlowContext */;
+val* var5 /* : FlowContext */;
+val* var7 /* : FlowContext */;
+val* var8 /* : FlowContext */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__ANotExpr__n_expr]))(self) /* n_expr on <self:ANotExpr>*/;
-var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
+{
+var = parser_nodes__ANotExpr__n_expr(self);
+}
+{
+var1 = flow__FlowVisitor__visit_expr(var_v, var);
+}
 var_after_expr = var1;
-var2 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_false]))(var_after_expr) /* when_false on <var_after_expr:FlowContext>*/;
-var3 = ((val* (*)(val*))(var_after_expr->class->vft[COLOR_flow__FlowContext__when_true]))(var_after_expr) /* when_true on <var_after_expr:FlowContext>*/;
-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>*/;
-var4;
+{
+{ /* Inline flow#FlowContext#when_false (var_after_expr) on <var_after_expr:FlowContext> */
+var4 = var_after_expr->attrs[COLOR_flow__FlowContext___when_false].val; /* _when_false on <var_after_expr:FlowContext> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_false");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 231);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline flow#FlowContext#when_true (var_after_expr) on <var_after_expr:FlowContext> */
+var7 = var_after_expr->attrs[COLOR_flow__FlowContext___when_true].val; /* _when_true on <var_after_expr:FlowContext> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", "src/flow.nit", 228);
+show_backtrace(1);
+}
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+var8 = flow__FlowVisitor__make_true_false_flow(var_v, var2, var5);
+}
+var8;
 RET_LABEL:;
 }
 /* method flow#ANotExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__ANotExpr__accept_flow_visitor(val* self, val* p0) {
-flow__ANotExpr__accept_flow_visitor(self, p0);
+flow__ANotExpr__accept_flow_visitor(self, p0); /* Direct call flow#ANotExpr#accept_flow_visitor on <self:Object(ANotExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AOrElseExpr#accept_flow_visitor for (self: AOrElseExpr, FlowVisitor) */
 void flow__AOrElseExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AOrElseExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AOrElseExpr>*/;
+}
 RET_LABEL:;
 }
 /* method flow#AOrElseExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AOrElseExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AOrElseExpr__accept_flow_visitor(self, p0);
+flow__AOrElseExpr__accept_flow_visitor(self, p0); /* Direct call flow#AOrElseExpr#accept_flow_visitor on <self:Object(AOrElseExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AEqExpr#accept_flow_visitor for (self: AEqExpr, FlowVisitor) */
@@ -2454,14 +3581,18 @@ void flow__AEqExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AEqExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AEqExpr>*/;
-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>*/;
+}
+{
+var = flow__FlowVisitor__make_sub_true_false_flow(var_v);
+}
 var;
 RET_LABEL:;
 }
 /* method flow#AEqExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AEqExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AEqExpr__accept_flow_visitor(self, p0);
+flow__AEqExpr__accept_flow_visitor(self, p0); /* Direct call flow#AEqExpr#accept_flow_visitor on <self:Object(AEqExpr)>*/
 RET_LABEL:;
 }
 /* method flow#ANeExpr#accept_flow_visitor for (self: ANeExpr, FlowVisitor) */
@@ -2469,14 +3600,18 @@ void flow__ANeExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__ANeExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:ANeExpr>*/;
-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>*/;
+}
+{
+var = flow__FlowVisitor__make_sub_true_false_flow(var_v);
+}
 var;
 RET_LABEL:;
 }
 /* method flow#ANeExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__ANeExpr__accept_flow_visitor(val* self, val* p0) {
-flow__ANeExpr__accept_flow_visitor(self, p0);
+flow__ANeExpr__accept_flow_visitor(self, p0); /* Direct call flow#ANeExpr#accept_flow_visitor on <self:Object(ANeExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AIsaExpr#accept_flow_visitor for (self: AIsaExpr, FlowVisitor) */
@@ -2484,14 +3619,18 @@ void flow__AIsaExpr__accept_flow_visitor(val* self, val* p0) {
 val* var_v /* var v: FlowVisitor */;
 val* var /* : FlowContext */;
 var_v = p0;
+{
 ((void (*)(val*, val*))(self->class->vft[COLOR_flow__AIsaExpr__accept_flow_visitor]))(self, p0) /* accept_flow_visitor on <self:AIsaExpr>*/;
-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>*/;
+}
+{
+var = flow__FlowVisitor__make_sub_true_false_flow(var_v);
+}
 var;
 RET_LABEL:;
 }
 /* method flow#AIsaExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AIsaExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AIsaExpr__accept_flow_visitor(self, p0);
+flow__AIsaExpr__accept_flow_visitor(self, p0); /* Direct call flow#AIsaExpr#accept_flow_visitor on <self:Object(AIsaExpr)>*/
 RET_LABEL:;
 }
 /* method flow#AProxyExpr#accept_flow_visitor for (self: AProxyExpr, FlowVisitor) */
@@ -2501,14 +3640,23 @@ val* var /* : AExpr */;
 val* var1 /* : FlowContext */;
 val* var_after_expr /* var after_expr: FlowContext */;
 var_v = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AProxyExpr__n_expr]))(self) /* n_expr on <self:AProxyExpr>*/;
-var1 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_flow__FlowVisitor__visit_expr]))(var_v, var) /* visit_expr on <var_v:FlowVisitor>*/;
+{
+var = parser_nodes__AProxyExpr__n_expr(self);
+}
+{
+var1 = flow__FlowVisitor__visit_expr(var_v, var);
+}
 var_after_expr = var1;
-((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>*/;
+{
+{ /* Inline flow#FlowVisitor#current_flow_context= (var_v,var_after_expr) on <var_v:FlowVisitor> */
+var_v->attrs[COLOR_flow__FlowVisitor___current_flow_context].val = var_after_expr; /* _current_flow_context on <var_v:FlowVisitor> */
+RET_LABEL2:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method flow#AProxyExpr#accept_flow_visitor for (self: Object, FlowVisitor) */
 void VIRTUAL_flow__AProxyExpr__accept_flow_visitor(val* self, val* p0) {
-flow__AProxyExpr__accept_flow_visitor(self, p0);
+flow__AProxyExpr__accept_flow_visitor(self, p0); /* Direct call flow#AProxyExpr#accept_flow_visitor on <self:Object(AProxyExpr)>*/
 RET_LABEL:;
 }