doc: update Makefile to run nitdoc with extended options
[nit.git] / c_src / parser___parser_prod._sep.c
index 51520cc..7ed2314 100644 (file)
@@ -1,5 +1,6 @@
 /* This C file is generated by NIT to compile module parser___parser_prod. */
 #include "parser___parser_prod._sep.h"
+static const char LOCATE_parser___parser_prod___ANode___parent[] = "parser_prod::ANode::parent";
 val_t parser___parser_prod___ANode___parent(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
@@ -9,13 +10,15 @@ val_t parser___parser_prod___ANode___parent(val_t p0){
   fra.me.meth = LOCATE_parser___parser_prod___ANode___parent;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:10 */
+  /* parser/parser_prod.nit:10 */
   fra.me.REG[0] = ATTR_parser___parser_prod___ANode____parent(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
+static const char LOCATE_parser___parser_prod___ANode___parent__eq[] = "parser_prod::ANode::parent=";
 void parser___parser_prod___ANode___parent__eq(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
@@ -25,15 +28,17 @@ void parser___parser_prod___ANode___parent__eq(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___parser_prod___ANode___parent__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:10 */
+  /* parser/parser_prod.nit:10 */
   ATTR_parser___parser_prod___ANode____parent(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANode___remove_child[] = "parser_prod::ANode::remove_child";
 void parser___parser_prod___ANode___remove_child(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
@@ -43,15 +48,17 @@ void parser___parser_prod___ANode___remove_child(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___parser_prod___ANode___remove_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:16 */
+  /* parser/parser_prod.nit:16 */
   CALL_parser___parser_prod___ANode___replace_child(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], NIT_NULL);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANode___replace_child[] = "parser_prod::ANode::replace_child";
 void parser___parser_prod___ANode___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
@@ -61,11 +68,13 @@ void parser___parser_prod___ANode___replace_child(val_t p0, val_t p1, val_t p2){
   fra.me.meth = LOCATE_parser___parser_prod___ANode___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser_prod.nit:19 */
+  fra.me.nitni_local_ref_head = NULL;
+  /* parser/parser_prod.nit:19 */
   nit_abort("Deferred method called", NULL, LOCATE_parser___parser_prod, 19);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANode___replace_with[] = "parser_prod::ANode::replace_with";
 void parser___parser_prod___ANode___replace_with(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
@@ -77,19 +86,20 @@ void parser___parser_prod___ANode___replace_with(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___parser_prod___ANode___replace_with;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:25 */
+  /* parser/parser_prod.nit:25 */
   fra.me.REG[2] = ATTR_parser___parser_prod___ANode____parent(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -98,7 +108,7 @@ void parser___parser_prod___ANode___replace_with(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:26 */
+    /* parser/parser_prod.nit:26 */
     fra.me.REG[2] = ATTR_parser___parser_prod___ANode____parent(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
@@ -109,6 +119,7 @@ void parser___parser_prod___ANode___replace_with(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANode___visit_all[] = "parser_prod::ANode::visit_all";
 void parser___parser_prod___ANode___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
@@ -118,11 +129,13 @@ void parser___parser_prod___ANode___visit_all(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___parser_prod___ANode___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser_prod.nit:30 */
+  fra.me.nitni_local_ref_head = NULL;
+  /* parser/parser_prod.nit:30 */
   nit_abort("Deferred method called", NULL, LOCATE_parser___parser_prod, 30);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___Token___visit_all[] = "parser_prod::Token::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___Token___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
@@ -132,6 +145,7 @@ void parser___parser_prod___Token___visit_all(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___parser_prod___Token___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
@@ -139,6 +153,7 @@ void parser___parser_prod___Token___visit_all(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___Token___replace_child[] = "parser_prod::Token::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___Token___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
@@ -148,6 +163,7 @@ void parser___parser_prod___Token___replace_child(val_t p0, val_t p1, val_t p2){
   fra.me.meth = LOCATE_parser___parser_prod___Token___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -157,6 +173,7 @@ void parser___parser_prod___Token___replace_child(val_t p0, val_t p1, val_t p2){
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___Prod___replace_with[] = "parser_prod::Prod::(parser_prod::ANode::replace_with)";
 void parser___parser_prod___Prod___replace_with(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -167,29 +184,31 @@ void parser___parser_prod___Prod___replace_with(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___parser_prod___Prod___replace_with;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:41 */
+  /* parser/parser_prod.nit:41 */
   fra.me.REG[2] = fra.me.REG[0];
   fra.me.REG[3] = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:43 */
+  /* parser/parser_prod.nit:43 */
   CALL_SUPER_parser___parser_prod___Prod___replace_with(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:44 */
+  /* parser/parser_prod.nit:44 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___Prod, ID_parser___parser_nodes___Prod)) /*cast Prod*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 44);
   }
-  /* ./parser//parser_prod.nit:45 */
+  /* parser/parser_prod.nit:45 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[2])(fra.me.REG[2]);
   CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___Visitor___visit[] = "parser_prod::Visitor::visit";
 void parser___parser_prod___Visitor___visit(val_t p0, val_t p1){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
@@ -199,11 +218,13 @@ void parser___parser_prod___Visitor___visit(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___parser_prod___Visitor___visit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser_prod.nit:51 */
+  fra.me.nitni_local_ref_head = NULL;
+  /* parser/parser_prod.nit:51 */
   nit_abort("Deferred method called", NULL, LOCATE_parser___parser_prod, 51);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___Visitor___enter_visit[] = "parser_prod::Visitor::enter_visit";
 void parser___parser_prod___Visitor___enter_visit(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
@@ -213,22 +234,24 @@ void parser___parser_prod___Visitor___enter_visit(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___parser_prod___Visitor___enter_visit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:60 */
+  /* parser/parser_prod.nit:60 */
   fra.me.REG[2] = ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:61 */
+  /* parser/parser_prod.nit:61 */
   ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:62 */
+  /* parser/parser_prod.nit:62 */
   CALL_parser___parser_prod___Visitor___visit(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:63 */
+  /* parser/parser_prod.nit:63 */
   ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[2];
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___Visitor___current_node[] = "parser_prod::Visitor::current_node";
 val_t parser___parser_prod___Visitor___current_node(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
@@ -238,13 +261,15 @@ val_t parser___parser_prod___Visitor___current_node(val_t p0){
   fra.me.meth = LOCATE_parser___parser_prod___Visitor___current_node;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:66 */
+  /* parser/parser_prod.nit:66 */
   fra.me.REG[0] = ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
+static const char LOCATE_parser___parser_prod___Visitor___init[] = "parser_prod::Visitor::init";
 void parser___parser_prod___Visitor___init(val_t p0, int* init_table){
   int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_prod___Visitor].i;
   struct {struct stack_frame_t me;} fra;
@@ -256,10 +281,12 @@ void parser___parser_prod___Visitor___init(val_t p0, int* init_table){
   fra.me.meth = LOCATE_parser___parser_prod___Visitor___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
   init_table[itpos0] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AModule___empty_init[] = "parser_prod::AModule::empty_init";
 void parser___parser_prod___AModule___empty_init(val_t p0, int* init_table){
   int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModule].i;
   struct {struct stack_frame_t me;} fra;
@@ -271,15 +298,17 @@ void parser___parser_prod___AModule___empty_init(val_t p0, int* init_table){
   fra.me.meth = LOCATE_parser___parser_prod___AModule___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos1] = 1;
   return;
 }
-void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+static const char LOCATE_parser___parser_prod___AModule___init_amodule[] = "parser_prod::AModule::init_amodule";
+void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModule].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
@@ -289,26 +318,29 @@ void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2,
   fra.me.line = 73;
   fra.me.meth = LOCATE_parser___parser_prod___AModule___init_amodule;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:79 */
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:80 */
   CALL_parser___parser_prod___AModule___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:80 */
+  /* parser/parser_prod.nit:81 */
   ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:81 */
+  /* parser/parser_prod.nit:82 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -317,15 +349,16 @@ void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:82 */
+    /* parser/parser_prod.nit:83 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 82);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 83);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModule___init_amodule_1));
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModule___init_amodule_2));
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[4])(fra.me.REG[4], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModule___init_amodule_3));
   stack_frame_head = fra.me.prev;
   init_table[itpos2] = 1;
   return;
@@ -335,34 +368,35 @@ void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:84 */
+    /* parser/parser_prod.nit:85 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AModule___init_amodule;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:85 */
+    /* parser/parser_prod.nit:86 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AImport, ID_parser___parser_nodes___AImport)) /*cast AImport*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 85);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 86);
     }
-    /* ./parser//parser_prod.nit:86 */
+    /* parser/parser_prod.nit:87 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_imports(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 86);
+      nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 87);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AModule____n_imports(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:87 */
+    /* parser/parser_prod.nit:88 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -372,38 +406,78 @@ void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:89 */
+    /* parser/parser_prod.nit:90 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AModule___init_amodule;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:91 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 91);
+    }
+    /* parser/parser_prod.nit:92 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(closctx->REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 92);
+    }
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(closctx->REG[0]);
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:93 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser___parser_prod___AModule___init_amodule_3(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* parser/parser_prod.nit:95 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AModule___init_amodule;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:90 */
+    /* parser/parser_prod.nit:96 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast AClassdef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 90);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 96);
     }
-    /* ./parser//parser_prod.nit:91 */
+    /* parser/parser_prod.nit:97 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_classdefs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 91);
+      nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 97);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AModule____n_classdefs(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:92 */
+    /* parser/parser_prod.nit:98 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AModule___replace_child[] = "parser_prod::AModule::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -414,10 +488,11 @@ void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 96;
+  fra.me.line = 102;
   fra.me.meth = LOCATE_parser___parser_prod___AModule___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -425,14 +500,14 @@ void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:98 */
+  /* parser/parser_prod.nit:104 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -440,13 +515,13 @@ void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:99 */
+    /* parser/parser_prod.nit:105 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -455,58 +530,63 @@ void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:100 */
+      /* parser/parser_prod.nit:106 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 100);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 106);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:101 */
+      /* parser/parser_prod.nit:107 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast AModuledecl*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 101);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 107);
       }
-      /* ./parser//parser_prod.nit:102 */
+      /* parser/parser_prod.nit:108 */
       ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:104 */
+      /* parser/parser_prod.nit:110 */
       ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:106 */
+    /* parser/parser_prod.nit:112 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:108 */
+  /* parser/parser_prod.nit:114 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 108);
+    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 114);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:108 */
+      /* parser/parser_prod.nit:114 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:109 */
+      /* parser/parser_prod.nit:115 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 109);
+        nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 115);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -514,13 +594,13 @@ void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:110 */
+        /* parser/parser_prod.nit:116 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -529,82 +609,190 @@ void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:111 */
+          /* parser/parser_prod.nit:117 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AImport, ID_parser___parser_nodes___AImport)) /*cast AImport*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 111);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 117);
           }
-          /* ./parser//parser_prod.nit:112 */
+          /* parser/parser_prod.nit:118 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 112);
+            nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 118);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:113 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:119 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 113);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 119);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:115 */
+          /* parser/parser_prod.nit:121 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 115);
+            nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 121);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:117 */
+        /* parser/parser_prod.nit:123 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:120 */
+  /* parser/parser_prod.nit:126 */
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 126);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0]);
+  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ../lib/standard/kernel.nit:355 */
+  while(1) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ../lib/standard/kernel.nit:355 */
+    if (UNTAG_Bool(REGB2)) {
+      /* parser/parser_prod.nit:126 */
+      REGB2 = REGB0;
+      /* parser/parser_prod.nit:127 */
+      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 127);
+      }
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(0);
+          REGB3 = REGB4;
+        } else {
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
+        }
+      }
+      if (UNTAG_Bool(REGB3)) {
+        /* parser/parser_prod.nit:128 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(0);
+            REGB3 = REGB4;
+          } else {
+            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
+          }
+        }
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* parser/parser_prod.nit:129 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 129);
+          }
+          /* parser/parser_prod.nit:130 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 130);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:131 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 131);
+          }
+          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          /* parser/parser_prod.nit:133 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 133);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+        }
+        /* parser/parser_prod.nit:135 */
+        goto label1;
+      }
+      /* ../lib/standard/kernel.nit:357 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/kernel.nit:357 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/kernel.nit:355 */
+      goto label3;
+    }
+  }
+  label3: while(0);
+  /* parser/parser_prod.nit:138 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 120);
+    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 138);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:120 */
+      /* parser/parser_prod.nit:138 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:121 */
+      /* parser/parser_prod.nit:139 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 121);
+        nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 139);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -612,13 +800,13 @@ void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:122 */
+        /* parser/parser_prod.nit:140 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -627,112 +815,125 @@ void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:123 */
+          /* parser/parser_prod.nit:141 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast AClassdef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 123);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 141);
           }
-          /* ./parser//parser_prod.nit:124 */
+          /* parser/parser_prod.nit:142 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 124);
+            nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 142);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:125 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:143 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 125);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 143);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:127 */
+          /* parser/parser_prod.nit:145 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 127);
+            nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 145);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:129 */
+        /* parser/parser_prod.nit:147 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label3;
+      /* ../lib/standard/kernel.nit:355 */
+      goto label4;
     }
   }
-  label3: while(0);
+  label4: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AModule___visit_all[] = "parser_prod::AModule::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AModule___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 134;
+  fra.me.line = 152;
   fra.me.meth = LOCATE_parser___parser_prod___AModule___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:136 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:152 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:154 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:137 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast AModuledecl*/;
+    /* parser/parser_prod.nit:155 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast AModuledecl*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 137);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 155);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:157 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 157);
   }
-  /* ./parser//parser_prod.nit:139 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModule___visit_all_1));
+  /* parser/parser_prod.nit:160 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 139);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 160);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModule___visit_all_1));
-  /* ./parser//parser_prod.nit:142 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModule___visit_all_2));
+  /* parser/parser_prod.nit:163 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 142);
+    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 163);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModule___visit_all_2));
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModule___visit_all_3));
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -746,12 +947,13 @@ void parser___parser_prod___AModule___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AModule___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:140 */
+    /* parser/parser_prod.nit:158 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -766,16 +968,39 @@ void parser___parser_prod___AModule___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AModule___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:161 */
+    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser___parser_prod___AModule___visit_all_3(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AModule___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:143 */
+    /* parser/parser_prod.nit:164 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AModuledecl___empty_init[] = "parser_prod::AModuledecl::empty_init";
 void parser___parser_prod___AModuledecl___empty_init(val_t p0, int* init_table){
   int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuledecl].i;
   struct {struct stack_frame_t me;} fra;
@@ -783,48 +1008,54 @@ void parser___parser_prod___AModuledecl___empty_init(val_t p0, int* init_table){
   if (init_table[itpos3]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 148;
+  fra.me.line = 169;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos3] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AModuledecl___init_amoduledecl[] = "parser_prod::AModuledecl::init_amoduledecl";
 void parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuledecl].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos4]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 150;
+  fra.me.line = 171;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___init_amoduledecl;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:156 */
-  CALL_parser___parser_prod___AModuledecl___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:157 */
-  ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:158 */
+  /* parser/parser_prod.nit:171 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:177 */
+  CALL_parser___parser_prod___AModuledecl___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:178 */
+  ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:179 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -833,43 +1064,44 @@ void parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:159 */
+    /* parser/parser_prod.nit:180 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 159);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 180);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:161 */
+  /* parser/parser_prod.nit:182 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 161);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 182);
   }
-  ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:162 */
+  ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:183 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 162);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 183);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:163 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:184 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 163);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 184);
   }
-  ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:164 */
+  ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:185 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 164);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 185);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos4] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AModuledecl___replace_child[] = "parser_prod::AModuledecl::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -877,10 +1109,11 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 167;
+  fra.me.line = 188;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -888,14 +1121,14 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:169 */
+  /* parser/parser_prod.nit:190 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -903,13 +1136,13 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:170 */
+    /* parser/parser_prod.nit:191 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -918,32 +1151,32 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:171 */
+      /* parser/parser_prod.nit:192 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 171);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 192);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:172 */
+      /* parser/parser_prod.nit:193 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 172);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 193);
       }
-      /* ./parser//parser_prod.nit:173 */
+      /* parser/parser_prod.nit:194 */
       ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:175 */
+      /* parser/parser_prod.nit:196 */
       ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:177 */
+    /* parser/parser_prod.nit:198 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:179 */
+  /* parser/parser_prod.nit:200 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 179);
+    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 200);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -953,13 +1186,13 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:180 */
+    /* parser/parser_prod.nit:201 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -968,32 +1201,32 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:181 */
+      /* parser/parser_prod.nit:202 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 181);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 202);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:182 */
+      /* parser/parser_prod.nit:203 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmodule, ID_parser___parser_nodes___TKwmodule)) /*cast TKwmodule*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 182);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 203);
       }
-      /* ./parser//parser_prod.nit:183 */
+      /* parser/parser_prod.nit:204 */
       ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:185 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 185);
+      /* parser/parser_prod.nit:206 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 206);
     }
-    /* ./parser//parser_prod.nit:187 */
+    /* parser/parser_prod.nit:208 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:189 */
+  /* parser/parser_prod.nit:210 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 189);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 210);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1003,13 +1236,13 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:190 */
+    /* parser/parser_prod.nit:211 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -1018,91 +1251,97 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:191 */
+      /* parser/parser_prod.nit:212 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 191);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 212);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:192 */
+      /* parser/parser_prod.nit:213 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast AModuleName*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 192);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 213);
       }
-      /* ./parser//parser_prod.nit:193 */
+      /* parser/parser_prod.nit:214 */
       ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:195 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 195);
+      /* parser/parser_prod.nit:216 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 216);
     }
-    /* ./parser//parser_prod.nit:197 */
+    /* parser/parser_prod.nit:218 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AModuledecl___visit_all[] = "parser_prod::AModuledecl::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AModuledecl___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 201;
+  fra.me.line = 222;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:203 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:222 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:224 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:204 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:225 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 204);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 225);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:206 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:227 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 206);
+    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 227);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:207 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:228 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 207);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 228);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStdImport___empty_init[] = "parser_prod::AStdImport::empty_init";
 void parser___parser_prod___AStdImport___empty_init(val_t p0, int* init_table){
   int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdImport].i;
   struct {struct stack_frame_t me;} fra;
@@ -1110,81 +1349,88 @@ void parser___parser_prod___AStdImport___empty_init(val_t p0, int* init_table){
   if (init_table[itpos5]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 211;
+  fra.me.line = 232;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos5] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStdImport___init_astdimport[] = "parser_prod::AStdImport::init_astdimport";
 void parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdImport].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos6]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 213;
+  fra.me.line = 234;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___init_astdimport;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:219 */
-  CALL_parser___parser_prod___AStdImport___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:220 */
+  /* parser/parser_prod.nit:234 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:240 */
+  CALL_parser___parser_prod___AStdImport___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:241 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 220);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 241);
   }
-  ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:221 */
+  ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:242 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 221);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 242);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:222 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:243 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 222);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 243);
   }
-  ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:223 */
+  ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:244 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 223);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 244);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:224 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:245 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 224);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 245);
   }
-  ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:225 */
+  ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:246 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 225);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 246);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos6] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStdImport___replace_child[] = "parser_prod::AStdImport::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -1192,10 +1438,11 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 228;
+  fra.me.line = 249;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -1203,11 +1450,11 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:230 */
+  /* parser/parser_prod.nit:251 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 230);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 251);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1217,13 +1464,13 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:231 */
+    /* parser/parser_prod.nit:252 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -1232,32 +1479,32 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:232 */
+      /* parser/parser_prod.nit:253 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 232);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 253);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:233 */
+      /* parser/parser_prod.nit:254 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 233);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 254);
       }
-      /* ./parser//parser_prod.nit:234 */
+      /* parser/parser_prod.nit:255 */
       ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:236 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 236);
+      /* parser/parser_prod.nit:257 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 257);
     }
-    /* ./parser//parser_prod.nit:238 */
+    /* parser/parser_prod.nit:259 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:240 */
+  /* parser/parser_prod.nit:261 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 240);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 261);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1267,13 +1514,13 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:241 */
+    /* parser/parser_prod.nit:262 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -1282,32 +1529,32 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:242 */
+      /* parser/parser_prod.nit:263 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 242);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 263);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:243 */
+      /* parser/parser_prod.nit:264 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast TKwimport*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 243);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 264);
       }
-      /* ./parser//parser_prod.nit:244 */
+      /* parser/parser_prod.nit:265 */
       ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:246 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 246);
+      /* parser/parser_prod.nit:267 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 267);
     }
-    /* ./parser//parser_prod.nit:248 */
+    /* parser/parser_prod.nit:269 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:250 */
+  /* parser/parser_prod.nit:271 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 250);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 271);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1317,13 +1564,13 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:251 */
+    /* parser/parser_prod.nit:272 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -1332,73 +1579,76 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:252 */
+      /* parser/parser_prod.nit:273 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 252);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 273);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:253 */
+      /* parser/parser_prod.nit:274 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast AModuleName*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 253);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 274);
       }
-      /* ./parser//parser_prod.nit:254 */
+      /* parser/parser_prod.nit:275 */
       ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:256 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 256);
+      /* parser/parser_prod.nit:277 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 277);
     }
-    /* ./parser//parser_prod.nit:258 */
+    /* parser/parser_prod.nit:279 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStdImport___visit_all[] = "parser_prod::AStdImport::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStdImport___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 262;
+  fra.me.line = 283;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:264 */
+  /* parser/parser_prod.nit:285 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 264);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 285);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:265 */
+  /* parser/parser_prod.nit:286 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 265);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 286);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:266 */
+  /* parser/parser_prod.nit:287 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 266);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 287);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANoImport___empty_init[] = "parser_prod::ANoImport::empty_init";
 void parser___parser_prod___ANoImport___empty_init(val_t p0, int* init_table){
   int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANoImport].i;
   struct {struct stack_frame_t me;} fra;
@@ -1406,81 +1656,88 @@ void parser___parser_prod___ANoImport___empty_init(val_t p0, int* init_table){
   if (init_table[itpos7]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 270;
+  fra.me.line = 291;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos7] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANoImport___init_anoimport[] = "parser_prod::ANoImport::init_anoimport";
 void parser___parser_prod___ANoImport___init_anoimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANoImport].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos8]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 272;
+  fra.me.line = 293;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___init_anoimport;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:278 */
-  CALL_parser___parser_prod___ANoImport___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:279 */
+  /* parser/parser_prod.nit:293 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:299 */
+  CALL_parser___parser_prod___ANoImport___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:300 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 279);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 300);
   }
-  ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:280 */
+  ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:301 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 280);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 301);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:281 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:302 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 281);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 302);
   }
-  ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:282 */
+  ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:303 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 282);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 303);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:283 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:304 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 283);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 304);
   }
-  ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:284 */
+  ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:305 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 284);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 305);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos8] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANoImport___replace_child[] = "parser_prod::ANoImport::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -1488,10 +1745,11 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 287;
+  fra.me.line = 308;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -1499,11 +1757,11 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:289 */
+  /* parser/parser_prod.nit:310 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 289);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 310);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1513,13 +1771,13 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:290 */
+    /* parser/parser_prod.nit:311 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -1528,32 +1786,32 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:291 */
+      /* parser/parser_prod.nit:312 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 291);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 312);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:292 */
+      /* parser/parser_prod.nit:313 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 292);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 313);
       }
-      /* ./parser//parser_prod.nit:293 */
+      /* parser/parser_prod.nit:314 */
       ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:295 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 295);
+      /* parser/parser_prod.nit:316 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 316);
     }
-    /* ./parser//parser_prod.nit:297 */
+    /* parser/parser_prod.nit:318 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:299 */
+  /* parser/parser_prod.nit:320 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 299);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 320);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1563,13 +1821,13 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:300 */
+    /* parser/parser_prod.nit:321 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -1578,32 +1836,32 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:301 */
+      /* parser/parser_prod.nit:322 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 301);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 322);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:302 */
+      /* parser/parser_prod.nit:323 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast TKwimport*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 302);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 323);
       }
-      /* ./parser//parser_prod.nit:303 */
+      /* parser/parser_prod.nit:324 */
       ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:305 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 305);
+      /* parser/parser_prod.nit:326 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 326);
     }
-    /* ./parser//parser_prod.nit:307 */
+    /* parser/parser_prod.nit:328 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:309 */
+  /* parser/parser_prod.nit:330 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 309);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 330);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1613,13 +1871,13 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:310 */
+    /* parser/parser_prod.nit:331 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -1628,73 +1886,76 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:311 */
+      /* parser/parser_prod.nit:332 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 311);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 332);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:312 */
+      /* parser/parser_prod.nit:333 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast TKwend*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 312);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 333);
       }
-      /* ./parser//parser_prod.nit:313 */
+      /* parser/parser_prod.nit:334 */
       ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:315 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 315);
+      /* parser/parser_prod.nit:336 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 336);
     }
-    /* ./parser//parser_prod.nit:317 */
+    /* parser/parser_prod.nit:338 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANoImport___visit_all[] = "parser_prod::ANoImport::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ANoImport___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 321;
+  fra.me.line = 342;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:323 */
+  /* parser/parser_prod.nit:344 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 323);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 344);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:324 */
+  /* parser/parser_prod.nit:345 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 324);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 345);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:325 */
+  /* parser/parser_prod.nit:346 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 325);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 346);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APublicVisibility___empty_init[] = "parser_prod::APublicVisibility::empty_init";
 void parser___parser_prod___APublicVisibility___empty_init(val_t p0, int* init_table){
   int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APublicVisibility].i;
   struct {struct stack_frame_t me;} fra;
@@ -1702,16 +1963,18 @@ void parser___parser_prod___APublicVisibility___empty_init(val_t p0, int* init_t
   if (init_table[itpos9]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 329;
+  fra.me.line = 350;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos9] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APublicVisibility___init_apublicvisibility[] = "parser_prod::APublicVisibility::init_apublicvisibility";
 void parser___parser_prod___APublicVisibility___init_apublicvisibility(val_t p0, int* init_table){
   int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APublicVisibility].i;
   struct {struct stack_frame_t me;} fra;
@@ -1719,27 +1982,30 @@ void parser___parser_prod___APublicVisibility___init_apublicvisibility(val_t p0,
   if (init_table[itpos10]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 331;
+  fra.me.line = 352;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___init_apublicvisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:333 */
+  /* parser/parser_prod.nit:354 */
   CALL_parser___parser_prod___APublicVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos10] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APublicVisibility___replace_child[] = "parser_prod::APublicVisibility::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___APublicVisibility___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 336;
+  fra.me.line = 357;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -1749,15 +2015,17 @@ void parser___parser_prod___APublicVisibility___replace_child(val_t p0, val_t p1
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APublicVisibility___visit_all[] = "parser_prod::APublicVisibility::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___APublicVisibility___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 340;
+  fra.me.line = 361;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
@@ -1765,6 +2033,7 @@ void parser___parser_prod___APublicVisibility___visit_all(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APrivateVisibility___empty_init[] = "parser_prod::APrivateVisibility::empty_init";
 void parser___parser_prod___APrivateVisibility___empty_init(val_t p0, int* init_table){
   int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APrivateVisibility].i;
   struct {struct stack_frame_t me;} fra;
@@ -1772,51 +2041,58 @@ void parser___parser_prod___APrivateVisibility___empty_init(val_t p0, int* init_
   if (init_table[itpos11]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 345;
+  fra.me.line = 366;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos11] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APrivateVisibility___init_aprivatevisibility[] = "parser_prod::APrivateVisibility::init_aprivatevisibility";
 void parser___parser_prod___APrivateVisibility___init_aprivatevisibility(val_t p0, val_t p1, int* init_table){
   int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APrivateVisibility].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos12]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 347;
+  fra.me.line = 368;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___init_aprivatevisibility;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:351 */
-  CALL_parser___parser_prod___APrivateVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:352 */
+  /* parser/parser_prod.nit:368 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:372 */
+  CALL_parser___parser_prod___APrivateVisibility___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:373 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 352);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 373);
   }
-  ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:353 */
+  ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:374 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 353);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 374);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos12] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APrivateVisibility___replace_child[] = "parser_prod::APrivateVisibility::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -1824,10 +2100,11 @@ void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 356;
+  fra.me.line = 377;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -1835,11 +2112,11 @@ void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:358 */
+  /* parser/parser_prod.nit:379 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 358);
+    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 379);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1849,13 +2126,13 @@ void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:359 */
+    /* parser/parser_prod.nit:380 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -1864,56 +2141,59 @@ void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:360 */
+      /* parser/parser_prod.nit:381 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 360);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 381);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:361 */
+      /* parser/parser_prod.nit:382 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwprivate, ID_parser___parser_nodes___TKwprivate)) /*cast TKwprivate*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 361);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 382);
       }
-      /* ./parser//parser_prod.nit:362 */
+      /* parser/parser_prod.nit:383 */
       ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:364 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 364);
+      /* parser/parser_prod.nit:385 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 385);
     }
-    /* ./parser//parser_prod.nit:366 */
+    /* parser/parser_prod.nit:387 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APrivateVisibility___visit_all[] = "parser_prod::APrivateVisibility::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___APrivateVisibility___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 370;
+  fra.me.line = 391;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:372 */
+  /* parser/parser_prod.nit:393 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 372);
+    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 393);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AProtectedVisibility___empty_init[] = "parser_prod::AProtectedVisibility::empty_init";
 void parser___parser_prod___AProtectedVisibility___empty_init(val_t p0, int* init_table){
   int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AProtectedVisibility].i;
   struct {struct stack_frame_t me;} fra;
@@ -1921,51 +2201,58 @@ void parser___parser_prod___AProtectedVisibility___empty_init(val_t p0, int* ini
   if (init_table[itpos13]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 376;
+  fra.me.line = 397;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos13] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility[] = "parser_prod::AProtectedVisibility::init_aprotectedvisibility";
 void parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(val_t p0, val_t p1, int* init_table){
   int itpos14 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AProtectedVisibility].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos14]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 378;
+  fra.me.line = 399;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:382 */
-  CALL_parser___parser_prod___AProtectedVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:383 */
+  /* parser/parser_prod.nit:399 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:403 */
+  CALL_parser___parser_prod___AProtectedVisibility___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:404 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 383);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 404);
   }
-  ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:384 */
+  ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:405 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 384);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 405);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos14] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AProtectedVisibility___replace_child[] = "parser_prod::AProtectedVisibility::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -1973,10 +2260,11 @@ void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 387;
+  fra.me.line = 408;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -1984,11 +2272,11 @@ void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:389 */
+  /* parser/parser_prod.nit:410 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 389);
+    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 410);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1998,13 +2286,13 @@ void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:390 */
+    /* parser/parser_prod.nit:411 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2013,56 +2301,59 @@ void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:391 */
+      /* parser/parser_prod.nit:412 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 391);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 412);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:392 */
+      /* parser/parser_prod.nit:413 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwprotected, ID_parser___parser_nodes___TKwprotected)) /*cast TKwprotected*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 392);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 413);
       }
-      /* ./parser//parser_prod.nit:393 */
+      /* parser/parser_prod.nit:414 */
       ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:395 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 395);
+      /* parser/parser_prod.nit:416 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 416);
     }
-    /* ./parser//parser_prod.nit:397 */
+    /* parser/parser_prod.nit:418 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AProtectedVisibility___visit_all[] = "parser_prod::AProtectedVisibility::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AProtectedVisibility___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 401;
+  fra.me.line = 422;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:403 */
+  /* parser/parser_prod.nit:424 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 403);
+    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 424);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIntrudeVisibility___empty_init[] = "parser_prod::AIntrudeVisibility::empty_init";
 void parser___parser_prod___AIntrudeVisibility___empty_init(val_t p0, int* init_table){
   int itpos15 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntrudeVisibility].i;
   struct {struct stack_frame_t me;} fra;
@@ -2070,51 +2361,58 @@ void parser___parser_prod___AIntrudeVisibility___empty_init(val_t p0, int* init_
   if (init_table[itpos15]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 407;
+  fra.me.line = 428;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos15] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility[] = "parser_prod::AIntrudeVisibility::init_aintrudevisibility";
 void parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(val_t p0, val_t p1, int* init_table){
   int itpos16 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntrudeVisibility].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos16]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 409;
+  fra.me.line = 430;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:413 */
-  CALL_parser___parser_prod___AIntrudeVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:414 */
+  /* parser/parser_prod.nit:430 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:434 */
+  CALL_parser___parser_prod___AIntrudeVisibility___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:435 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 414);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 435);
   }
-  ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:415 */
+  ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:436 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 415);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 436);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos16] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIntrudeVisibility___replace_child[] = "parser_prod::AIntrudeVisibility::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -2122,10 +2420,11 @@ void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 418;
+  fra.me.line = 439;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -2133,11 +2432,11 @@ void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:420 */
+  /* parser/parser_prod.nit:441 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 420);
+    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 441);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2147,13 +2446,13 @@ void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:421 */
+    /* parser/parser_prod.nit:442 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2162,56 +2461,59 @@ void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:422 */
+      /* parser/parser_prod.nit:443 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 422);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 443);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:423 */
+      /* parser/parser_prod.nit:444 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwintrude, ID_parser___parser_nodes___TKwintrude)) /*cast TKwintrude*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 423);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 444);
       }
-      /* ./parser//parser_prod.nit:424 */
+      /* parser/parser_prod.nit:445 */
       ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:426 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 426);
+      /* parser/parser_prod.nit:447 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 447);
     }
-    /* ./parser//parser_prod.nit:428 */
+    /* parser/parser_prod.nit:449 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIntrudeVisibility___visit_all[] = "parser_prod::AIntrudeVisibility::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AIntrudeVisibility___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 432;
+  fra.me.line = 453;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:434 */
+  /* parser/parser_prod.nit:455 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 434);
+    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 455);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStdClassdef___empty_init[] = "parser_prod::AStdClassdef::empty_init";
 void parser___parser_prod___AStdClassdef___empty_init(val_t p0, int* init_table){
   int itpos17 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdClassdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -2219,29 +2521,32 @@ void parser___parser_prod___AStdClassdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos17]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 438;
+  fra.me.line = 459;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos17] = 1;
   return;
 }
-void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
+static const char LOCATE_parser___parser_prod___AStdClassdef___init_astdclassdef[] = "parser_prod::AStdClassdef::init_astdclassdef";
+void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, int* init_table){
   int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdClassdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos18]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 440;
+  fra.me.line = 461;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___init_astdclassdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -2251,6 +2556,9 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -2260,17 +2568,21 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
-  /* ./parser//parser_prod.nit:451 */
-  CALL_parser___parser_prod___AStdClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:452 */
-  ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:453 */
+  fra.me.REG[9] = p9;
+  fra.me.REG[10] = p10;
+  /* parser/parser_prod.nit:461 */
+  fra.me.REG[11] = fra.me.REG[0];
+  /* parser/parser_prod.nit:474 */
+  CALL_parser___parser_prod___AStdClassdef___empty_init(fra.me.REG[11])(fra.me.REG[11], init_table);
+  /* parser/parser_prod.nit:475 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[11]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:476 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -2279,22 +2591,22 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:454 */
+    /* parser/parser_prod.nit:477 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 454);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 477);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[11]);
   }
-  /* ./parser//parser_prod.nit:456 */
-  ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:457 */
+  /* parser/parser_prod.nit:479 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[11]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:480 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2303,48 +2615,48 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:458 */
+    /* parser/parser_prod.nit:481 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 458);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 481);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[11]);
   }
-  /* ./parser//parser_prod.nit:460 */
+  /* parser/parser_prod.nit:483 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 460);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 483);
   }
-  ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:461 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[11]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:484 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 461);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 484);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:462 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[11]);
+  /* parser/parser_prod.nit:485 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 462);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 485);
   }
-  ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:463 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[11]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:486 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 463);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 486);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:464 */
-  ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:465 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[11]);
+  /* parser/parser_prod.nit:487 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[11]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:488 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
@@ -2353,16 +2665,53 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:466 */
+    /* parser/parser_prod.nit:489 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 466);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 489);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[11]);
   }
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[6])(fra.me.REG[6], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_1));
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[7])(fra.me.REG[7], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_2));
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[8])(fra.me.REG[8], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_3));
+  /* parser/parser_prod.nit:496 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[11]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:497 */
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:498 */
+    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 498);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[11]);
+  }
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[8])(fra.me.REG[8], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_2));
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[9])(fra.me.REG[9], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_3));
+  /* parser/parser_prod.nit:510 */
+  REGB0 = TAG_Bool(fra.me.REG[10]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 510);
+  }
+  ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[11]) = fra.me.REG[10];
+  /* parser/parser_prod.nit:511 */
+  REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 511);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[11]);
   stack_frame_head = fra.me.prev;
   init_table[itpos18] = 1;
   return;
@@ -2372,35 +2721,36 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:468 */
+    /* parser/parser_prod.nit:491 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___init_astdclassdef;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:469 */
+    /* parser/parser_prod.nit:492 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AFormaldef, ID_parser___parser_nodes___AFormaldef)) /*cast AFormaldef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 469);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 492);
     }
-    /* ./parser//parser_prod.nit:470 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:493 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[11])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 470);
+      nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 493);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[11]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:471 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:494 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[11]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -2409,35 +2759,36 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:473 */
+    /* parser/parser_prod.nit:500 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___init_astdclassdef;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:474 */
+    /* parser/parser_prod.nit:501 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___ASuperclass, ID_parser___parser_nodes___ASuperclass)) /*cast ASuperclass*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 474);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 501);
     }
-    /* ./parser//parser_prod.nit:475 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:502 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[11])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 475);
+      nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 502);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[11]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:476 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:503 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[11]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -2446,38 +2797,40 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:478 */
+    /* parser/parser_prod.nit:505 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___init_astdclassdef;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:479 */
+    /* parser/parser_prod.nit:506 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 479);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 506);
     }
-    /* ./parser//parser_prod.nit:480 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:507 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[11])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 480);
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 507);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[11]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:481 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:508 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[11]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AStdClassdef___replace_child[] = "parser_prod::AStdClassdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -2488,10 +2841,11 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 485;
+  fra.me.line = 514;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -2499,14 +2853,14 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:487 */
+  /* parser/parser_prod.nit:516 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -2514,13 +2868,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:488 */
+    /* parser/parser_prod.nit:517 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2529,35 +2883,35 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:489 */
+      /* parser/parser_prod.nit:518 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 489);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 518);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:490 */
+      /* parser/parser_prod.nit:519 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 490);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 519);
       }
-      /* ./parser//parser_prod.nit:491 */
+      /* parser/parser_prod.nit:520 */
       ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:493 */
+      /* parser/parser_prod.nit:522 */
       ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:495 */
+    /* parser/parser_prod.nit:524 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:497 */
+  /* parser/parser_prod.nit:526 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -2565,13 +2919,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:498 */
+    /* parser/parser_prod.nit:527 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2580,32 +2934,32 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:499 */
+      /* parser/parser_prod.nit:528 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 499);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 528);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:500 */
+      /* parser/parser_prod.nit:529 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 500);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 529);
       }
-      /* ./parser//parser_prod.nit:501 */
+      /* parser/parser_prod.nit:530 */
       ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:503 */
+      /* parser/parser_prod.nit:532 */
       ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:505 */
+    /* parser/parser_prod.nit:534 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:507 */
+  /* parser/parser_prod.nit:536 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 507);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 536);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2615,13 +2969,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:508 */
+    /* parser/parser_prod.nit:537 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2630,32 +2984,32 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:509 */
+      /* parser/parser_prod.nit:538 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 509);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 538);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:510 */
+      /* parser/parser_prod.nit:539 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 510);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 539);
       }
-      /* ./parser//parser_prod.nit:511 */
+      /* parser/parser_prod.nit:540 */
       ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:513 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 513);
+      /* parser/parser_prod.nit:542 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 542);
     }
-    /* ./parser//parser_prod.nit:515 */
+    /* parser/parser_prod.nit:544 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:517 */
+  /* parser/parser_prod.nit:546 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 517);
+    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 546);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2665,13 +3019,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:518 */
+    /* parser/parser_prod.nit:547 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2680,35 +3034,35 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:519 */
+      /* parser/parser_prod.nit:548 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 519);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 548);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:520 */
+      /* parser/parser_prod.nit:549 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast AClasskind*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 520);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 549);
       }
-      /* ./parser//parser_prod.nit:521 */
+      /* parser/parser_prod.nit:550 */
       ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:523 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 523);
+      /* parser/parser_prod.nit:552 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 552);
     }
-    /* ./parser//parser_prod.nit:525 */
+    /* parser/parser_prod.nit:554 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:527 */
+  /* parser/parser_prod.nit:556 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -2716,13 +3070,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:528 */
+    /* parser/parser_prod.nit:557 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2731,58 +3085,63 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:529 */
+      /* parser/parser_prod.nit:558 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 529);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 558);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:530 */
+      /* parser/parser_prod.nit:559 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 530);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 559);
       }
-      /* ./parser//parser_prod.nit:531 */
+      /* parser/parser_prod.nit:560 */
       ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:533 */
+      /* parser/parser_prod.nit:562 */
       ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:535 */
+    /* parser/parser_prod.nit:564 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:537 */
+  /* parser/parser_prod.nit:566 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 537);
+    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 566);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:537 */
+      /* parser/parser_prod.nit:566 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:538 */
+      /* parser/parser_prod.nit:567 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 538);
+        nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 567);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -2790,13 +3149,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:539 */
+        /* parser/parser_prod.nit:568 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2805,82 +3164,138 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:540 */
+          /* parser/parser_prod.nit:569 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AFormaldef, ID_parser___parser_nodes___AFormaldef)) /*cast AFormaldef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 540);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 569);
           }
-          /* ./parser//parser_prod.nit:541 */
+          /* parser/parser_prod.nit:570 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 541);
+            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 570);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:542 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:571 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 542);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 571);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:544 */
+          /* parser/parser_prod.nit:573 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 544);
+            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 573);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:546 */
+        /* parser/parser_prod.nit:575 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:549 */
+  /* parser/parser_prod.nit:578 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:579 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:580 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 580);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:581 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 581);
+      }
+      /* parser/parser_prod.nit:582 */
+      ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:584 */
+      ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:586 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:588 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 549);
+    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 588);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:549 */
+      /* parser/parser_prod.nit:588 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:550 */
+      /* parser/parser_prod.nit:589 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 550);
+        nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 589);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -2888,13 +3303,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:551 */
+        /* parser/parser_prod.nit:590 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -2903,82 +3318,87 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:552 */
+          /* parser/parser_prod.nit:591 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASuperclass, ID_parser___parser_nodes___ASuperclass)) /*cast ASuperclass*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 552);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 591);
           }
-          /* ./parser//parser_prod.nit:553 */
+          /* parser/parser_prod.nit:592 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 553);
+            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 592);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:554 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:593 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 554);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 593);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:556 */
+          /* parser/parser_prod.nit:595 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 556);
+            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 595);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:558 */
+        /* parser/parser_prod.nit:597 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label3;
     }
   }
   label3: while(0);
-  /* ./parser//parser_prod.nit:561 */
+  /* parser/parser_prod.nit:600 */
   REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 561);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 600);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:561 */
+      /* parser/parser_prod.nit:600 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:562 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* parser/parser_prod.nit:601 */
+      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 562);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 601);
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -2986,13 +3406,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:563 */
+        /* parser/parser_prod.nit:602 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -3001,186 +3421,274 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:564 */
+          /* parser/parser_prod.nit:603 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 564);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 603);
           }
-          /* ./parser//parser_prod.nit:565 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* parser/parser_prod.nit:604 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 565);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 604);
           }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:566 */
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:605 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 566);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 605);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:568 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* parser/parser_prod.nit:607 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 568);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 607);
           }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:570 */
+        /* parser/parser_prod.nit:609 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label4;
     }
   }
   label4: while(0);
+  /* parser/parser_prod.nit:612 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 612);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:613 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:614 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 614);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:615 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast TKwend*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 615);
+      }
+      /* parser/parser_prod.nit:616 */
+      ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:618 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 618);
+    }
+    /* parser/parser_prod.nit:620 */
+    goto label1;
+  }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStdClassdef___visit_all[] = "parser_prod::AStdClassdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 575;
+  fra.me.line = 624;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:577 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:624 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:626 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:578 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:627 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 578);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 627);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:580 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:629 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:581 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:630 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 581);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 630);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:583 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:632 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 583);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 632);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:584 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:633 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 584);
+    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 633);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:585 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:634 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:586 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
+    /* parser/parser_prod.nit:635 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 586);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 635);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:588 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:637 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 588);
+    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 637);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___visit_all_1));
-  /* ./parser//parser_prod.nit:591 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___visit_all_1));
+  /* parser/parser_prod.nit:640 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 591);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___visit_all_2));
-  /* ./parser//parser_prod.nit:594 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:641 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 641);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:643 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 643);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___visit_all_2));
+  /* parser/parser_prod.nit:646 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 594);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 646);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___visit_all_3));
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___visit_all_3));
+  /* parser/parser_prod.nit:649 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 649);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -3194,12 +3702,13 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:589 */
+    /* parser/parser_prod.nit:638 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -3214,12 +3723,13 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:592 */
+    /* parser/parser_prod.nit:644 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -3234,16 +3744,18 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:595 */
+    /* parser/parser_prod.nit:647 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ATopClassdef___empty_init[] = "parser_prod::ATopClassdef::empty_init";
 void parser___parser_prod___ATopClassdef___empty_init(val_t p0, int* init_table){
   int itpos19 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATopClassdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -3251,16 +3763,18 @@ void parser___parser_prod___ATopClassdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos19]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 600;
+  fra.me.line = 653;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos19] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATopClassdef___init_atopclassdef[] = "parser_prod::ATopClassdef::init_atopclassdef";
 void parser___parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1, int* init_table){
   int itpos20 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATopClassdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -3268,15 +3782,16 @@ void parser___parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1,
   if (init_table[itpos20]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 602;
+  fra.me.line = 655;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___init_atopclassdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:606 */
+  /* parser/parser_prod.nit:659 */
   CALL_parser___parser_prod___ATopClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ATopClassdef___init_atopclassdef_1));
   stack_frame_head = fra.me.prev;
@@ -3288,38 +3803,40 @@ void parser___parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:607 */
+    /* parser/parser_prod.nit:660 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___init_atopclassdef;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:608 */
+    /* parser/parser_prod.nit:661 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 608);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 661);
     }
-    /* ./parser//parser_prod.nit:609 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:662 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 609);
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 662);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:610 */
+    /* parser/parser_prod.nit:663 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ATopClassdef___replace_child[] = "parser_prod::ATopClassdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -3330,10 +3847,11 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 614;
+  fra.me.line = 667;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -3341,37 +3859,42 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:616 */
+  /* parser/parser_prod.nit:669 */
   REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 616);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 669);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:616 */
+      /* parser/parser_prod.nit:669 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:617 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* parser/parser_prod.nit:670 */
+      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 617);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 670);
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -3379,13 +3902,13 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:618 */
+        /* parser/parser_prod.nit:671 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -3394,47 +3917,47 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:619 */
+          /* parser/parser_prod.nit:672 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 619);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 672);
           }
-          /* ./parser//parser_prod.nit:620 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* parser/parser_prod.nit:673 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 620);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 673);
           }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:621 */
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:674 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 621);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 674);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:623 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* parser/parser_prod.nit:676 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 623);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 676);
           }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:625 */
+        /* parser/parser_prod.nit:678 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
@@ -3443,27 +3966,29 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATopClassdef___visit_all[] = "parser_prod::ATopClassdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ATopClassdef___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 630;
+  fra.me.line = 683;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:632 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:685 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 632);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 685);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ATopClassdef___visit_all_1));
   stack_frame_head = fra.me.prev;
   return;
@@ -3478,16 +4003,18 @@ void parser___parser_prod___ATopClassdef___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:633 */
+    /* parser/parser_prod.nit:686 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AMainClassdef___empty_init[] = "parser_prod::AMainClassdef::empty_init";
 void parser___parser_prod___AMainClassdef___empty_init(val_t p0, int* init_table){
   int itpos21 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMainClassdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -3495,16 +4022,18 @@ void parser___parser_prod___AMainClassdef___empty_init(val_t p0, int* init_table
   if (init_table[itpos21]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 638;
+  fra.me.line = 691;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos21] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMainClassdef___init_amainclassdef[] = "parser_prod::AMainClassdef::init_amainclassdef";
 void parser___parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p1, int* init_table){
   int itpos22 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMainClassdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -3512,15 +4041,16 @@ void parser___parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p
   if (init_table[itpos22]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 640;
+  fra.me.line = 693;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___init_amainclassdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:644 */
+  /* parser/parser_prod.nit:697 */
   CALL_parser___parser_prod___AMainClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AMainClassdef___init_amainclassdef_1));
   stack_frame_head = fra.me.prev;
@@ -3532,38 +4062,40 @@ void parser___parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:645 */
+    /* parser/parser_prod.nit:698 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___init_amainclassdef;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:646 */
+    /* parser/parser_prod.nit:699 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 646);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 699);
     }
-    /* ./parser//parser_prod.nit:647 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:700 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 647);
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 700);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:648 */
+    /* parser/parser_prod.nit:701 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AMainClassdef___replace_child[] = "parser_prod::AMainClassdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -3574,10 +4106,11 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 652;
+  fra.me.line = 705;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -3585,37 +4118,42 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:654 */
+  /* parser/parser_prod.nit:707 */
   REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 654);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 707);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:654 */
+      /* parser/parser_prod.nit:707 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:655 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* parser/parser_prod.nit:708 */
+      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 655);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 708);
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -3623,13 +4161,13 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:656 */
+        /* parser/parser_prod.nit:709 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -3638,47 +4176,47 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:657 */
+          /* parser/parser_prod.nit:710 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 657);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 710);
           }
-          /* ./parser//parser_prod.nit:658 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* parser/parser_prod.nit:711 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 658);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 711);
           }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:659 */
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:712 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 659);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 712);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:661 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* parser/parser_prod.nit:714 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 661);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 714);
           }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:663 */
+        /* parser/parser_prod.nit:716 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
@@ -3687,27 +4225,29 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMainClassdef___visit_all[] = "parser_prod::AMainClassdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AMainClassdef___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 668;
+  fra.me.line = 721;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:670 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:723 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 670);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 723);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AMainClassdef___visit_all_1));
   stack_frame_head = fra.me.prev;
   return;
@@ -3722,16 +4262,18 @@ void parser___parser_prod___AMainClassdef___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:671 */
+    /* parser/parser_prod.nit:724 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AConcreteClasskind___empty_init[] = "parser_prod::AConcreteClasskind::empty_init";
 void parser___parser_prod___AConcreteClasskind___empty_init(val_t p0, int* init_table){
   int itpos23 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteClasskind].i;
   struct {struct stack_frame_t me;} fra;
@@ -3739,51 +4281,58 @@ void parser___parser_prod___AConcreteClasskind___empty_init(val_t p0, int* init_
   if (init_table[itpos23]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 676;
+  fra.me.line = 729;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos23] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind[] = "parser_prod::AConcreteClasskind::init_aconcreteclasskind";
 void parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind(val_t p0, val_t p1, int* init_table){
   int itpos24 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteClasskind].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos24]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 678;
+  fra.me.line = 731;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:682 */
-  CALL_parser___parser_prod___AConcreteClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:683 */
+  /* parser/parser_prod.nit:731 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:735 */
+  CALL_parser___parser_prod___AConcreteClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:736 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 683);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 736);
   }
-  ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:684 */
+  ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:737 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 684);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 737);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos24] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteClasskind___replace_child[] = "parser_prod::AConcreteClasskind::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -3791,10 +4340,11 @@ void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 687;
+  fra.me.line = 740;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -3802,11 +4352,11 @@ void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:689 */
+  /* parser/parser_prod.nit:742 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 689);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 742);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -3816,13 +4366,13 @@ void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:690 */
+    /* parser/parser_prod.nit:743 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -3831,56 +4381,59 @@ void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:691 */
+      /* parser/parser_prod.nit:744 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 691);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 744);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:692 */
+      /* parser/parser_prod.nit:745 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast TKwclass*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 692);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 745);
       }
-      /* ./parser//parser_prod.nit:693 */
+      /* parser/parser_prod.nit:746 */
       ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:695 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 695);
+      /* parser/parser_prod.nit:748 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 748);
     }
-    /* ./parser//parser_prod.nit:697 */
+    /* parser/parser_prod.nit:750 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteClasskind___visit_all[] = "parser_prod::AConcreteClasskind::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AConcreteClasskind___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 701;
+  fra.me.line = 754;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:703 */
+  /* parser/parser_prod.nit:756 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 703);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 756);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAbstractClasskind___empty_init[] = "parser_prod::AAbstractClasskind::empty_init";
 void parser___parser_prod___AAbstractClasskind___empty_init(val_t p0, int* init_table){
   int itpos25 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAbstractClasskind].i;
   struct {struct stack_frame_t me;} fra;
@@ -3888,66 +4441,73 @@ void parser___parser_prod___AAbstractClasskind___empty_init(val_t p0, int* init_
   if (init_table[itpos25]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 707;
+  fra.me.line = 760;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos25] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAbstractClasskind___init_aabstractclasskind[] = "parser_prod::AAbstractClasskind::init_aabstractclasskind";
 void parser___parser_prod___AAbstractClasskind___init_aabstractclasskind(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos26 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAbstractClasskind].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos26]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 709;
+  fra.me.line = 762;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___init_aabstractclasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:714 */
-  CALL_parser___parser_prod___AAbstractClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:715 */
+  /* parser/parser_prod.nit:762 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:767 */
+  CALL_parser___parser_prod___AAbstractClasskind___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:768 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 715);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 768);
   }
-  ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:716 */
+  ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:769 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 716);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 769);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:717 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:770 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 717);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 770);
   }
-  ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:718 */
+  ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:771 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 718);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 771);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos26] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAbstractClasskind___replace_child[] = "parser_prod::AAbstractClasskind::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -3955,10 +4515,11 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 721;
+  fra.me.line = 774;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -3966,11 +4527,11 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:723 */
+  /* parser/parser_prod.nit:776 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 723);
+    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 776);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -3980,13 +4541,13 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:724 */
+    /* parser/parser_prod.nit:777 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -3995,32 +4556,32 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:725 */
+      /* parser/parser_prod.nit:778 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 725);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 778);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:726 */
+      /* parser/parser_prod.nit:779 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwabstract, ID_parser___parser_nodes___TKwabstract)) /*cast TKwabstract*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 726);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 779);
       }
-      /* ./parser//parser_prod.nit:727 */
+      /* parser/parser_prod.nit:780 */
       ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:729 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 729);
+      /* parser/parser_prod.nit:782 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 782);
     }
-    /* ./parser//parser_prod.nit:731 */
+    /* parser/parser_prod.nit:784 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:733 */
+  /* parser/parser_prod.nit:786 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 733);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 786);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4030,13 +4591,13 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:734 */
+    /* parser/parser_prod.nit:787 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -4045,65 +4606,68 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:735 */
+      /* parser/parser_prod.nit:788 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 735);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 788);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:736 */
+      /* parser/parser_prod.nit:789 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast TKwclass*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 736);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 789);
       }
-      /* ./parser//parser_prod.nit:737 */
+      /* parser/parser_prod.nit:790 */
       ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:739 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 739);
+      /* parser/parser_prod.nit:792 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 792);
     }
-    /* ./parser//parser_prod.nit:741 */
+    /* parser/parser_prod.nit:794 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAbstractClasskind___visit_all[] = "parser_prod::AAbstractClasskind::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AAbstractClasskind___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 745;
+  fra.me.line = 798;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:747 */
+  /* parser/parser_prod.nit:800 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 747);
+    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 800);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:748 */
+  /* parser/parser_prod.nit:801 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 748);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 801);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInterfaceClasskind___empty_init[] = "parser_prod::AInterfaceClasskind::empty_init";
 void parser___parser_prod___AInterfaceClasskind___empty_init(val_t p0, int* init_table){
   int itpos27 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInterfaceClasskind].i;
   struct {struct stack_frame_t me;} fra;
@@ -4111,51 +4675,58 @@ void parser___parser_prod___AInterfaceClasskind___empty_init(val_t p0, int* init
   if (init_table[itpos27]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 752;
+  fra.me.line = 805;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos27] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind[] = "parser_prod::AInterfaceClasskind::init_ainterfaceclasskind";
 void parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(val_t p0, val_t p1, int* init_table){
   int itpos28 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInterfaceClasskind].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos28]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 754;
+  fra.me.line = 807;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:758 */
-  CALL_parser___parser_prod___AInterfaceClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:759 */
+  /* parser/parser_prod.nit:807 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:811 */
+  CALL_parser___parser_prod___AInterfaceClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:812 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 759);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 812);
   }
-  ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:760 */
+  ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:813 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 760);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 813);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos28] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInterfaceClasskind___replace_child[] = "parser_prod::AInterfaceClasskind::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -4163,10 +4734,11 @@ void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 763;
+  fra.me.line = 816;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -4174,11 +4746,11 @@ void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:765 */
+  /* parser/parser_prod.nit:818 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 765);
+    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 818);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4188,13 +4760,13 @@ void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:766 */
+    /* parser/parser_prod.nit:819 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -4203,56 +4775,59 @@ void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:767 */
+      /* parser/parser_prod.nit:820 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 767);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 820);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:768 */
+      /* parser/parser_prod.nit:821 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwinterface, ID_parser___parser_nodes___TKwinterface)) /*cast TKwinterface*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 768);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 821);
       }
-      /* ./parser//parser_prod.nit:769 */
+      /* parser/parser_prod.nit:822 */
       ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:771 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 771);
+      /* parser/parser_prod.nit:824 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 824);
     }
-    /* ./parser//parser_prod.nit:773 */
+    /* parser/parser_prod.nit:826 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInterfaceClasskind___visit_all[] = "parser_prod::AInterfaceClasskind::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AInterfaceClasskind___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 777;
+  fra.me.line = 830;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:779 */
+  /* parser/parser_prod.nit:832 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 779);
+    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 832);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEnumClasskind___empty_init[] = "parser_prod::AEnumClasskind::empty_init";
 void parser___parser_prod___AEnumClasskind___empty_init(val_t p0, int* init_table){
   int itpos29 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEnumClasskind].i;
   struct {struct stack_frame_t me;} fra;
@@ -4260,51 +4835,58 @@ void parser___parser_prod___AEnumClasskind___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos29]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 783;
+  fra.me.line = 836;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos29] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEnumClasskind___init_aenumclasskind[] = "parser_prod::AEnumClasskind::init_aenumclasskind";
 void parser___parser_prod___AEnumClasskind___init_aenumclasskind(val_t p0, val_t p1, int* init_table){
   int itpos30 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEnumClasskind].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos30]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 785;
+  fra.me.line = 838;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___init_aenumclasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:789 */
-  CALL_parser___parser_prod___AEnumClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:790 */
+  /* parser/parser_prod.nit:838 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:842 */
+  CALL_parser___parser_prod___AEnumClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:843 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 790);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 843);
   }
-  ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:791 */
+  ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:844 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 791);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 844);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos30] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEnumClasskind___replace_child[] = "parser_prod::AEnumClasskind::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -4312,10 +4894,11 @@ void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 794;
+  fra.me.line = 847;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -4323,11 +4906,11 @@ void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:796 */
+  /* parser/parser_prod.nit:849 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 796);
+    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 849);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4337,13 +4920,13 @@ void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:797 */
+    /* parser/parser_prod.nit:850 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -4352,56 +4935,59 @@ void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:798 */
+      /* parser/parser_prod.nit:851 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 798);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 851);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:799 */
+      /* parser/parser_prod.nit:852 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwenum, ID_parser___parser_nodes___TKwenum)) /*cast TKwenum*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 799);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 852);
       }
-      /* ./parser//parser_prod.nit:800 */
+      /* parser/parser_prod.nit:853 */
       ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:802 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 802);
+      /* parser/parser_prod.nit:855 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 855);
     }
-    /* ./parser//parser_prod.nit:804 */
+    /* parser/parser_prod.nit:857 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEnumClasskind___visit_all[] = "parser_prod::AEnumClasskind::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AEnumClasskind___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 808;
+  fra.me.line = 861;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:810 */
+  /* parser/parser_prod.nit:863 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 810);
+    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 863);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternClasskind___empty_init[] = "parser_prod::AExternClasskind::empty_init";
 void parser___parser_prod___AExternClasskind___empty_init(val_t p0, int* init_table){
   int itpos31 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternClasskind].i;
   struct {struct stack_frame_t me;} fra;
@@ -4409,51 +4995,58 @@ void parser___parser_prod___AExternClasskind___empty_init(val_t p0, int* init_ta
   if (init_table[itpos31]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 814;
+  fra.me.line = 867;
   fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos31] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternClasskind___init_aexternclasskind[] = "parser_prod::AExternClasskind::init_aexternclasskind";
 void parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1, int* init_table){
   int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternClasskind].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos32]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 816;
+  fra.me.line = 869;
   fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___init_aexternclasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:820 */
-  CALL_parser___parser_prod___AExternClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:821 */
+  /* parser/parser_prod.nit:869 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:873 */
+  CALL_parser___parser_prod___AExternClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:874 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 821);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 874);
   }
-  ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:822 */
+  ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:875 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 822);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 875);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos32] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternClasskind___replace_child[] = "parser_prod::AExternClasskind::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -4461,10 +5054,11 @@ void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 825;
+  fra.me.line = 878;
   fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -4472,11 +5066,11 @@ void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:827 */
+  /* parser/parser_prod.nit:880 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 827);
+    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 880);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4486,13 +5080,13 @@ void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:828 */
+    /* parser/parser_prod.nit:881 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -4501,56 +5095,59 @@ void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:829 */
+      /* parser/parser_prod.nit:882 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 829);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 882);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:830 */
+      /* parser/parser_prod.nit:883 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwextern, ID_parser___parser_nodes___TKwextern)) /*cast TKwextern*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 830);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 883);
       }
-      /* ./parser//parser_prod.nit:831 */
+      /* parser/parser_prod.nit:884 */
       ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:833 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 833);
+      /* parser/parser_prod.nit:886 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 886);
     }
-    /* ./parser//parser_prod.nit:835 */
+    /* parser/parser_prod.nit:888 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternClasskind___visit_all[] = "parser_prod::AExternClasskind::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AExternClasskind___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 839;
+  fra.me.line = 892;
   fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:841 */
+  /* parser/parser_prod.nit:894 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 841);
+    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 894);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFormaldef___empty_init[] = "parser_prod::AFormaldef::empty_init";
 void parser___parser_prod___AFormaldef___empty_init(val_t p0, int* init_table){
   int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFormaldef].i;
   struct {struct stack_frame_t me;} fra;
@@ -4558,59 +5155,65 @@ void parser___parser_prod___AFormaldef___empty_init(val_t p0, int* init_table){
   if (init_table[itpos33]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 845;
+  fra.me.line = 898;
   fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos33] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFormaldef___init_aformaldef[] = "parser_prod::AFormaldef::init_aformaldef";
 void parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFormaldef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos34]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 847;
+  fra.me.line = 900;
   fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___init_aformaldef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:852 */
-  CALL_parser___parser_prod___AFormaldef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:853 */
+  /* parser/parser_prod.nit:900 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:905 */
+  CALL_parser___parser_prod___AFormaldef___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:906 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 853);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 906);
   }
-  ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:854 */
+  ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:907 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 854);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 907);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:855 */
-  ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:856 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:908 */
+  ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:909 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -4619,17 +5222,18 @@ void parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:857 */
+    /* parser/parser_prod.nit:910 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 857);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 910);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos34] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFormaldef___replace_child[] = "parser_prod::AFormaldef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -4637,10 +5241,11 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 861;
+  fra.me.line = 914;
   fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -4648,11 +5253,11 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:863 */
+  /* parser/parser_prod.nit:916 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 863);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 916);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4662,13 +5267,13 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:864 */
+    /* parser/parser_prod.nit:917 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -4677,35 +5282,35 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:865 */
+      /* parser/parser_prod.nit:918 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 865);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 918);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:866 */
+      /* parser/parser_prod.nit:919 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 866);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 919);
       }
-      /* ./parser//parser_prod.nit:867 */
+      /* parser/parser_prod.nit:920 */
       ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:869 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 869);
+      /* parser/parser_prod.nit:922 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 922);
     }
-    /* ./parser//parser_prod.nit:871 */
+    /* parser/parser_prod.nit:924 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:873 */
+  /* parser/parser_prod.nit:926 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -4713,13 +5318,13 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:874 */
+    /* parser/parser_prod.nit:927 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -4728,83 +5333,89 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:875 */
+      /* parser/parser_prod.nit:928 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 875);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 928);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:876 */
+      /* parser/parser_prod.nit:929 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 876);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 929);
       }
-      /* ./parser//parser_prod.nit:877 */
+      /* parser/parser_prod.nit:930 */
       ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:879 */
+      /* parser/parser_prod.nit:932 */
       ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:881 */
+    /* parser/parser_prod.nit:934 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFormaldef___visit_all[] = "parser_prod::AFormaldef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 885;
+  fra.me.line = 938;
   fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:887 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:938 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:940 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 887);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 940);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:888 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:941 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:889 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+    /* parser/parser_prod.nit:942 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 889);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 942);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperclass___empty_init[] = "parser_prod::ASuperclass::empty_init";
 void parser___parser_prod___ASuperclass___empty_init(val_t p0, int* init_table){
   int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperclass].i;
   struct {struct stack_frame_t me;} fra;
@@ -4812,48 +5423,54 @@ void parser___parser_prod___ASuperclass___empty_init(val_t p0, int* init_table){
   if (init_table[itpos35]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 894;
+  fra.me.line = 947;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos35] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperclass___init_asuperclass[] = "parser_prod::ASuperclass::init_asuperclass";
 void parser___parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperclass].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos36]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 896;
+  fra.me.line = 949;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___init_asuperclass;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:902 */
-  CALL_parser___parser_prod___ASuperclass___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:903 */
-  ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:904 */
+  /* parser/parser_prod.nit:949 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:955 */
+  CALL_parser___parser_prod___ASuperclass___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:956 */
+  ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:957 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -4862,22 +5479,22 @@ void parser___parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:905 */
+    /* parser/parser_prod.nit:958 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 905);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 958);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:907 */
-  ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:908 */
+  /* parser/parser_prod.nit:960 */
+  ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:961 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -4886,30 +5503,31 @@ void parser___parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:909 */
+    /* parser/parser_prod.nit:962 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 909);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 962);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:911 */
+  /* parser/parser_prod.nit:964 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 911);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 964);
   }
-  ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:912 */
+  ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:965 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 912);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 965);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos36] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperclass___replace_child[] = "parser_prod::ASuperclass::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -4917,10 +5535,11 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 915;
+  fra.me.line = 968;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -4928,14 +5547,14 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:917 */
+  /* parser/parser_prod.nit:970 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -4943,13 +5562,13 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:918 */
+    /* parser/parser_prod.nit:971 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -4958,35 +5577,35 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:919 */
+      /* parser/parser_prod.nit:972 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 919);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 972);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:920 */
+      /* parser/parser_prod.nit:973 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwspecial, ID_parser___parser_nodes___TKwspecial)) /*cast TKwspecial*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 920);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 973);
       }
-      /* ./parser//parser_prod.nit:921 */
+      /* parser/parser_prod.nit:974 */
       ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:923 */
+      /* parser/parser_prod.nit:976 */
       ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:925 */
+    /* parser/parser_prod.nit:978 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:927 */
+  /* parser/parser_prod.nit:980 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -4994,13 +5613,13 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:928 */
+    /* parser/parser_prod.nit:981 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5009,32 +5628,32 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:929 */
+      /* parser/parser_prod.nit:982 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 929);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 982);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:930 */
+      /* parser/parser_prod.nit:983 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 930);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 983);
       }
-      /* ./parser//parser_prod.nit:931 */
+      /* parser/parser_prod.nit:984 */
       ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:933 */
+      /* parser/parser_prod.nit:986 */
       ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:935 */
+    /* parser/parser_prod.nit:988 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:937 */
+  /* parser/parser_prod.nit:990 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 937);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 990);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -5044,13 +5663,13 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:938 */
+    /* parser/parser_prod.nit:991 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5059,108 +5678,114 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:939 */
+      /* parser/parser_prod.nit:992 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 939);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 992);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:940 */
+      /* parser/parser_prod.nit:993 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 940);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 993);
       }
-      /* ./parser//parser_prod.nit:941 */
+      /* parser/parser_prod.nit:994 */
       ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:943 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 943);
+      /* parser/parser_prod.nit:996 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 996);
     }
-    /* ./parser//parser_prod.nit:945 */
+    /* parser/parser_prod.nit:998 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperclass___visit_all[] = "parser_prod::ASuperclass::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASuperclass___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 949;
+  fra.me.line = 1002;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:951 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1002 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1004 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:952 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwspecial, ID_parser___parser_nodes___TKwspecial)) /*cast TKwspecial*/;
+    /* parser/parser_prod.nit:1005 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwspecial, ID_parser___parser_nodes___TKwspecial)) /*cast TKwspecial*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 952);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1005);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:954 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1007 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:955 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
+    /* parser/parser_prod.nit:1008 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 955);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1008);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:957 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:1010 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 957);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 1010);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrPropdef___empty_init[] = "parser_prod::AAttrPropdef::empty_init";
 void parser___parser_prod___AAttrPropdef___empty_init(val_t p0, int* init_table){
   int itpos37 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrPropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -5168,29 +5793,32 @@ void parser___parser_prod___AAttrPropdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos37]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 961;
+  fra.me.line = 1014;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos37] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrPropdef___init_aattrpropdef[] = "parser_prod::AAttrPropdef::init_aattrpropdef";
 void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, int* init_table){
   int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos38]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 963;
+  fra.me.line = 1016;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___init_aattrpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5202,6 +5830,7 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -5213,17 +5842,19 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   fra.me.REG[8] = p8;
   fra.me.REG[9] = p9;
   fra.me.REG[10] = p10;
-  /* ./parser//parser_prod.nit:976 */
-  CALL_parser___parser_prod___AAttrPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:977 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:978 */
+  /* parser/parser_prod.nit:1016 */
+  fra.me.REG[11] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1029 */
+  CALL_parser___parser_prod___AAttrPropdef___empty_init(fra.me.REG[11])(fra.me.REG[11], init_table);
+  /* parser/parser_prod.nit:1030 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[11]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1031 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -5232,22 +5863,22 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:979 */
+    /* parser/parser_prod.nit:1032 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 979);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1032);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[11]);
   }
-  /* ./parser//parser_prod.nit:981 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:982 */
+  /* parser/parser_prod.nit:1034 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[11]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1035 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5256,22 +5887,22 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:983 */
+    /* parser/parser_prod.nit:1036 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 983);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1036);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[11]);
   }
-  /* ./parser//parser_prod.nit:985 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:986 */
+  /* parser/parser_prod.nit:1038 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[11]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1039 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
@@ -5280,22 +5911,22 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:987 */
+    /* parser/parser_prod.nit:1040 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 987);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1040);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[11]);
   }
-  /* ./parser//parser_prod.nit:989 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:990 */
+  /* parser/parser_prod.nit:1042 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[11]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1043 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
@@ -5304,48 +5935,48 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:991 */
+    /* parser/parser_prod.nit:1044 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 991);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1044);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[11]);
   }
-  /* ./parser//parser_prod.nit:993 */
+  /* parser/parser_prod.nit:1046 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 993);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1046);
   }
-  ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:994 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[11]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1047 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 994);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1047);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:995 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[11]);
+  /* parser/parser_prod.nit:1048 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 995);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1048);
   }
-  ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:996 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[11]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1049 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 996);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1049);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:997 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[7];
-  /* ./parser//parser_prod.nit:998 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[11]);
+  /* parser/parser_prod.nit:1050 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[11]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:1051 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
@@ -5354,22 +5985,22 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:999 */
+    /* parser/parser_prod.nit:1052 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 999);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1052);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[11]);
   }
-  /* ./parser//parser_prod.nit:1001 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = fra.me.REG[8];
-  /* ./parser//parser_prod.nit:1002 */
+  /* parser/parser_prod.nit:1054 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[11]) = fra.me.REG[8];
+  /* parser/parser_prod.nit:1055 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
@@ -5378,22 +6009,22 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1003 */
+    /* parser/parser_prod.nit:1056 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1003);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1056);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[11]);
   }
-  /* ./parser//parser_prod.nit:1005 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[9];
-  /* ./parser//parser_prod.nit:1006 */
+  /* parser/parser_prod.nit:1058 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[11]) = fra.me.REG[9];
+  /* parser/parser_prod.nit:1059 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
@@ -5402,22 +6033,22 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1007 */
+    /* parser/parser_prod.nit:1060 */
     REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1007);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1060);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[11]);
   }
-  /* ./parser//parser_prod.nit:1009 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[10];
-  /* ./parser//parser_prod.nit:1010 */
+  /* parser/parser_prod.nit:1062 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[11]) = fra.me.REG[10];
+  /* parser/parser_prod.nit:1063 */
   REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[10])(fra.me.REG[10], NIT_NULL);
@@ -5426,17 +6057,18 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1011 */
+    /* parser/parser_prod.nit:1064 */
     REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1011);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1064);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[11]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos38] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrPropdef___replace_child[] = "parser_prod::AAttrPropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -5444,10 +6076,11 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1015;
+  fra.me.line = 1068;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5455,14 +6088,14 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:1017 */
+  /* parser/parser_prod.nit:1070 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -5470,13 +6103,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1018 */
+    /* parser/parser_prod.nit:1071 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5485,35 +6118,35 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1019 */
+      /* parser/parser_prod.nit:1072 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1019);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1072);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1020 */
+      /* parser/parser_prod.nit:1073 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1020);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1073);
       }
-      /* ./parser//parser_prod.nit:1021 */
+      /* parser/parser_prod.nit:1074 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1023 */
+      /* parser/parser_prod.nit:1076 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1025 */
+    /* parser/parser_prod.nit:1078 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1027 */
+  /* parser/parser_prod.nit:1080 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -5521,13 +6154,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1028 */
+    /* parser/parser_prod.nit:1081 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5536,35 +6169,35 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1029 */
+      /* parser/parser_prod.nit:1082 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1029);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1082);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1030 */
+      /* parser/parser_prod.nit:1083 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1030);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1083);
       }
-      /* ./parser//parser_prod.nit:1031 */
+      /* parser/parser_prod.nit:1084 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1033 */
+      /* parser/parser_prod.nit:1086 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1035 */
+    /* parser/parser_prod.nit:1088 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1037 */
+  /* parser/parser_prod.nit:1090 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -5572,13 +6205,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1038 */
+    /* parser/parser_prod.nit:1091 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5587,35 +6220,35 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1039 */
+      /* parser/parser_prod.nit:1092 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1039);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1092);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1040 */
+      /* parser/parser_prod.nit:1093 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1040);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1093);
       }
-      /* ./parser//parser_prod.nit:1041 */
+      /* parser/parser_prod.nit:1094 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1043 */
+      /* parser/parser_prod.nit:1096 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1045 */
+    /* parser/parser_prod.nit:1098 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1047 */
+  /* parser/parser_prod.nit:1100 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -5623,13 +6256,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1048 */
+    /* parser/parser_prod.nit:1101 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5638,32 +6271,32 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1049 */
+      /* parser/parser_prod.nit:1102 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1049);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1102);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1050 */
+      /* parser/parser_prod.nit:1103 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1050);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1103);
       }
-      /* ./parser//parser_prod.nit:1051 */
+      /* parser/parser_prod.nit:1104 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1053 */
+      /* parser/parser_prod.nit:1106 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1055 */
+    /* parser/parser_prod.nit:1108 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1057 */
+  /* parser/parser_prod.nit:1110 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1057);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1110);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -5673,13 +6306,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1058 */
+    /* parser/parser_prod.nit:1111 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5688,32 +6321,32 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1059 */
+      /* parser/parser_prod.nit:1112 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1059);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1112);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1060 */
+      /* parser/parser_prod.nit:1113 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1060);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1113);
       }
-      /* ./parser//parser_prod.nit:1061 */
+      /* parser/parser_prod.nit:1114 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1063 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1063);
+      /* parser/parser_prod.nit:1116 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1116);
     }
-    /* ./parser//parser_prod.nit:1065 */
+    /* parser/parser_prod.nit:1118 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1067 */
+  /* parser/parser_prod.nit:1120 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1067);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1120);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -5723,13 +6356,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1068 */
+    /* parser/parser_prod.nit:1121 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5738,35 +6371,35 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1069 */
+      /* parser/parser_prod.nit:1122 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1069);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1122);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1070 */
+      /* parser/parser_prod.nit:1123 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast TKwvar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1070);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1123);
       }
-      /* ./parser//parser_prod.nit:1071 */
+      /* parser/parser_prod.nit:1124 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1073 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1073);
+      /* parser/parser_prod.nit:1126 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1126);
     }
-    /* ./parser//parser_prod.nit:1075 */
+    /* parser/parser_prod.nit:1128 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1077 */
+  /* parser/parser_prod.nit:1130 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -5774,13 +6407,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1078 */
+    /* parser/parser_prod.nit:1131 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5789,35 +6422,35 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1079 */
+      /* parser/parser_prod.nit:1132 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1079);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1132);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1080 */
+      /* parser/parser_prod.nit:1133 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1080);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1133);
       }
-      /* ./parser//parser_prod.nit:1081 */
+      /* parser/parser_prod.nit:1134 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1083 */
+      /* parser/parser_prod.nit:1136 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1085 */
+    /* parser/parser_prod.nit:1138 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1087 */
+  /* parser/parser_prod.nit:1140 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -5825,13 +6458,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1088 */
+    /* parser/parser_prod.nit:1141 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5840,35 +6473,35 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1089 */
+      /* parser/parser_prod.nit:1142 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1089);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1142);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1090 */
+      /* parser/parser_prod.nit:1143 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1090);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1143);
       }
-      /* ./parser//parser_prod.nit:1091 */
+      /* parser/parser_prod.nit:1144 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1093 */
+      /* parser/parser_prod.nit:1146 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1095 */
+    /* parser/parser_prod.nit:1148 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1097 */
+  /* parser/parser_prod.nit:1150 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -5876,13 +6509,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1098 */
+    /* parser/parser_prod.nit:1151 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5891,35 +6524,35 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1099 */
+      /* parser/parser_prod.nit:1152 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1099);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1152);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1100 */
+      /* parser/parser_prod.nit:1153 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1100);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1153);
       }
-      /* ./parser//parser_prod.nit:1101 */
+      /* parser/parser_prod.nit:1154 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1103 */
+      /* parser/parser_prod.nit:1156 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1105 */
+    /* parser/parser_prod.nit:1158 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1107 */
+  /* parser/parser_prod.nit:1160 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -5927,13 +6560,13 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1108 */
+    /* parser/parser_prod.nit:1161 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -5942,266 +6575,272 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1109 */
+      /* parser/parser_prod.nit:1162 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1109);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1162);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1110 */
+      /* parser/parser_prod.nit:1163 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1110);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1163);
       }
-      /* ./parser//parser_prod.nit:1111 */
+      /* parser/parser_prod.nit:1164 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1113 */
+      /* parser/parser_prod.nit:1166 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1115 */
+    /* parser/parser_prod.nit:1168 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrPropdef___visit_all[] = "parser_prod::AAttrPropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1119;
+  fra.me.line = 1172;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1121 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1172 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1174 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1122 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:1175 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1122);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1175);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1124 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1177 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1125 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
+    /* parser/parser_prod.nit:1178 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1125);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1178);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1127 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1180 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1128 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
+    /* parser/parser_prod.nit:1181 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1128);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1181);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1130 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1183 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1131 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:1184 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1131);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1184);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1133 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:1186 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1133);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1186);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1134 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1187 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1134);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1187);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1135 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1188 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1136 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
+    /* parser/parser_prod.nit:1189 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1136);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1189);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1138 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1191 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1139 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
+    /* parser/parser_prod.nit:1192 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1139);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1192);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1141 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1194 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1142 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+    /* parser/parser_prod.nit:1195 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1142);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1195);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1144 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1197 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1145 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:1198 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1145);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1198);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMethPropdef___empty_init[] = "parser_prod::AMethPropdef::empty_init";
 void parser___parser_prod___AMethPropdef___empty_init(val_t p0, int* init_table){
   int itpos39 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -6209,52 +6848,58 @@ void parser___parser_prod___AMethPropdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos39]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1150;
+  fra.me.line = 1203;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos39] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMethPropdef___init_amethpropdef[] = "parser_prod::AMethPropdef::init_amethpropdef";
 void parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
   int itpos40 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMethPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos40]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1152;
+  fra.me.line = 1205;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:1160 */
-  CALL_parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1161 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1162 */
+  /* parser/parser_prod.nit:1205 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1213 */
+  CALL_parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:1214 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1215 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -6263,22 +6908,22 @@ void parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1163 */
+    /* parser/parser_prod.nit:1216 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1163);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1216);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
   }
-  /* ./parser//parser_prod.nit:1165 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:1166 */
+  /* parser/parser_prod.nit:1218 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1219 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6287,56 +6932,57 @@ void parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1167 */
+    /* parser/parser_prod.nit:1220 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1167);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1220);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
   }
-  /* ./parser//parser_prod.nit:1169 */
+  /* parser/parser_prod.nit:1222 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1169);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1222);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:1170 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[6]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1223 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1170);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1223);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1171 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:1224 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1171);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1224);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:1172 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1225 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1172);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1225);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1173 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:1226 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1173);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1226);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:1174 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1227 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1174);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1227);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   stack_frame_head = fra.me.prev;
   init_table[itpos40] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMethPropdef___replace_child[] = "parser_prod::AMethPropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -6344,10 +6990,11 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1177;
+  fra.me.line = 1230;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6355,14 +7002,14 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:1179 */
+  /* parser/parser_prod.nit:1232 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -6370,13 +7017,13 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1180 */
+    /* parser/parser_prod.nit:1233 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6385,35 +7032,35 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1181 */
+      /* parser/parser_prod.nit:1234 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1181);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1234);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1182 */
+      /* parser/parser_prod.nit:1235 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1182);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1235);
       }
-      /* ./parser//parser_prod.nit:1183 */
+      /* parser/parser_prod.nit:1236 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1185 */
+      /* parser/parser_prod.nit:1238 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1187 */
+    /* parser/parser_prod.nit:1240 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1189 */
+  /* parser/parser_prod.nit:1242 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -6421,13 +7068,13 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1190 */
+    /* parser/parser_prod.nit:1243 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6436,35 +7083,35 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1191 */
+      /* parser/parser_prod.nit:1244 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1191);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1244);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1192 */
+      /* parser/parser_prod.nit:1245 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1192);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1245);
       }
-      /* ./parser//parser_prod.nit:1193 */
+      /* parser/parser_prod.nit:1246 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1195 */
+      /* parser/parser_prod.nit:1248 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1197 */
+    /* parser/parser_prod.nit:1250 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1199 */
+  /* parser/parser_prod.nit:1252 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -6472,13 +7119,13 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1200 */
+    /* parser/parser_prod.nit:1253 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6487,35 +7134,35 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1201 */
+      /* parser/parser_prod.nit:1254 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1201);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1254);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1202 */
+      /* parser/parser_prod.nit:1255 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1202);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1255);
       }
-      /* ./parser//parser_prod.nit:1203 */
+      /* parser/parser_prod.nit:1256 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1205 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1205);
+      /* parser/parser_prod.nit:1258 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1258);
     }
-    /* ./parser//parser_prod.nit:1207 */
+    /* parser/parser_prod.nit:1260 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1209 */
+  /* parser/parser_prod.nit:1262 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -6523,13 +7170,13 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1210 */
+    /* parser/parser_prod.nit:1263 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6538,35 +7185,35 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1211 */
+      /* parser/parser_prod.nit:1264 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1211);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1264);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1212 */
+      /* parser/parser_prod.nit:1265 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1212);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1265);
       }
-      /* ./parser//parser_prod.nit:1213 */
+      /* parser/parser_prod.nit:1266 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1215 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1215);
+      /* parser/parser_prod.nit:1268 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1268);
     }
-    /* ./parser//parser_prod.nit:1217 */
+    /* parser/parser_prod.nit:1270 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1219 */
+  /* parser/parser_prod.nit:1272 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -6574,13 +7221,13 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1220 */
+    /* parser/parser_prod.nit:1273 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6589,109 +7236,115 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1221 */
+      /* parser/parser_prod.nit:1274 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1221);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1274);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1222 */
+      /* parser/parser_prod.nit:1275 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1222);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1275);
       }
-      /* ./parser//parser_prod.nit:1223 */
+      /* parser/parser_prod.nit:1276 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1225 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1225);
+      /* parser/parser_prod.nit:1278 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1278);
     }
-    /* ./parser//parser_prod.nit:1227 */
+    /* parser/parser_prod.nit:1280 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMethPropdef___visit_all[] = "parser_prod::AMethPropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1231;
+  fra.me.line = 1284;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1233 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1284 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1286 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1234 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:1287 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1234);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1287);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1236 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1289 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1237 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:1290 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1237);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1290);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1239 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* parser/parser_prod.nit:1292 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1293 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1294 */
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1240 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1241 */
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADeferredMethPropdef___empty_init[] = "parser_prod::ADeferredMethPropdef::empty_init";
 void parser___parser_prod___ADeferredMethPropdef___empty_init(val_t p0, int* init_table){
   int itpos41 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADeferredMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -6699,29 +7352,32 @@ void parser___parser_prod___ADeferredMethPropdef___empty_init(val_t p0, int* ini
   if (init_table[itpos41]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1245;
+  fra.me.line = 1298;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos41] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef[] = "parser_prod::ADeferredMethPropdef::init_adeferredmethpropdef";
 void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
   int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADeferredMethPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos42]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1247;
+  fra.me.line = 1300;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6729,6 +7385,7 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -6736,17 +7393,19 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:1256 */
-  CALL_parser___parser_prod___ADeferredMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1257 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1258 */
+  /* parser/parser_prod.nit:1300 */
+  fra.me.REG[7] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1309 */
+  CALL_parser___parser_prod___ADeferredMethPropdef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
+  /* parser/parser_prod.nit:1310 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[7]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1311 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -6755,22 +7414,22 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1259 */
+    /* parser/parser_prod.nit:1312 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1259);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1312);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
   }
-  /* ./parser//parser_prod.nit:1261 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:1262 */
+  /* parser/parser_prod.nit:1314 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[7]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1315 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6779,69 +7438,70 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1263 */
+    /* parser/parser_prod.nit:1316 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1263);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1316);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
   }
-  /* ./parser//parser_prod.nit:1265 */
+  /* parser/parser_prod.nit:1318 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1265);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1318);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:1266 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[7]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1319 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1266);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1319);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1267 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:1320 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1267);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1320);
   }
-  ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:1268 */
+  ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[7]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1321 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1268);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1321);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1269 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:1322 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1269);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1322);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:1270 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[7]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1323 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1270);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1323);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1271 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+  /* parser/parser_prod.nit:1324 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1271);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1324);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:1272 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[7]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1325 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1272);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1325);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
   init_table[itpos42] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADeferredMethPropdef___replace_child[] = "parser_prod::ADeferredMethPropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -6849,10 +7509,11 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1275;
+  fra.me.line = 1328;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6860,14 +7521,14 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:1277 */
+  /* parser/parser_prod.nit:1330 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -6875,13 +7536,13 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1278 */
+    /* parser/parser_prod.nit:1331 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6890,35 +7551,35 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1279 */
+      /* parser/parser_prod.nit:1332 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1279);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1332);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1280 */
+      /* parser/parser_prod.nit:1333 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1280);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1333);
       }
-      /* ./parser//parser_prod.nit:1281 */
+      /* parser/parser_prod.nit:1334 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1283 */
+      /* parser/parser_prod.nit:1336 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1285 */
+    /* parser/parser_prod.nit:1338 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1287 */
+  /* parser/parser_prod.nit:1340 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -6926,13 +7587,13 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1288 */
+    /* parser/parser_prod.nit:1341 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6941,35 +7602,35 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1289 */
+      /* parser/parser_prod.nit:1342 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1289);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1342);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1290 */
+      /* parser/parser_prod.nit:1343 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1290);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1343);
       }
-      /* ./parser//parser_prod.nit:1291 */
+      /* parser/parser_prod.nit:1344 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1293 */
+      /* parser/parser_prod.nit:1346 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1295 */
+    /* parser/parser_prod.nit:1348 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1297 */
+  /* parser/parser_prod.nit:1350 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -6977,13 +7638,13 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1298 */
+    /* parser/parser_prod.nit:1351 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -6992,32 +7653,32 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1299 */
+      /* parser/parser_prod.nit:1352 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1299);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1352);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1300 */
+      /* parser/parser_prod.nit:1353 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1300);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1353);
       }
-      /* ./parser//parser_prod.nit:1301 */
+      /* parser/parser_prod.nit:1354 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1303 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1303);
+      /* parser/parser_prod.nit:1356 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1356);
     }
-    /* ./parser//parser_prod.nit:1305 */
+    /* parser/parser_prod.nit:1358 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1307 */
+  /* parser/parser_prod.nit:1360 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1307);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1360);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -7027,13 +7688,13 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1308 */
+    /* parser/parser_prod.nit:1361 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7042,35 +7703,35 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1309 */
+      /* parser/parser_prod.nit:1362 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1309);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1362);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1310 */
+      /* parser/parser_prod.nit:1363 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast TKwmeth*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1310);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1363);
       }
-      /* ./parser//parser_prod.nit:1311 */
+      /* parser/parser_prod.nit:1364 */
       ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1313 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1313);
+      /* parser/parser_prod.nit:1366 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1366);
     }
-    /* ./parser//parser_prod.nit:1315 */
+    /* parser/parser_prod.nit:1368 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1317 */
+  /* parser/parser_prod.nit:1370 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -7078,13 +7739,13 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1318 */
+    /* parser/parser_prod.nit:1371 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7093,35 +7754,35 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1319 */
+      /* parser/parser_prod.nit:1372 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1319);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1372);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1320 */
+      /* parser/parser_prod.nit:1373 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1320);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1373);
       }
-      /* ./parser//parser_prod.nit:1321 */
+      /* parser/parser_prod.nit:1374 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1323 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1323);
+      /* parser/parser_prod.nit:1376 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1376);
     }
-    /* ./parser//parser_prod.nit:1325 */
+    /* parser/parser_prod.nit:1378 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1327 */
+  /* parser/parser_prod.nit:1380 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -7129,13 +7790,13 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1328 */
+    /* parser/parser_prod.nit:1381 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7144,117 +7805,123 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1329 */
+      /* parser/parser_prod.nit:1382 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1329);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1382);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1330 */
+      /* parser/parser_prod.nit:1383 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1330);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1383);
       }
-      /* ./parser//parser_prod.nit:1331 */
+      /* parser/parser_prod.nit:1384 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1333 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1333);
+      /* parser/parser_prod.nit:1386 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1386);
     }
-    /* ./parser//parser_prod.nit:1335 */
+    /* parser/parser_prod.nit:1388 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADeferredMethPropdef___visit_all[] = "parser_prod::ADeferredMethPropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1339;
+  fra.me.line = 1392;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1341 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1392 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1394 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1342 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:1395 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1342);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1395);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1344 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1397 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1345 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:1398 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1345);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1398);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1347 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1348 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:1400 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1401 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1348);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1401);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1349 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1402 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1403 */
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1350 */
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInternMethPropdef___empty_init[] = "parser_prod::AInternMethPropdef::empty_init";
 void parser___parser_prod___AInternMethPropdef___empty_init(val_t p0, int* init_table){
   int itpos43 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInternMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -7262,29 +7929,32 @@ void parser___parser_prod___AInternMethPropdef___empty_init(val_t p0, int* init_
   if (init_table[itpos43]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1354;
+  fra.me.line = 1407;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos43] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef[] = "parser_prod::AInternMethPropdef::init_ainternmethpropdef";
 void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
   int itpos44 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInternMethPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos44]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1356;
+  fra.me.line = 1409;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7292,6 +7962,7 @@ void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -7299,17 +7970,19 @@ void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:1365 */
-  CALL_parser___parser_prod___AInternMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1366 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1367 */
+  /* parser/parser_prod.nit:1409 */
+  fra.me.REG[7] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1418 */
+  CALL_parser___parser_prod___AInternMethPropdef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
+  /* parser/parser_prod.nit:1419 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[7]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1420 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -7318,22 +7991,22 @@ void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1368 */
+    /* parser/parser_prod.nit:1421 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1368);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1421);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
   }
-  /* ./parser//parser_prod.nit:1370 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:1371 */
+  /* parser/parser_prod.nit:1423 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[7]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1424 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7342,69 +8015,70 @@ void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1372 */
+    /* parser/parser_prod.nit:1425 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1372);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1425);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
   }
-  /* ./parser//parser_prod.nit:1374 */
+  /* parser/parser_prod.nit:1427 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1374);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1427);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:1375 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[7]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1428 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1375);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1428);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1376 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:1429 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1376);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1429);
   }
-  ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:1377 */
+  ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[7]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1430 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1377);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1430);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1378 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:1431 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1378);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1431);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:1379 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[7]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1432 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1379);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1432);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1380 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+  /* parser/parser_prod.nit:1433 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1380);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1433);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:1381 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[7]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1434 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1381);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1434);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
   init_table[itpos44] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInternMethPropdef___replace_child[] = "parser_prod::AInternMethPropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -7412,10 +8086,11 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1384;
+  fra.me.line = 1437;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7423,14 +8098,14 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:1386 */
+  /* parser/parser_prod.nit:1439 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -7438,13 +8113,13 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1387 */
+    /* parser/parser_prod.nit:1440 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7453,35 +8128,35 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1388 */
+      /* parser/parser_prod.nit:1441 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1388);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1441);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1389 */
+      /* parser/parser_prod.nit:1442 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1389);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1442);
       }
-      /* ./parser//parser_prod.nit:1390 */
+      /* parser/parser_prod.nit:1443 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1392 */
+      /* parser/parser_prod.nit:1445 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1394 */
+    /* parser/parser_prod.nit:1447 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1396 */
+  /* parser/parser_prod.nit:1449 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -7489,13 +8164,13 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1397 */
+    /* parser/parser_prod.nit:1450 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7504,35 +8179,35 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1398 */
+      /* parser/parser_prod.nit:1451 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1398);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1451);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1399 */
+      /* parser/parser_prod.nit:1452 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1399);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1452);
       }
-      /* ./parser//parser_prod.nit:1400 */
+      /* parser/parser_prod.nit:1453 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1402 */
+      /* parser/parser_prod.nit:1455 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1404 */
+    /* parser/parser_prod.nit:1457 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1406 */
+  /* parser/parser_prod.nit:1459 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -7540,13 +8215,13 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1407 */
+    /* parser/parser_prod.nit:1460 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7555,32 +8230,32 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1408 */
+      /* parser/parser_prod.nit:1461 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1408);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1461);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1409 */
+      /* parser/parser_prod.nit:1462 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1409);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1462);
       }
-      /* ./parser//parser_prod.nit:1410 */
+      /* parser/parser_prod.nit:1463 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1412 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1412);
+      /* parser/parser_prod.nit:1465 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1465);
     }
-    /* ./parser//parser_prod.nit:1414 */
+    /* parser/parser_prod.nit:1467 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1416 */
+  /* parser/parser_prod.nit:1469 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1416);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1469);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -7590,13 +8265,13 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1417 */
+    /* parser/parser_prod.nit:1470 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7605,35 +8280,35 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1418 */
+      /* parser/parser_prod.nit:1471 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1418);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1471);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1419 */
+      /* parser/parser_prod.nit:1472 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast TKwmeth*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1419);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1472);
       }
-      /* ./parser//parser_prod.nit:1420 */
+      /* parser/parser_prod.nit:1473 */
       ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1422 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1422);
+      /* parser/parser_prod.nit:1475 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1475);
     }
-    /* ./parser//parser_prod.nit:1424 */
+    /* parser/parser_prod.nit:1477 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1426 */
+  /* parser/parser_prod.nit:1479 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -7641,13 +8316,13 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1427 */
+    /* parser/parser_prod.nit:1480 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7656,35 +8331,35 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1428 */
+      /* parser/parser_prod.nit:1481 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1428);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1481);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1429 */
+      /* parser/parser_prod.nit:1482 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1429);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1482);
       }
-      /* ./parser//parser_prod.nit:1430 */
+      /* parser/parser_prod.nit:1483 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1432 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1432);
+      /* parser/parser_prod.nit:1485 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1485);
     }
-    /* ./parser//parser_prod.nit:1434 */
+    /* parser/parser_prod.nit:1487 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1436 */
+  /* parser/parser_prod.nit:1489 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -7692,13 +8367,13 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1437 */
+    /* parser/parser_prod.nit:1490 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7707,117 +8382,123 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1438 */
+      /* parser/parser_prod.nit:1491 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1438);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1491);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1439 */
+      /* parser/parser_prod.nit:1492 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1439);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1492);
       }
-      /* ./parser//parser_prod.nit:1440 */
+      /* parser/parser_prod.nit:1493 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1442 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1442);
+      /* parser/parser_prod.nit:1495 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1495);
     }
-    /* ./parser//parser_prod.nit:1444 */
+    /* parser/parser_prod.nit:1497 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInternMethPropdef___visit_all[] = "parser_prod::AInternMethPropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1448;
+  fra.me.line = 1501;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1450 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1501 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1503 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1451 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:1504 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1451);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1504);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1453 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1506 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1454 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:1507 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1454);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1507);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1456 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1457 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:1509 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1510 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1457);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1510);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1511 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1512 */
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1458 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1459 */
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternMethPropdef___empty_init[] = "parser_prod::AExternMethPropdef::empty_init";
 void parser___parser_prod___AExternMethPropdef___empty_init(val_t p0, int* init_table){
   int itpos45 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -7825,29 +8506,32 @@ void parser___parser_prod___AExternMethPropdef___empty_init(val_t p0, int* init_
   if (init_table[itpos45]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1463;
+  fra.me.line = 1516;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos45] = 1;
   return;
 }
-void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
+static const char LOCATE_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef[] = "parser_prod::AExternMethPropdef::init_aexternmethpropdef";
+void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, int* init_table){
   int itpos46 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternMethPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos46]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1465;
+  fra.me.line = 1518;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7857,6 +8541,8 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -7866,17 +8552,20 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
-  /* ./parser//parser_prod.nit:1476 */
-  CALL_parser___parser_prod___AExternMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1477 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1478 */
+  fra.me.REG[9] = p9;
+  /* parser/parser_prod.nit:1518 */
+  fra.me.REG[10] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1530 */
+  CALL_parser___parser_prod___AExternMethPropdef___empty_init(fra.me.REG[10])(fra.me.REG[10], init_table);
+  /* parser/parser_prod.nit:1531 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[10]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1532 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -7885,22 +8574,22 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1479 */
+    /* parser/parser_prod.nit:1533 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1479);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1533);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[10]);
   }
-  /* ./parser//parser_prod.nit:1481 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:1482 */
+  /* parser/parser_prod.nit:1535 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[10]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1536 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -7909,74 +8598,74 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1483 */
+    /* parser/parser_prod.nit:1537 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1483);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1537);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[10]);
   }
-  /* ./parser//parser_prod.nit:1485 */
+  /* parser/parser_prod.nit:1539 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1485);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1539);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:1486 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[10]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1540 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1486);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1540);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1487 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[10]);
+  /* parser/parser_prod.nit:1541 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1487);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1541);
   }
-  ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:1488 */
+  ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[10]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1542 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1488);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1542);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1489 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[10]);
+  /* parser/parser_prod.nit:1543 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1489);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1543);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:1490 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[10]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1544 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1490);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1544);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1491 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[10]);
+  /* parser/parser_prod.nit:1545 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1491);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1545);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:1492 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[10]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1546 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1492);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1546);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1493 */
-  ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[7];
-  /* ./parser//parser_prod.nit:1494 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[10]);
+  /* parser/parser_prod.nit:1547 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[10]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:1548 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
@@ -7985,22 +8674,22 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1495 */
+    /* parser/parser_prod.nit:1549 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1495);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1549);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[10]);
   }
-  /* ./parser//parser_prod.nit:1497 */
-  ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[8];
-  /* ./parser//parser_prod.nit:1498 */
+  /* parser/parser_prod.nit:1551 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[10]) = fra.me.REG[8];
+  /* parser/parser_prod.nit:1552 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
@@ -8009,17 +8698,42 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1499 */
+    /* parser/parser_prod.nit:1553 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1499);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1553);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[10]);
+  }
+  /* parser/parser_prod.nit:1555 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[10]) = fra.me.REG[9];
+  /* parser/parser_prod.nit:1556 */
+  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1557 */
+    REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1557);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[10]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos46] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternMethPropdef___replace_child[] = "parser_prod::AExternMethPropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -8027,10 +8741,11 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1503;
+  fra.me.line = 1561;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8038,14 +8753,14 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:1505 */
+  /* parser/parser_prod.nit:1563 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8053,13 +8768,13 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1506 */
+    /* parser/parser_prod.nit:1564 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8068,35 +8783,35 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1507 */
+      /* parser/parser_prod.nit:1565 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1507);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1565);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1508 */
+      /* parser/parser_prod.nit:1566 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1508);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1566);
       }
-      /* ./parser//parser_prod.nit:1509 */
+      /* parser/parser_prod.nit:1567 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1511 */
+      /* parser/parser_prod.nit:1569 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1513 */
+    /* parser/parser_prod.nit:1571 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1515 */
+  /* parser/parser_prod.nit:1573 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8104,13 +8819,13 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1516 */
+    /* parser/parser_prod.nit:1574 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8119,35 +8834,35 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1517 */
+      /* parser/parser_prod.nit:1575 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1517);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1575);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1518 */
+      /* parser/parser_prod.nit:1576 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1518);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1576);
       }
-      /* ./parser//parser_prod.nit:1519 */
+      /* parser/parser_prod.nit:1577 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1521 */
+      /* parser/parser_prod.nit:1579 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1523 */
+    /* parser/parser_prod.nit:1581 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1525 */
+  /* parser/parser_prod.nit:1583 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8155,13 +8870,13 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1526 */
+    /* parser/parser_prod.nit:1584 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8170,32 +8885,32 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1527 */
+      /* parser/parser_prod.nit:1585 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1527);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1585);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1528 */
+      /* parser/parser_prod.nit:1586 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1528);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1586);
       }
-      /* ./parser//parser_prod.nit:1529 */
+      /* parser/parser_prod.nit:1587 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1531 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1531);
+      /* parser/parser_prod.nit:1589 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1589);
     }
-    /* ./parser//parser_prod.nit:1533 */
+    /* parser/parser_prod.nit:1591 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1535 */
+  /* parser/parser_prod.nit:1593 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1535);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1593);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -8205,13 +8920,13 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1536 */
+    /* parser/parser_prod.nit:1594 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8220,35 +8935,35 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1537 */
+      /* parser/parser_prod.nit:1595 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1537);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1595);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1538 */
+      /* parser/parser_prod.nit:1596 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast TKwmeth*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1538);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1596);
       }
-      /* ./parser//parser_prod.nit:1539 */
+      /* parser/parser_prod.nit:1597 */
       ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1541 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1541);
+      /* parser/parser_prod.nit:1599 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1599);
     }
-    /* ./parser//parser_prod.nit:1543 */
+    /* parser/parser_prod.nit:1601 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1545 */
+  /* parser/parser_prod.nit:1603 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8256,13 +8971,13 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1546 */
+    /* parser/parser_prod.nit:1604 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8271,35 +8986,35 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1547 */
+      /* parser/parser_prod.nit:1605 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1547);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1605);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1548 */
+      /* parser/parser_prod.nit:1606 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1548);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1606);
       }
-      /* ./parser//parser_prod.nit:1549 */
+      /* parser/parser_prod.nit:1607 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1551 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1551);
+      /* parser/parser_prod.nit:1609 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1609);
     }
-    /* ./parser//parser_prod.nit:1553 */
+    /* parser/parser_prod.nit:1611 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1555 */
+  /* parser/parser_prod.nit:1613 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8307,13 +9022,13 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1556 */
+    /* parser/parser_prod.nit:1614 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8322,35 +9037,35 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1557 */
+      /* parser/parser_prod.nit:1615 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1557);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1615);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1558 */
+      /* parser/parser_prod.nit:1616 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1558);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1616);
       }
-      /* ./parser//parser_prod.nit:1559 */
+      /* parser/parser_prod.nit:1617 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1561 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1561);
+      /* parser/parser_prod.nit:1619 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1619);
     }
-    /* ./parser//parser_prod.nit:1563 */
+    /* parser/parser_prod.nit:1621 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1565 */
+  /* parser/parser_prod.nit:1623 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8358,13 +9073,13 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1566 */
+    /* parser/parser_prod.nit:1624 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8373,35 +9088,35 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1567 */
+      /* parser/parser_prod.nit:1625 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1567);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1625);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1568 */
+      /* parser/parser_prod.nit:1626 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1568);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1626);
       }
-      /* ./parser//parser_prod.nit:1569 */
+      /* parser/parser_prod.nit:1627 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1571 */
+      /* parser/parser_prod.nit:1629 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1573 */
+    /* parser/parser_prod.nit:1631 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1575 */
+  /* parser/parser_prod.nit:1633 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8409,13 +9124,13 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1576 */
+    /* parser/parser_prod.nit:1634 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8424,167 +9139,249 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1577 */
+      /* parser/parser_prod.nit:1635 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1577);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1635);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1578 */
+      /* parser/parser_prod.nit:1636 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1578);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1636);
       }
-      /* ./parser//parser_prod.nit:1579 */
+      /* parser/parser_prod.nit:1637 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1581 */
+      /* parser/parser_prod.nit:1639 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1583 */
+    /* parser/parser_prod.nit:1641 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:1643 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1644 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:1645 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1645);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1646 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1646);
+      }
+      /* parser/parser_prod.nit:1647 */
+      ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:1649 */
+      ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:1651 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternMethPropdef___visit_all[] = "parser_prod::AExternMethPropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1587;
+  fra.me.line = 1655;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1589 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1655 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1657 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1590 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:1658 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1590);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1658);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1592 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1660 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1593 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:1661 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1593);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1661);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1595 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1596 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:1663 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1664 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1596);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1664);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1597 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1598 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1599 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1665 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1666 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1667 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1600 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
+    /* parser/parser_prod.nit:1668 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1600);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1668);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1602 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1670 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1671 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1671);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:1673 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1603 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
+    /* parser/parser_prod.nit:1674 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1603);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1674);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteMethPropdef___empty_init[] = "parser_prod::AConcreteMethPropdef::empty_init";
 void parser___parser_prod___AConcreteMethPropdef___empty_init(val_t p0, int* init_table){
   int itpos47 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -8592,29 +9389,32 @@ void parser___parser_prod___AConcreteMethPropdef___empty_init(val_t p0, int* ini
   if (init_table[itpos47]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1608;
+  fra.me.line = 1679;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos47] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef[] = "parser_prod::AConcreteMethPropdef::init_aconcretemethpropdef";
 void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
   int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteMethPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos48]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1610;
+  fra.me.line = 1681;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8623,6 +9423,7 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -8631,17 +9432,19 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
-  /* ./parser//parser_prod.nit:1620 */
-  CALL_parser___parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1621 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1622 */
+  /* parser/parser_prod.nit:1681 */
+  fra.me.REG[8] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1691 */
+  CALL_parser___parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[8])(fra.me.REG[8], init_table);
+  /* parser/parser_prod.nit:1692 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[8]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1693 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -8650,22 +9453,22 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1623 */
+    /* parser/parser_prod.nit:1694 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1623);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1694);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
   }
-  /* ./parser//parser_prod.nit:1625 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:1626 */
+  /* parser/parser_prod.nit:1696 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[8]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1697 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8674,74 +9477,74 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1627 */
+    /* parser/parser_prod.nit:1698 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1627);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1698);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
   }
-  /* ./parser//parser_prod.nit:1629 */
+  /* parser/parser_prod.nit:1700 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1629);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1700);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:1630 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[8]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1701 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1630);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1701);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1631 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1702 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1631);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1702);
   }
-  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:1632 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[8]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1703 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1632);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1703);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1633 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1704 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1633);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1704);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:1634 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[8]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1705 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1634);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1705);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1635 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1706 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1635);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1706);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:1636 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[8]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1707 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1636);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1707);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1637 */
-  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[7];
-  /* ./parser//parser_prod.nit:1638 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1708 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[8]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:1709 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
@@ -8750,17 +9553,18 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1639 */
+    /* parser/parser_prod.nit:1710 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1639);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1710);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos48] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteMethPropdef___replace_child[] = "parser_prod::AConcreteMethPropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -8768,10 +9572,11 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1643;
+  fra.me.line = 1714;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8779,14 +9584,14 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:1645 */
+  /* parser/parser_prod.nit:1716 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8794,13 +9599,13 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1646 */
+    /* parser/parser_prod.nit:1717 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8809,35 +9614,35 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1647 */
+      /* parser/parser_prod.nit:1718 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1647);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1718);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1648 */
+      /* parser/parser_prod.nit:1719 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1648);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1719);
       }
-      /* ./parser//parser_prod.nit:1649 */
+      /* parser/parser_prod.nit:1720 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1651 */
+      /* parser/parser_prod.nit:1722 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1653 */
+    /* parser/parser_prod.nit:1724 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1655 */
+  /* parser/parser_prod.nit:1726 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8845,13 +9650,13 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1656 */
+    /* parser/parser_prod.nit:1727 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8860,35 +9665,35 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1657 */
+      /* parser/parser_prod.nit:1728 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1657);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1728);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1658 */
+      /* parser/parser_prod.nit:1729 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1658);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1729);
       }
-      /* ./parser//parser_prod.nit:1659 */
+      /* parser/parser_prod.nit:1730 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1661 */
+      /* parser/parser_prod.nit:1732 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1663 */
+    /* parser/parser_prod.nit:1734 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1665 */
+  /* parser/parser_prod.nit:1736 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8896,13 +9701,13 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1666 */
+    /* parser/parser_prod.nit:1737 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8911,35 +9716,35 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1667 */
+      /* parser/parser_prod.nit:1738 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1667);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1738);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1668 */
+      /* parser/parser_prod.nit:1739 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1668);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1739);
       }
-      /* ./parser//parser_prod.nit:1669 */
+      /* parser/parser_prod.nit:1740 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1671 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1671);
+      /* parser/parser_prod.nit:1742 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1742);
     }
-    /* ./parser//parser_prod.nit:1673 */
+    /* parser/parser_prod.nit:1744 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1675 */
+  /* parser/parser_prod.nit:1746 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8947,13 +9752,13 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1676 */
+    /* parser/parser_prod.nit:1747 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -8962,35 +9767,35 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1677 */
+      /* parser/parser_prod.nit:1748 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1677);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1748);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1678 */
+      /* parser/parser_prod.nit:1749 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast TKwmeth*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1678);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1749);
       }
-      /* ./parser//parser_prod.nit:1679 */
+      /* parser/parser_prod.nit:1750 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1681 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1681);
+      /* parser/parser_prod.nit:1752 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1752);
     }
-    /* ./parser//parser_prod.nit:1683 */
+    /* parser/parser_prod.nit:1754 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1685 */
+  /* parser/parser_prod.nit:1756 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -8998,13 +9803,13 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1686 */
+    /* parser/parser_prod.nit:1757 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9013,35 +9818,35 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1687 */
+      /* parser/parser_prod.nit:1758 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1687);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1758);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1688 */
+      /* parser/parser_prod.nit:1759 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1688);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1759);
       }
-      /* ./parser//parser_prod.nit:1689 */
+      /* parser/parser_prod.nit:1760 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1691 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1691);
+      /* parser/parser_prod.nit:1762 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1762);
     }
-    /* ./parser//parser_prod.nit:1693 */
+    /* parser/parser_prod.nit:1764 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1695 */
+  /* parser/parser_prod.nit:1766 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -9049,13 +9854,13 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1696 */
+    /* parser/parser_prod.nit:1767 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9064,35 +9869,35 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1697 */
+      /* parser/parser_prod.nit:1768 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1697);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1768);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1698 */
+      /* parser/parser_prod.nit:1769 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1698);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1769);
       }
-      /* ./parser//parser_prod.nit:1699 */
+      /* parser/parser_prod.nit:1770 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1701 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1701);
+      /* parser/parser_prod.nit:1772 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1772);
     }
-    /* ./parser//parser_prod.nit:1703 */
+    /* parser/parser_prod.nit:1774 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1705 */
+  /* parser/parser_prod.nit:1776 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -9100,13 +9905,13 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1706 */
+    /* parser/parser_prod.nit:1777 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9115,137 +9920,143 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1707 */
+      /* parser/parser_prod.nit:1778 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1707);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1778);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1708 */
+      /* parser/parser_prod.nit:1779 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1708);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1779);
       }
-      /* ./parser//parser_prod.nit:1709 */
+      /* parser/parser_prod.nit:1780 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1711 */
+      /* parser/parser_prod.nit:1782 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1713 */
+    /* parser/parser_prod.nit:1784 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteMethPropdef___visit_all[] = "parser_prod::AConcreteMethPropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1717;
+  fra.me.line = 1788;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1719 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1788 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1790 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1720 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:1791 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1720);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1791);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1722 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1793 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1723 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1723);
-    }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  /* ./parser//parser_prod.nit:1725 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1726 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1727 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1728 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1729 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* parser/parser_prod.nit:1794 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1794);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:1796 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1797 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1798 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1799 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1800 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1730 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:1801 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1730);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1801);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteInitPropdef___empty_init[] = "parser_prod::AConcreteInitPropdef::empty_init";
 void parser___parser_prod___AConcreteInitPropdef___empty_init(val_t p0, int* init_table){
   int itpos49 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteInitPropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -9253,31 +10064,32 @@ void parser___parser_prod___AConcreteInitPropdef___empty_init(val_t p0, int* ini
   if (init_table[itpos49]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1735;
+  fra.me.line = 1806;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:1735 */
-  CALL_parser___parser_nodes___AInitPropdef___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos49] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef[] = "parser_prod::AConcreteInitPropdef::init_aconcreteinitpropdef";
 void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
   int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteInitPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos50]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1737;
+  fra.me.line = 1808;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9286,6 +10098,7 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -9294,17 +10107,19 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
-  /* ./parser//parser_prod.nit:1747 */
-  CALL_parser___parser_prod___AConcreteInitPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1748 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1749 */
+  /* parser/parser_prod.nit:1808 */
+  fra.me.REG[8] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1818 */
+  CALL_parser___parser_prod___AConcreteInitPropdef___empty_init(fra.me.REG[8])(fra.me.REG[8], init_table);
+  /* parser/parser_prod.nit:1819 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[8]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1820 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -9313,22 +10128,22 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1750 */
+    /* parser/parser_prod.nit:1821 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1750);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1821);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
   }
-  /* ./parser//parser_prod.nit:1752 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:1753 */
+  /* parser/parser_prod.nit:1823 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[8]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1824 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9337,48 +10152,48 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1754 */
+    /* parser/parser_prod.nit:1825 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1754);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1825);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
   }
-  /* ./parser//parser_prod.nit:1756 */
+  /* parser/parser_prod.nit:1827 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1756);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1827);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:1757 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[8]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1828 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1757);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1828);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1758 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1829 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1758);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1829);
   }
-  ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:1759 */
+  ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[8]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1830 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1759);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1830);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1760 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:1761 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1831 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[8]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1832 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
@@ -9387,35 +10202,35 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1762 */
+    /* parser/parser_prod.nit:1833 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1762);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1833);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
   }
-  /* ./parser//parser_prod.nit:1764 */
+  /* parser/parser_prod.nit:1835 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1764);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1835);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:1765 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[8]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1836 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1765);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1836);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1766 */
-  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[7];
-  /* ./parser//parser_prod.nit:1767 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1837 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[8]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:1838 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
@@ -9424,17 +10239,18 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1768 */
+    /* parser/parser_prod.nit:1839 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1768);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1839);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos50] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteInitPropdef___replace_child[] = "parser_prod::AConcreteInitPropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -9442,10 +10258,11 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1772;
+  fra.me.line = 1843;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9453,14 +10270,14 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:1774 */
+  /* parser/parser_prod.nit:1845 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -9468,13 +10285,13 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1775 */
+    /* parser/parser_prod.nit:1846 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9483,35 +10300,35 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1776 */
+      /* parser/parser_prod.nit:1847 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1776);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1847);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1777 */
+      /* parser/parser_prod.nit:1848 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1777);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1848);
       }
-      /* ./parser//parser_prod.nit:1778 */
+      /* parser/parser_prod.nit:1849 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1780 */
+      /* parser/parser_prod.nit:1851 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1782 */
+    /* parser/parser_prod.nit:1853 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1784 */
+  /* parser/parser_prod.nit:1855 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -9519,13 +10336,13 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1785 */
+    /* parser/parser_prod.nit:1856 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9534,35 +10351,35 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1786 */
+      /* parser/parser_prod.nit:1857 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1786);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1857);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1787 */
+      /* parser/parser_prod.nit:1858 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1787);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1858);
       }
-      /* ./parser//parser_prod.nit:1788 */
+      /* parser/parser_prod.nit:1859 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1790 */
+      /* parser/parser_prod.nit:1861 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1792 */
+    /* parser/parser_prod.nit:1863 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1794 */
+  /* parser/parser_prod.nit:1865 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -9570,13 +10387,13 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1795 */
+    /* parser/parser_prod.nit:1866 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9585,32 +10402,32 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1796 */
+      /* parser/parser_prod.nit:1867 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1796);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1867);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1797 */
+      /* parser/parser_prod.nit:1868 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1797);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1868);
       }
-      /* ./parser//parser_prod.nit:1798 */
+      /* parser/parser_prod.nit:1869 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1800 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1800);
+      /* parser/parser_prod.nit:1871 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1871);
     }
-    /* ./parser//parser_prod.nit:1802 */
+    /* parser/parser_prod.nit:1873 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1804 */
+  /* parser/parser_prod.nit:1875 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 1804);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 1875);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -9620,13 +10437,13 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1805 */
+    /* parser/parser_prod.nit:1876 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9635,35 +10452,35 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1806 */
+      /* parser/parser_prod.nit:1877 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1806);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1877);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1807 */
+      /* parser/parser_prod.nit:1878 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast TKwinit*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1807);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1878);
       }
-      /* ./parser//parser_prod.nit:1808 */
+      /* parser/parser_prod.nit:1879 */
       ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1810 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1810);
+      /* parser/parser_prod.nit:1881 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1881);
     }
-    /* ./parser//parser_prod.nit:1812 */
+    /* parser/parser_prod.nit:1883 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1814 */
+  /* parser/parser_prod.nit:1885 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -9671,13 +10488,13 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1815 */
+    /* parser/parser_prod.nit:1886 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9686,35 +10503,35 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1816 */
+      /* parser/parser_prod.nit:1887 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1816);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1887);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1817 */
+      /* parser/parser_prod.nit:1888 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1817);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1888);
       }
-      /* ./parser//parser_prod.nit:1818 */
+      /* parser/parser_prod.nit:1889 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1820 */
+      /* parser/parser_prod.nit:1891 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1822 */
+    /* parser/parser_prod.nit:1893 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1824 */
+  /* parser/parser_prod.nit:1895 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -9722,13 +10539,13 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1825 */
+    /* parser/parser_prod.nit:1896 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9737,35 +10554,35 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1826 */
+      /* parser/parser_prod.nit:1897 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1826);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1897);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1827 */
+      /* parser/parser_prod.nit:1898 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1827);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1898);
       }
-      /* ./parser//parser_prod.nit:1828 */
+      /* parser/parser_prod.nit:1899 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1830 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1830);
+      /* parser/parser_prod.nit:1901 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1901);
     }
-    /* ./parser//parser_prod.nit:1832 */
+    /* parser/parser_prod.nit:1903 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1834 */
+  /* parser/parser_prod.nit:1905 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -9773,13 +10590,13 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1835 */
+    /* parser/parser_prod.nit:1906 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -9788,164 +10605,170 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1836 */
+      /* parser/parser_prod.nit:1907 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1836);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1907);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1837 */
+      /* parser/parser_prod.nit:1908 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1837);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1908);
       }
-      /* ./parser//parser_prod.nit:1838 */
+      /* parser/parser_prod.nit:1909 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1840 */
+      /* parser/parser_prod.nit:1911 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1842 */
+    /* parser/parser_prod.nit:1913 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AConcreteInitPropdef___visit_all[] = "parser_prod::AConcreteInitPropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1846;
+  fra.me.line = 1917;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1848 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1917 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1919 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1849 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:1920 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1849);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1920);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1851 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1922 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1852 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:1923 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1852);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1923);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1854 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1855 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:1925 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1926 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 1855);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 1926);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1856 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1927 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1857 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
+    /* parser/parser_prod.nit:1928 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1857);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1928);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1859 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:1860 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:1930 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1931 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1861 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:1932 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1861);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1932);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternInitPropdef___empty_init[] = "parser_prod::AExternInitPropdef::empty_init";
 void parser___parser_prod___AExternInitPropdef___empty_init(val_t p0, int* init_table){
   int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternInitPropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -9953,31 +10776,32 @@ void parser___parser_prod___AExternInitPropdef___empty_init(val_t p0, int* init_
   if (init_table[itpos51]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1866;
+  fra.me.line = 1937;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:1866 */
-  CALL_parser___parser_nodes___AInitPropdef___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos51] = 1;
   return;
 }
-void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
+static const char LOCATE_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef[] = "parser_prod::AExternInitPropdef::init_aexterninitpropdef";
+void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, int* init_table){
   int itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternInitPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos52]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1868;
+  fra.me.line = 1939;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9987,6 +10811,8 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -9996,17 +10822,20 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
-  /* ./parser//parser_prod.nit:1879 */
-  CALL_parser___parser_prod___AExternInitPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1880 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1881 */
+  fra.me.REG[9] = p9;
+  /* parser/parser_prod.nit:1939 */
+  fra.me.REG[10] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1951 */
+  CALL_parser___parser_prod___AExternInitPropdef___empty_init(fra.me.REG[10])(fra.me.REG[10], init_table);
+  /* parser/parser_prod.nit:1952 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[10]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1953 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -10015,22 +10844,22 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1882 */
+    /* parser/parser_prod.nit:1954 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1882);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1954);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[10]);
   }
-  /* ./parser//parser_prod.nit:1884 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:1885 */
+  /* parser/parser_prod.nit:1956 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[10]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1957 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10039,48 +10868,48 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1886 */
+    /* parser/parser_prod.nit:1958 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1886);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1958);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[10]);
   }
-  /* ./parser//parser_prod.nit:1888 */
+  /* parser/parser_prod.nit:1960 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1888);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1960);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:1889 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[10]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1961 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1889);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1961);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1890 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[10]);
+  /* parser/parser_prod.nit:1962 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1890);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1962);
   }
-  ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:1891 */
+  ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[10]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1963 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1891);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1963);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1892 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:1893 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[10]);
+  /* parser/parser_prod.nit:1964 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[10]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1965 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
@@ -10089,35 +10918,35 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1894 */
+    /* parser/parser_prod.nit:1966 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1894);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1966);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[10]);
   }
-  /* ./parser//parser_prod.nit:1896 */
+  /* parser/parser_prod.nit:1968 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1896);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1968);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:1897 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[10]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1969 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1897);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1969);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1898 */
-  ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[7];
-  /* ./parser//parser_prod.nit:1899 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[10]);
+  /* parser/parser_prod.nit:1970 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[10]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:1971 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
@@ -10126,22 +10955,22 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1900 */
+    /* parser/parser_prod.nit:1972 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1900);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1972);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[10]);
   }
-  /* ./parser//parser_prod.nit:1902 */
-  ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[8];
-  /* ./parser//parser_prod.nit:1903 */
+  /* parser/parser_prod.nit:1974 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[10]) = fra.me.REG[8];
+  /* parser/parser_prod.nit:1975 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
@@ -10150,17 +10979,42 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1904 */
+    /* parser/parser_prod.nit:1976 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1904);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1976);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[10]);
+  }
+  /* parser/parser_prod.nit:1978 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[10]) = fra.me.REG[9];
+  /* parser/parser_prod.nit:1979 */
+  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1980 */
+    REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1980);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[10]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos52] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternInitPropdef___replace_child[] = "parser_prod::AExternInitPropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -10168,10 +11022,11 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1908;
+  fra.me.line = 1984;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10179,14 +11034,14 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:1910 */
+  /* parser/parser_prod.nit:1986 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -10194,13 +11049,13 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1911 */
+    /* parser/parser_prod.nit:1987 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10209,35 +11064,35 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1912 */
+      /* parser/parser_prod.nit:1988 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1912);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1988);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1913 */
+      /* parser/parser_prod.nit:1989 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1913);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1989);
       }
-      /* ./parser//parser_prod.nit:1914 */
+      /* parser/parser_prod.nit:1990 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1916 */
+      /* parser/parser_prod.nit:1992 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1918 */
+    /* parser/parser_prod.nit:1994 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1920 */
+  /* parser/parser_prod.nit:1996 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -10245,13 +11100,13 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1921 */
+    /* parser/parser_prod.nit:1997 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10260,35 +11115,35 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1922 */
+      /* parser/parser_prod.nit:1998 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1922);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1998);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1923 */
+      /* parser/parser_prod.nit:1999 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1923);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1999);
       }
-      /* ./parser//parser_prod.nit:1924 */
+      /* parser/parser_prod.nit:2000 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1926 */
+      /* parser/parser_prod.nit:2002 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1928 */
+    /* parser/parser_prod.nit:2004 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1930 */
+  /* parser/parser_prod.nit:2006 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -10296,13 +11151,13 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1931 */
+    /* parser/parser_prod.nit:2007 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10311,32 +11166,32 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1932 */
+      /* parser/parser_prod.nit:2008 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1932);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2008);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1933 */
+      /* parser/parser_prod.nit:2009 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1933);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2009);
       }
-      /* ./parser//parser_prod.nit:1934 */
+      /* parser/parser_prod.nit:2010 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1936 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1936);
+      /* parser/parser_prod.nit:2012 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2012);
     }
-    /* ./parser//parser_prod.nit:1938 */
+    /* parser/parser_prod.nit:2014 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1940 */
+  /* parser/parser_prod.nit:2016 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 1940);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 2016);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -10346,13 +11201,13 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1941 */
+    /* parser/parser_prod.nit:2017 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10361,35 +11216,35 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1942 */
+      /* parser/parser_prod.nit:2018 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1942);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2018);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1943 */
+      /* parser/parser_prod.nit:2019 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast TKwnew*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1943);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2019);
       }
-      /* ./parser//parser_prod.nit:1944 */
+      /* parser/parser_prod.nit:2020 */
       ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1946 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1946);
+      /* parser/parser_prod.nit:2022 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2022);
     }
-    /* ./parser//parser_prod.nit:1948 */
+    /* parser/parser_prod.nit:2024 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1950 */
+  /* parser/parser_prod.nit:2026 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -10397,13 +11252,13 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1951 */
+    /* parser/parser_prod.nit:2027 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10412,35 +11267,35 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1952 */
+      /* parser/parser_prod.nit:2028 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1952);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2028);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1953 */
+      /* parser/parser_prod.nit:2029 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1953);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2029);
       }
-      /* ./parser//parser_prod.nit:1954 */
+      /* parser/parser_prod.nit:2030 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1956 */
+      /* parser/parser_prod.nit:2032 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1958 */
+    /* parser/parser_prod.nit:2034 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1960 */
+  /* parser/parser_prod.nit:2036 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -10448,13 +11303,13 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1961 */
+    /* parser/parser_prod.nit:2037 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10463,35 +11318,35 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1962 */
+      /* parser/parser_prod.nit:2038 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1962);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2038);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1963 */
+      /* parser/parser_prod.nit:2039 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1963);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2039);
       }
-      /* ./parser//parser_prod.nit:1964 */
+      /* parser/parser_prod.nit:2040 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1966 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1966);
+      /* parser/parser_prod.nit:2042 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2042);
     }
-    /* ./parser//parser_prod.nit:1968 */
+    /* parser/parser_prod.nit:2044 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1970 */
+  /* parser/parser_prod.nit:2046 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -10499,13 +11354,13 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1971 */
+    /* parser/parser_prod.nit:2047 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10514,35 +11369,35 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1972 */
+      /* parser/parser_prod.nit:2048 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1972);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2048);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1973 */
+      /* parser/parser_prod.nit:2049 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1973);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2049);
       }
-      /* ./parser//parser_prod.nit:1974 */
+      /* parser/parser_prod.nit:2050 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1976 */
+      /* parser/parser_prod.nit:2052 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1978 */
+    /* parser/parser_prod.nit:2054 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1980 */
+  /* parser/parser_prod.nit:2056 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -10550,13 +11405,13 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1981 */
+    /* parser/parser_prod.nit:2057 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10565,189 +11420,271 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:1982 */
+      /* parser/parser_prod.nit:2058 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1982);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2058);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1983 */
+      /* parser/parser_prod.nit:2059 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1983);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2059);
       }
-      /* ./parser//parser_prod.nit:1984 */
+      /* parser/parser_prod.nit:2060 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1986 */
+      /* parser/parser_prod.nit:2062 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1988 */
+    /* parser/parser_prod.nit:2064 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:2066 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:2067 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:2068 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2068);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2069 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2069);
+      }
+      /* parser/parser_prod.nit:2070 */
+      ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:2072 */
+      ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:2074 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternInitPropdef___visit_all[] = "parser_prod::AExternInitPropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1992;
+  fra.me.line = 2078;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1994 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2078 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2080 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1995 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:2081 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1995);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2081);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:1997 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2083 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1998 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:2084 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1998);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2084);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2000 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2001 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:2086 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2087 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 2001);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 2087);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2002 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2088 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2003 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
+    /* parser/parser_prod.nit:2089 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2003);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2089);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2005 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2006 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2091 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2092 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2007 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
+    /* parser/parser_prod.nit:2093 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2007);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2093);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2009 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2095 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2010 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
+    /* parser/parser_prod.nit:2096 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2010);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2096);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:2098 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:2099 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2099);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMainMethPropdef___empty_init[] = "parser_prod::AMainMethPropdef::empty_init";
 void parser___parser_prod___AMainMethPropdef___empty_init(val_t p0, int* init_table){
   int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMainMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -10755,16 +11692,18 @@ void parser___parser_prod___AMainMethPropdef___empty_init(val_t p0, int* init_ta
   if (init_table[itpos53]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2015;
+  fra.me.line = 2104;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos53] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef[] = "parser_prod::AMainMethPropdef::init_amainmethpropdef";
 void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos54 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMainMethPropdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
@@ -10774,27 +11713,28 @@ void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, v
   if (init_table[itpos54]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2017;
+  fra.me.line = 2106;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2022 */
+  /* parser/parser_prod.nit:2111 */
   CALL_parser___parser_prod___AMainMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2023 */
+  /* parser/parser_prod.nit:2112 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2024 */
+  /* parser/parser_prod.nit:2113 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -10803,22 +11743,22 @@ void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2025 */
+    /* parser/parser_prod.nit:2114 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2025);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2114);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2027 */
+  /* parser/parser_prod.nit:2116 */
   ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2028 */
+  /* parser/parser_prod.nit:2117 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10827,10 +11767,10 @@ void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2029 */
+    /* parser/parser_prod.nit:2118 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2029);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2118);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
@@ -10838,6 +11778,7 @@ void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, v
   init_table[itpos54] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMainMethPropdef___replace_child[] = "parser_prod::AMainMethPropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -10845,10 +11786,11 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2033;
+  fra.me.line = 2122;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10856,14 +11798,14 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2035 */
+  /* parser/parser_prod.nit:2124 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -10871,13 +11813,13 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2036 */
+    /* parser/parser_prod.nit:2125 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10886,35 +11828,35 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2037 */
+      /* parser/parser_prod.nit:2126 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2037);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2126);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2038 */
+      /* parser/parser_prod.nit:2127 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2038);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2127);
       }
-      /* ./parser//parser_prod.nit:2039 */
+      /* parser/parser_prod.nit:2128 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2041 */
+      /* parser/parser_prod.nit:2130 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2043 */
+    /* parser/parser_prod.nit:2132 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2045 */
+  /* parser/parser_prod.nit:2134 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -10922,13 +11864,13 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2046 */
+    /* parser/parser_prod.nit:2135 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -10937,100 +11879,106 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2047 */
+      /* parser/parser_prod.nit:2136 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2047);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2136);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2048 */
+      /* parser/parser_prod.nit:2137 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2048);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2137);
       }
-      /* ./parser//parser_prod.nit:2049 */
+      /* parser/parser_prod.nit:2138 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2051 */
+      /* parser/parser_prod.nit:2140 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2053 */
+    /* parser/parser_prod.nit:2142 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMainMethPropdef___visit_all[] = "parser_prod::AMainMethPropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2057;
+  fra.me.line = 2146;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2059 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2146 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2148 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2060 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:2149 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2060);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2149);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2062 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2151 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2063 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:2152 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2063);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2152);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATypePropdef___empty_init[] = "parser_prod::ATypePropdef::empty_init";
 void parser___parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table){
   int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypePropdef].i;
   struct {struct stack_frame_t me;} fra;
@@ -11038,29 +11986,32 @@ void parser___parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos55]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2068;
+  fra.me.line = 2157;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos55] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATypePropdef___init_atypepropdef[] = "parser_prod::ATypePropdef::init_atypepropdef";
 void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
   int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypePropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos56]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2070;
+  fra.me.line = 2159;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___init_atypepropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11068,6 +12019,7 @@ void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1,
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -11075,17 +12027,19 @@ void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1,
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:2079 */
-  CALL_parser___parser_prod___ATypePropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2080 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2081 */
+  /* parser/parser_prod.nit:2159 */
+  fra.me.REG[7] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2168 */
+  CALL_parser___parser_prod___ATypePropdef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
+  /* parser/parser_prod.nit:2169 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[7]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2170 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -11094,22 +12048,22 @@ void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2082 */
+    /* parser/parser_prod.nit:2171 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2082);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2171);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
   }
-  /* ./parser//parser_prod.nit:2084 */
-  ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2085 */
+  /* parser/parser_prod.nit:2173 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[7]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:2174 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11118,69 +12072,70 @@ void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2086 */
+    /* parser/parser_prod.nit:2175 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2086);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2175);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
   }
-  /* ./parser//parser_prod.nit:2088 */
+  /* parser/parser_prod.nit:2177 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2088);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2177);
   }
-  ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:2089 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[7]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:2178 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2089);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2178);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2090 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:2179 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2090);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2179);
   }
-  ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:2091 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[7]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:2180 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2091);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2180);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2092 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:2181 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2092);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2181);
   }
-  ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:2093 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[7]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:2182 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2093);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2182);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2094 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+  /* parser/parser_prod.nit:2183 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2094);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2183);
   }
-  ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:2095 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[7]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:2184 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2095);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2184);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
   init_table[itpos56] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATypePropdef___replace_child[] = "parser_prod::ATypePropdef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -11188,10 +12143,11 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2098;
+  fra.me.line = 2187;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11199,14 +12155,14 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2100 */
+  /* parser/parser_prod.nit:2189 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -11214,13 +12170,13 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2101 */
+    /* parser/parser_prod.nit:2190 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11229,35 +12185,35 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2102 */
+      /* parser/parser_prod.nit:2191 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2102);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2191);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2103 */
+      /* parser/parser_prod.nit:2192 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2103);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2192);
       }
-      /* ./parser//parser_prod.nit:2104 */
+      /* parser/parser_prod.nit:2193 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2106 */
+      /* parser/parser_prod.nit:2195 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2108 */
+    /* parser/parser_prod.nit:2197 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2110 */
+  /* parser/parser_prod.nit:2199 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -11265,13 +12221,13 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2111 */
+    /* parser/parser_prod.nit:2200 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11280,32 +12236,32 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2112 */
+      /* parser/parser_prod.nit:2201 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2112);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2201);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2113 */
+      /* parser/parser_prod.nit:2202 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2113);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2202);
       }
-      /* ./parser//parser_prod.nit:2114 */
+      /* parser/parser_prod.nit:2203 */
       ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2116 */
+      /* parser/parser_prod.nit:2205 */
       ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2118 */
+    /* parser/parser_prod.nit:2207 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2120 */
+  /* parser/parser_prod.nit:2209 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 2120);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 2209);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11315,13 +12271,13 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2121 */
+    /* parser/parser_prod.nit:2210 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11330,32 +12286,32 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2122 */
+      /* parser/parser_prod.nit:2211 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2122);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2211);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2123 */
+      /* parser/parser_prod.nit:2212 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2123);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2212);
       }
-      /* ./parser//parser_prod.nit:2124 */
+      /* parser/parser_prod.nit:2213 */
       ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2126 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2126);
+      /* parser/parser_prod.nit:2215 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2215);
     }
-    /* ./parser//parser_prod.nit:2128 */
+    /* parser/parser_prod.nit:2217 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2130 */
+  /* parser/parser_prod.nit:2219 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 2130);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 2219);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11365,13 +12321,13 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2131 */
+    /* parser/parser_prod.nit:2220 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11380,32 +12336,32 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2132 */
+      /* parser/parser_prod.nit:2221 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2132);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2221);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2133 */
+      /* parser/parser_prod.nit:2222 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast TKwtype*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2133);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2222);
       }
-      /* ./parser//parser_prod.nit:2134 */
+      /* parser/parser_prod.nit:2223 */
       ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2136 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2136);
+      /* parser/parser_prod.nit:2225 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2225);
     }
-    /* ./parser//parser_prod.nit:2138 */
+    /* parser/parser_prod.nit:2227 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2140 */
+  /* parser/parser_prod.nit:2229 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2140);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2229);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11415,13 +12371,13 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2141 */
+    /* parser/parser_prod.nit:2230 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11430,32 +12386,32 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2142 */
+      /* parser/parser_prod.nit:2231 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2142);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2231);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2143 */
+      /* parser/parser_prod.nit:2232 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2143);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2232);
       }
-      /* ./parser//parser_prod.nit:2144 */
+      /* parser/parser_prod.nit:2233 */
       ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2146 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2146);
+      /* parser/parser_prod.nit:2235 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2235);
     }
-    /* ./parser//parser_prod.nit:2148 */
+    /* parser/parser_prod.nit:2237 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2150 */
+  /* parser/parser_prod.nit:2239 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 2150);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 2239);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11465,13 +12421,13 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2151 */
+    /* parser/parser_prod.nit:2240 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11480,132 +12436,138 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2152 */
+      /* parser/parser_prod.nit:2241 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2152);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2241);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2153 */
+      /* parser/parser_prod.nit:2242 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2153);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2242);
       }
-      /* ./parser//parser_prod.nit:2154 */
+      /* parser/parser_prod.nit:2243 */
       ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2156 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2156);
+      /* parser/parser_prod.nit:2245 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2245);
     }
-    /* ./parser//parser_prod.nit:2158 */
+    /* parser/parser_prod.nit:2247 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATypePropdef___visit_all[] = "parser_prod::ATypePropdef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2162;
+  fra.me.line = 2251;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2164 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2251 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2253 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2165 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
+    /* parser/parser_prod.nit:2254 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2165);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2254);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2167 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2256 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2168 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:2257 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2168);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2257);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2170 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:2259 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 2170);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 2259);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2171 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2260 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 2171);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 2260);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2172 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2261 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2172);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2261);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2173 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2262 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 2173);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 2262);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AReadAble___empty_init[] = "parser_prod::AReadAble::empty_init";
 void parser___parser_prod___AReadAble___empty_init(val_t p0, int* init_table){
   int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AReadAble].i;
   struct {struct stack_frame_t me;} fra;
@@ -11613,46 +12575,52 @@ void parser___parser_prod___AReadAble___empty_init(val_t p0, int* init_table){
   if (init_table[itpos57]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2177;
+  fra.me.line = 2266;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos57] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AReadAble___init_areadable[] = "parser_prod::AReadAble::init_areadable";
 void parser___parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AReadAble].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos58]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2179;
+  fra.me.line = 2268;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___init_areadable;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2184 */
-  CALL_parser___parser_prod___AReadAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2185 */
-  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2186 */
+  /* parser/parser_prod.nit:2268 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2273 */
+  CALL_parser___parser_prod___AReadAble___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:2274 */
+  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2275 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -11661,30 +12629,31 @@ void parser___parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2187 */
+    /* parser/parser_prod.nit:2276 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2187);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2276);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2189 */
+  /* parser/parser_prod.nit:2278 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2189);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2278);
   }
-  ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2190 */
+  ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:2279 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2190);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2279);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos58] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AReadAble___replace_child[] = "parser_prod::AReadAble::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -11692,10 +12661,11 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2193;
+  fra.me.line = 2282;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11703,14 +12673,14 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2195 */
+  /* parser/parser_prod.nit:2284 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -11718,13 +12688,13 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2196 */
+    /* parser/parser_prod.nit:2285 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11733,32 +12703,32 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2197 */
+      /* parser/parser_prod.nit:2286 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2197);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2286);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2198 */
+      /* parser/parser_prod.nit:2287 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2198);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2287);
       }
-      /* ./parser//parser_prod.nit:2199 */
+      /* parser/parser_prod.nit:2288 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2201 */
+      /* parser/parser_prod.nit:2290 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2203 */
+    /* parser/parser_prod.nit:2292 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2205 */
+  /* parser/parser_prod.nit:2294 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 2205);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 2294);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11768,13 +12738,13 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2206 */
+    /* parser/parser_prod.nit:2295 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11783,83 +12753,89 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2207 */
+      /* parser/parser_prod.nit:2296 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2207);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2296);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2208 */
+      /* parser/parser_prod.nit:2297 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast TKwreadable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2208);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2297);
       }
-      /* ./parser//parser_prod.nit:2209 */
+      /* parser/parser_prod.nit:2298 */
       ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2211 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2211);
+      /* parser/parser_prod.nit:2300 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2300);
     }
-    /* ./parser//parser_prod.nit:2213 */
+    /* parser/parser_prod.nit:2302 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AReadAble___visit_all[] = "parser_prod::AReadAble::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AReadAble___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2217;
+  fra.me.line = 2306;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2219 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2306 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2308 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2220 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:2309 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2220);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2309);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2222 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:2311 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 2222);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 2311);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AWriteAble___empty_init[] = "parser_prod::AWriteAble::empty_init";
 void parser___parser_prod___AWriteAble___empty_init(val_t p0, int* init_table){
   int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AWriteAble].i;
   struct {struct stack_frame_t me;} fra;
@@ -11867,48 +12843,54 @@ void parser___parser_prod___AWriteAble___empty_init(val_t p0, int* init_table){
   if (init_table[itpos59]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2226;
+  fra.me.line = 2315;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos59] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AWriteAble___init_awriteable[] = "parser_prod::AWriteAble::init_awriteable";
 void parser___parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AWriteAble].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos60]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2228;
+  fra.me.line = 2317;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___init_awriteable;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:2234 */
-  CALL_parser___parser_prod___AWriteAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2235 */
-  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2236 */
+  /* parser/parser_prod.nit:2317 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2323 */
+  CALL_parser___parser_prod___AWriteAble___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:2324 */
+  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2325 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -11917,22 +12899,22 @@ void parser___parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2237 */
+    /* parser/parser_prod.nit:2326 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2237);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2326);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:2239 */
-  ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2240 */
+  /* parser/parser_prod.nit:2328 */
+  ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:2329 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -11941,30 +12923,31 @@ void parser___parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2241 */
+    /* parser/parser_prod.nit:2330 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2241);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2330);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:2243 */
+  /* parser/parser_prod.nit:2332 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2243);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2332);
   }
-  ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:2244 */
+  ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:2333 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2244);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2333);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos60] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AWriteAble___replace_child[] = "parser_prod::AWriteAble::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -11972,10 +12955,11 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2247;
+  fra.me.line = 2336;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11983,14 +12967,14 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2249 */
+  /* parser/parser_prod.nit:2338 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -11998,13 +12982,13 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2250 */
+    /* parser/parser_prod.nit:2339 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -12013,35 +12997,35 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2251 */
+      /* parser/parser_prod.nit:2340 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2251);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2340);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2252 */
+      /* parser/parser_prod.nit:2341 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2252);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2341);
       }
-      /* ./parser//parser_prod.nit:2253 */
+      /* parser/parser_prod.nit:2342 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2255 */
+      /* parser/parser_prod.nit:2344 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2257 */
+    /* parser/parser_prod.nit:2346 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2259 */
+  /* parser/parser_prod.nit:2348 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -12049,13 +13033,13 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2260 */
+    /* parser/parser_prod.nit:2349 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -12064,32 +13048,32 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2261 */
+      /* parser/parser_prod.nit:2350 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2261);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2350);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2262 */
+      /* parser/parser_prod.nit:2351 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2262);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2351);
       }
-      /* ./parser//parser_prod.nit:2263 */
+      /* parser/parser_prod.nit:2352 */
       ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2265 */
+      /* parser/parser_prod.nit:2354 */
       ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2267 */
+    /* parser/parser_prod.nit:2356 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2269 */
+  /* parser/parser_prod.nit:2358 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 2269);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 2358);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12099,13 +13083,13 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2270 */
+    /* parser/parser_prod.nit:2359 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -12114,108 +13098,114 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2271 */
+      /* parser/parser_prod.nit:2360 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2271);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2360);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2272 */
+      /* parser/parser_prod.nit:2361 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast TKwwritable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2272);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2361);
       }
-      /* ./parser//parser_prod.nit:2273 */
+      /* parser/parser_prod.nit:2362 */
       ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2275 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2275);
+      /* parser/parser_prod.nit:2364 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2364);
     }
-    /* ./parser//parser_prod.nit:2277 */
+    /* parser/parser_prod.nit:2366 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AWriteAble___visit_all[] = "parser_prod::AWriteAble::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2281;
+  fra.me.line = 2370;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2283 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2370 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2372 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2284 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
+    /* parser/parser_prod.nit:2373 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2284);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2373);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2286 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:2375 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2287 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
+    /* parser/parser_prod.nit:2376 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2287);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2376);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2289 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:2378 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 2289);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 2378);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIdMethid___empty_init[] = "parser_prod::AIdMethid::empty_init";
 void parser___parser_prod___AIdMethid___empty_init(val_t p0, int* init_table){
   int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -12223,51 +13213,58 @@ void parser___parser_prod___AIdMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos61]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2293;
+  fra.me.line = 2382;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos61] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIdMethid___init_aidmethid[] = "parser_prod::AIdMethid::init_aidmethid";
 void parser___parser_prod___AIdMethid___init_aidmethid(val_t p0, val_t p1, int* init_table){
   int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos62]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2295;
+  fra.me.line = 2384;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___init_aidmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2299 */
-  CALL_parser___parser_prod___AIdMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2300 */
+  /* parser/parser_prod.nit:2384 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2388 */
+  CALL_parser___parser_prod___AIdMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2389 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2300);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2389);
   }
-  ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2301 */
+  ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2390 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2301);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2390);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos62] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIdMethid___replace_child[] = "parser_prod::AIdMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -12275,10 +13272,11 @@ void parser___parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2304;
+  fra.me.line = 2393;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12286,11 +13284,11 @@ void parser___parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2306 */
+  /* parser/parser_prod.nit:2395 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2306);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2395);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12300,13 +13298,13 @@ void parser___parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2307 */
+    /* parser/parser_prod.nit:2396 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -12315,56 +13313,59 @@ void parser___parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2308 */
+      /* parser/parser_prod.nit:2397 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2308);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2397);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2309 */
+      /* parser/parser_prod.nit:2398 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2309);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2398);
       }
-      /* ./parser//parser_prod.nit:2310 */
+      /* parser/parser_prod.nit:2399 */
       ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2312 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2312);
+      /* parser/parser_prod.nit:2401 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2401);
     }
-    /* ./parser//parser_prod.nit:2314 */
+    /* parser/parser_prod.nit:2403 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIdMethid___visit_all[] = "parser_prod::AIdMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AIdMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2318;
+  fra.me.line = 2407;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2320 */
+  /* parser/parser_prod.nit:2409 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2320);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2409);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusMethid___empty_init[] = "parser_prod::APlusMethid::empty_init";
 void parser___parser_prod___APlusMethid___empty_init(val_t p0, int* init_table){
   int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -12372,51 +13373,58 @@ void parser___parser_prod___APlusMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos63]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2324;
+  fra.me.line = 2413;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos63] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusMethid___init_aplusmethid[] = "parser_prod::APlusMethid::init_aplusmethid";
 void parser___parser_prod___APlusMethid___init_aplusmethid(val_t p0, val_t p1, int* init_table){
   int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos64]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2326;
+  fra.me.line = 2415;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___init_aplusmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2330 */
-  CALL_parser___parser_prod___APlusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2331 */
+  /* parser/parser_prod.nit:2415 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2419 */
+  CALL_parser___parser_prod___APlusMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2420 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2331);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2420);
   }
-  ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2332 */
+  ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2421 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2332);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2421);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos64] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusMethid___replace_child[] = "parser_prod::APlusMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -12424,10 +13432,11 @@ void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2335;
+  fra.me.line = 2424;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12435,11 +13444,11 @@ void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2337 */
+  /* parser/parser_prod.nit:2426 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 2337);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 2426);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12449,13 +13458,13 @@ void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2338 */
+    /* parser/parser_prod.nit:2427 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -12464,56 +13473,59 @@ void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2339 */
+      /* parser/parser_prod.nit:2428 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2339);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2428);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2340 */
+      /* parser/parser_prod.nit:2429 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TPlus, ID_parser___parser_nodes___TPlus)) /*cast TPlus*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2340);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2429);
       }
-      /* ./parser//parser_prod.nit:2341 */
+      /* parser/parser_prod.nit:2430 */
       ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2343 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2343);
+      /* parser/parser_prod.nit:2432 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2432);
     }
-    /* ./parser//parser_prod.nit:2345 */
+    /* parser/parser_prod.nit:2434 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusMethid___visit_all[] = "parser_prod::APlusMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___APlusMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2349;
+  fra.me.line = 2438;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2351 */
+  /* parser/parser_prod.nit:2440 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 2351);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 2440);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusMethid___empty_init[] = "parser_prod::AMinusMethid::empty_init";
 void parser___parser_prod___AMinusMethid___empty_init(val_t p0, int* init_table){
   int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -12521,51 +13533,58 @@ void parser___parser_prod___AMinusMethid___empty_init(val_t p0, int* init_table)
   if (init_table[itpos65]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2355;
+  fra.me.line = 2444;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos65] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusMethid___init_aminusmethid[] = "parser_prod::AMinusMethid::init_aminusmethid";
 void parser___parser_prod___AMinusMethid___init_aminusmethid(val_t p0, val_t p1, int* init_table){
   int itpos66 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos66]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2357;
+  fra.me.line = 2446;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___init_aminusmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2361 */
-  CALL_parser___parser_prod___AMinusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2362 */
+  /* parser/parser_prod.nit:2446 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2450 */
+  CALL_parser___parser_prod___AMinusMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2451 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2362);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2451);
   }
-  ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2363 */
+  ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2452 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2363);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2452);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos66] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusMethid___replace_child[] = "parser_prod::AMinusMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -12573,10 +13592,11 @@ void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2366;
+  fra.me.line = 2455;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12584,11 +13604,11 @@ void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2368 */
+  /* parser/parser_prod.nit:2457 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 2368);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 2457);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12598,13 +13618,13 @@ void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2369 */
+    /* parser/parser_prod.nit:2458 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -12613,56 +13633,59 @@ void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2370 */
+      /* parser/parser_prod.nit:2459 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2370);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2459);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2371 */
+      /* parser/parser_prod.nit:2460 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast TMinus*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2371);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2460);
       }
-      /* ./parser//parser_prod.nit:2372 */
+      /* parser/parser_prod.nit:2461 */
       ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2374 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2374);
+      /* parser/parser_prod.nit:2463 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2463);
     }
-    /* ./parser//parser_prod.nit:2376 */
+    /* parser/parser_prod.nit:2465 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusMethid___visit_all[] = "parser_prod::AMinusMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AMinusMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2380;
+  fra.me.line = 2469;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2382 */
+  /* parser/parser_prod.nit:2471 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 2382);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 2471);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarMethid___empty_init[] = "parser_prod::AStarMethid::empty_init";
 void parser___parser_prod___AStarMethid___empty_init(val_t p0, int* init_table){
   int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -12670,51 +13693,58 @@ void parser___parser_prod___AStarMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos67]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2386;
+  fra.me.line = 2475;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos67] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarMethid___init_astarmethid[] = "parser_prod::AStarMethid::init_astarmethid";
 void parser___parser_prod___AStarMethid___init_astarmethid(val_t p0, val_t p1, int* init_table){
   int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos68]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2388;
+  fra.me.line = 2477;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___init_astarmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2392 */
-  CALL_parser___parser_prod___AStarMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2393 */
+  /* parser/parser_prod.nit:2477 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2481 */
+  CALL_parser___parser_prod___AStarMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2482 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2393);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2482);
   }
-  ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2394 */
+  ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2483 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2394);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2483);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos68] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarMethid___replace_child[] = "parser_prod::AStarMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -12722,10 +13752,11 @@ void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2397;
+  fra.me.line = 2486;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12733,11 +13764,11 @@ void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2399 */
+  /* parser/parser_prod.nit:2488 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 2399);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 2488);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12747,13 +13778,13 @@ void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2400 */
+    /* parser/parser_prod.nit:2489 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -12762,56 +13793,59 @@ void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2401 */
+      /* parser/parser_prod.nit:2490 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2401);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2490);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2402 */
+      /* parser/parser_prod.nit:2491 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TStar, ID_parser___parser_nodes___TStar)) /*cast TStar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2402);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2491);
       }
-      /* ./parser//parser_prod.nit:2403 */
+      /* parser/parser_prod.nit:2492 */
       ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2405 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2405);
+      /* parser/parser_prod.nit:2494 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2494);
     }
-    /* ./parser//parser_prod.nit:2407 */
+    /* parser/parser_prod.nit:2496 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarMethid___visit_all[] = "parser_prod::AStarMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStarMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2411;
+  fra.me.line = 2500;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2413 */
+  /* parser/parser_prod.nit:2502 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 2413);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 2502);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASlashMethid___empty_init[] = "parser_prod::ASlashMethid::empty_init";
 void parser___parser_prod___ASlashMethid___empty_init(val_t p0, int* init_table){
   int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASlashMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -12819,51 +13853,58 @@ void parser___parser_prod___ASlashMethid___empty_init(val_t p0, int* init_table)
   if (init_table[itpos69]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2417;
+  fra.me.line = 2506;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos69] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASlashMethid___init_aslashmethid[] = "parser_prod::ASlashMethid::init_aslashmethid";
 void parser___parser_prod___ASlashMethid___init_aslashmethid(val_t p0, val_t p1, int* init_table){
   int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASlashMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos70]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2419;
+  fra.me.line = 2508;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___init_aslashmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2423 */
-  CALL_parser___parser_prod___ASlashMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2424 */
+  /* parser/parser_prod.nit:2508 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2512 */
+  CALL_parser___parser_prod___ASlashMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2513 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2424);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2513);
   }
-  ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2425 */
+  ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2514 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2425);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2514);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos70] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASlashMethid___replace_child[] = "parser_prod::ASlashMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -12871,10 +13912,11 @@ void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2428;
+  fra.me.line = 2517;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12882,11 +13924,11 @@ void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2430 */
+  /* parser/parser_prod.nit:2519 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 2430);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 2519);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12896,13 +13938,13 @@ void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2431 */
+    /* parser/parser_prod.nit:2520 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -12911,56 +13953,59 @@ void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2432 */
+      /* parser/parser_prod.nit:2521 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2432);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2521);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2433 */
+      /* parser/parser_prod.nit:2522 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TSlash, ID_parser___parser_nodes___TSlash)) /*cast TSlash*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2433);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2522);
       }
-      /* ./parser//parser_prod.nit:2434 */
+      /* parser/parser_prod.nit:2523 */
       ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2436 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2436);
+      /* parser/parser_prod.nit:2525 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2525);
     }
-    /* ./parser//parser_prod.nit:2438 */
+    /* parser/parser_prod.nit:2527 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASlashMethid___visit_all[] = "parser_prod::ASlashMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASlashMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2442;
+  fra.me.line = 2531;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2444 */
+  /* parser/parser_prod.nit:2533 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 2444);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 2533);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APercentMethid___empty_init[] = "parser_prod::APercentMethid::empty_init";
 void parser___parser_prod___APercentMethid___empty_init(val_t p0, int* init_table){
   int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APercentMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -12968,51 +14013,58 @@ void parser___parser_prod___APercentMethid___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos71]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2448;
+  fra.me.line = 2537;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos71] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APercentMethid___init_apercentmethid[] = "parser_prod::APercentMethid::init_apercentmethid";
 void parser___parser_prod___APercentMethid___init_apercentmethid(val_t p0, val_t p1, int* init_table){
   int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APercentMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos72]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2450;
+  fra.me.line = 2539;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___init_apercentmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2454 */
-  CALL_parser___parser_prod___APercentMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2455 */
+  /* parser/parser_prod.nit:2539 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2543 */
+  CALL_parser___parser_prod___APercentMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2544 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2455);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2544);
   }
-  ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2456 */
+  ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2545 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2456);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2545);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos72] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APercentMethid___replace_child[] = "parser_prod::APercentMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -13020,10 +14072,11 @@ void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2459;
+  fra.me.line = 2548;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13031,11 +14084,11 @@ void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2461 */
+  /* parser/parser_prod.nit:2550 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 2461);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 2550);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13045,13 +14098,13 @@ void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2462 */
+    /* parser/parser_prod.nit:2551 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -13060,56 +14113,59 @@ void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2463 */
+      /* parser/parser_prod.nit:2552 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2463);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2552);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2464 */
+      /* parser/parser_prod.nit:2553 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TPercent, ID_parser___parser_nodes___TPercent)) /*cast TPercent*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2464);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2553);
       }
-      /* ./parser//parser_prod.nit:2465 */
+      /* parser/parser_prod.nit:2554 */
       ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2467 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2467);
+      /* parser/parser_prod.nit:2556 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2556);
     }
-    /* ./parser//parser_prod.nit:2469 */
+    /* parser/parser_prod.nit:2558 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APercentMethid___visit_all[] = "parser_prod::APercentMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___APercentMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2473;
+  fra.me.line = 2562;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2475 */
+  /* parser/parser_prod.nit:2564 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 2475);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 2564);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEqMethid___empty_init[] = "parser_prod::AEqMethid::empty_init";
 void parser___parser_prod___AEqMethid___empty_init(val_t p0, int* init_table){
   int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEqMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -13117,51 +14173,58 @@ void parser___parser_prod___AEqMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos73]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2479;
+  fra.me.line = 2568;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos73] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEqMethid___init_aeqmethid[] = "parser_prod::AEqMethid::init_aeqmethid";
 void parser___parser_prod___AEqMethid___init_aeqmethid(val_t p0, val_t p1, int* init_table){
   int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEqMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos74]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2481;
+  fra.me.line = 2570;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___init_aeqmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2485 */
-  CALL_parser___parser_prod___AEqMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2486 */
+  /* parser/parser_prod.nit:2570 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2574 */
+  CALL_parser___parser_prod___AEqMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2575 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2486);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2575);
   }
-  ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2487 */
+  ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2576 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2487);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2576);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos74] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEqMethid___replace_child[] = "parser_prod::AEqMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -13169,10 +14232,11 @@ void parser___parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2490;
+  fra.me.line = 2579;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13180,11 +14244,11 @@ void parser___parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2492 */
+  /* parser/parser_prod.nit:2581 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 2492);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 2581);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13194,13 +14258,13 @@ void parser___parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2493 */
+    /* parser/parser_prod.nit:2582 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -13209,56 +14273,59 @@ void parser___parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2494 */
+      /* parser/parser_prod.nit:2583 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2494);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2583);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2495 */
+      /* parser/parser_prod.nit:2584 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TEq, ID_parser___parser_nodes___TEq)) /*cast TEq*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2495);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2584);
       }
-      /* ./parser//parser_prod.nit:2496 */
+      /* parser/parser_prod.nit:2585 */
       ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2498 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2498);
+      /* parser/parser_prod.nit:2587 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2587);
     }
-    /* ./parser//parser_prod.nit:2500 */
+    /* parser/parser_prod.nit:2589 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEqMethid___visit_all[] = "parser_prod::AEqMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AEqMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2504;
+  fra.me.line = 2593;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2506 */
+  /* parser/parser_prod.nit:2595 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 2506);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 2595);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANeMethid___empty_init[] = "parser_prod::ANeMethid::empty_init";
 void parser___parser_prod___ANeMethid___empty_init(val_t p0, int* init_table){
   int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANeMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -13266,51 +14333,58 @@ void parser___parser_prod___ANeMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos75]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2510;
+  fra.me.line = 2599;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos75] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANeMethid___init_anemethid[] = "parser_prod::ANeMethid::init_anemethid";
 void parser___parser_prod___ANeMethid___init_anemethid(val_t p0, val_t p1, int* init_table){
   int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANeMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos76]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2512;
+  fra.me.line = 2601;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___init_anemethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2516 */
-  CALL_parser___parser_prod___ANeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2517 */
+  /* parser/parser_prod.nit:2601 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2605 */
+  CALL_parser___parser_prod___ANeMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2606 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2517);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2606);
   }
-  ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2518 */
+  ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2607 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2518);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2607);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos76] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANeMethid___replace_child[] = "parser_prod::ANeMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -13318,10 +14392,11 @@ void parser___parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2521;
+  fra.me.line = 2610;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13329,11 +14404,11 @@ void parser___parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2523 */
+  /* parser/parser_prod.nit:2612 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 2523);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 2612);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13343,13 +14418,13 @@ void parser___parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2524 */
+    /* parser/parser_prod.nit:2613 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -13358,56 +14433,59 @@ void parser___parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2525 */
+      /* parser/parser_prod.nit:2614 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2525);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2614);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2526 */
+      /* parser/parser_prod.nit:2615 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TNe, ID_parser___parser_nodes___TNe)) /*cast TNe*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2526);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2615);
       }
-      /* ./parser//parser_prod.nit:2527 */
+      /* parser/parser_prod.nit:2616 */
       ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2529 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2529);
+      /* parser/parser_prod.nit:2618 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2618);
     }
-    /* ./parser//parser_prod.nit:2531 */
+    /* parser/parser_prod.nit:2620 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANeMethid___visit_all[] = "parser_prod::ANeMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ANeMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2535;
+  fra.me.line = 2624;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2537 */
+  /* parser/parser_prod.nit:2626 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 2537);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 2626);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALeMethid___empty_init[] = "parser_prod::ALeMethid::empty_init";
 void parser___parser_prod___ALeMethid___empty_init(val_t p0, int* init_table){
   int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALeMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -13415,51 +14493,58 @@ void parser___parser_prod___ALeMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos77]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2541;
+  fra.me.line = 2630;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos77] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALeMethid___init_alemethid[] = "parser_prod::ALeMethid::init_alemethid";
 void parser___parser_prod___ALeMethid___init_alemethid(val_t p0, val_t p1, int* init_table){
   int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALeMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos78]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2543;
+  fra.me.line = 2632;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___init_alemethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2547 */
-  CALL_parser___parser_prod___ALeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2548 */
+  /* parser/parser_prod.nit:2632 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2636 */
+  CALL_parser___parser_prod___ALeMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2637 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2548);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2637);
   }
-  ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2549 */
+  ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2638 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2549);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2638);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos78] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALeMethid___replace_child[] = "parser_prod::ALeMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -13467,10 +14552,11 @@ void parser___parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2552;
+  fra.me.line = 2641;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13478,11 +14564,11 @@ void parser___parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2554 */
+  /* parser/parser_prod.nit:2643 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 2554);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 2643);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13492,13 +14578,13 @@ void parser___parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2555 */
+    /* parser/parser_prod.nit:2644 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -13507,56 +14593,59 @@ void parser___parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2556 */
+      /* parser/parser_prod.nit:2645 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2556);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2645);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2557 */
+      /* parser/parser_prod.nit:2646 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TLe, ID_parser___parser_nodes___TLe)) /*cast TLe*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2557);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2646);
       }
-      /* ./parser//parser_prod.nit:2558 */
+      /* parser/parser_prod.nit:2647 */
       ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2560 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2560);
+      /* parser/parser_prod.nit:2649 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2649);
     }
-    /* ./parser//parser_prod.nit:2562 */
+    /* parser/parser_prod.nit:2651 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALeMethid___visit_all[] = "parser_prod::ALeMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ALeMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2566;
+  fra.me.line = 2655;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2568 */
+  /* parser/parser_prod.nit:2657 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 2568);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 2657);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGeMethid___empty_init[] = "parser_prod::AGeMethid::empty_init";
 void parser___parser_prod___AGeMethid___empty_init(val_t p0, int* init_table){
   int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGeMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -13564,51 +14653,58 @@ void parser___parser_prod___AGeMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos79]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2572;
+  fra.me.line = 2661;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos79] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGeMethid___init_agemethid[] = "parser_prod::AGeMethid::init_agemethid";
 void parser___parser_prod___AGeMethid___init_agemethid(val_t p0, val_t p1, int* init_table){
   int itpos80 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGeMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos80]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2574;
+  fra.me.line = 2663;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___init_agemethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2578 */
-  CALL_parser___parser_prod___AGeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2579 */
+  /* parser/parser_prod.nit:2663 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2667 */
+  CALL_parser___parser_prod___AGeMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2668 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2579);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2668);
   }
-  ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2580 */
+  ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2669 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2580);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2669);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos80] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGeMethid___replace_child[] = "parser_prod::AGeMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -13616,10 +14712,11 @@ void parser___parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2583;
+  fra.me.line = 2672;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13627,11 +14724,11 @@ void parser___parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2585 */
+  /* parser/parser_prod.nit:2674 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 2585);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 2674);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13641,13 +14738,13 @@ void parser___parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2586 */
+    /* parser/parser_prod.nit:2675 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -13656,56 +14753,59 @@ void parser___parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2587 */
+      /* parser/parser_prod.nit:2676 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2587);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2676);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2588 */
+      /* parser/parser_prod.nit:2677 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TGe, ID_parser___parser_nodes___TGe)) /*cast TGe*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2588);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2677);
       }
-      /* ./parser//parser_prod.nit:2589 */
+      /* parser/parser_prod.nit:2678 */
       ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2591 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2591);
+      /* parser/parser_prod.nit:2680 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2680);
     }
-    /* ./parser//parser_prod.nit:2593 */
+    /* parser/parser_prod.nit:2682 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGeMethid___visit_all[] = "parser_prod::AGeMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AGeMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2597;
+  fra.me.line = 2686;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2599 */
+  /* parser/parser_prod.nit:2688 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 2599);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 2688);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALtMethid___empty_init[] = "parser_prod::ALtMethid::empty_init";
 void parser___parser_prod___ALtMethid___empty_init(val_t p0, int* init_table){
   int itpos81 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALtMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -13713,51 +14813,58 @@ void parser___parser_prod___ALtMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos81]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2603;
+  fra.me.line = 2692;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos81] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALtMethid___init_altmethid[] = "parser_prod::ALtMethid::init_altmethid";
 void parser___parser_prod___ALtMethid___init_altmethid(val_t p0, val_t p1, int* init_table){
   int itpos82 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALtMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos82]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2605;
+  fra.me.line = 2694;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___init_altmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2609 */
-  CALL_parser___parser_prod___ALtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2610 */
+  /* parser/parser_prod.nit:2694 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2698 */
+  CALL_parser___parser_prod___ALtMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2699 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2610);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2699);
   }
-  ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2611 */
+  ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2700 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2611);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2700);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos82] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALtMethid___replace_child[] = "parser_prod::ALtMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -13765,10 +14872,11 @@ void parser___parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2614;
+  fra.me.line = 2703;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13776,11 +14884,11 @@ void parser___parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2616 */
+  /* parser/parser_prod.nit:2705 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 2616);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 2705);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13790,13 +14898,13 @@ void parser___parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2617 */
+    /* parser/parser_prod.nit:2706 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -13805,56 +14913,59 @@ void parser___parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2618 */
+      /* parser/parser_prod.nit:2707 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2618);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2707);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2619 */
+      /* parser/parser_prod.nit:2708 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TLt, ID_parser___parser_nodes___TLt)) /*cast TLt*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2619);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2708);
       }
-      /* ./parser//parser_prod.nit:2620 */
+      /* parser/parser_prod.nit:2709 */
       ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2622 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2622);
+      /* parser/parser_prod.nit:2711 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2711);
     }
-    /* ./parser//parser_prod.nit:2624 */
+    /* parser/parser_prod.nit:2713 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALtMethid___visit_all[] = "parser_prod::ALtMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ALtMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2628;
+  fra.me.line = 2717;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2630 */
+  /* parser/parser_prod.nit:2719 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 2630);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 2719);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGtMethid___empty_init[] = "parser_prod::AGtMethid::empty_init";
 void parser___parser_prod___AGtMethid___empty_init(val_t p0, int* init_table){
   int itpos83 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGtMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -13862,51 +14973,58 @@ void parser___parser_prod___AGtMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos83]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2634;
+  fra.me.line = 2723;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos83] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGtMethid___init_agtmethid[] = "parser_prod::AGtMethid::init_agtmethid";
 void parser___parser_prod___AGtMethid___init_agtmethid(val_t p0, val_t p1, int* init_table){
   int itpos84 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGtMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos84]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2636;
+  fra.me.line = 2725;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___init_agtmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2640 */
-  CALL_parser___parser_prod___AGtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2641 */
+  /* parser/parser_prod.nit:2725 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2729 */
+  CALL_parser___parser_prod___AGtMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2730 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2641);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2730);
   }
-  ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2642 */
+  ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2731 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2642);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2731);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos84] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGtMethid___replace_child[] = "parser_prod::AGtMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -13914,10 +15032,11 @@ void parser___parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2645;
+  fra.me.line = 2734;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13925,11 +15044,11 @@ void parser___parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2647 */
+  /* parser/parser_prod.nit:2736 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 2647);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 2736);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13939,13 +15058,13 @@ void parser___parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2648 */
+    /* parser/parser_prod.nit:2737 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -13954,56 +15073,59 @@ void parser___parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2649 */
+      /* parser/parser_prod.nit:2738 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2649);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2738);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2650 */
+      /* parser/parser_prod.nit:2739 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TGt, ID_parser___parser_nodes___TGt)) /*cast TGt*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2650);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2739);
       }
-      /* ./parser//parser_prod.nit:2651 */
+      /* parser/parser_prod.nit:2740 */
       ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2653 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2653);
+      /* parser/parser_prod.nit:2742 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2742);
     }
-    /* ./parser//parser_prod.nit:2655 */
+    /* parser/parser_prod.nit:2744 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGtMethid___visit_all[] = "parser_prod::AGtMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AGtMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2659;
+  fra.me.line = 2748;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2661 */
+  /* parser/parser_prod.nit:2750 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 2661);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 2750);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALlMethid___empty_init[] = "parser_prod::ALlMethid::empty_init";
 void parser___parser_prod___ALlMethid___empty_init(val_t p0, int* init_table){
   int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALlMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -14011,51 +15133,58 @@ void parser___parser_prod___ALlMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos85]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2665;
+  fra.me.line = 2754;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos85] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALlMethid___init_allmethid[] = "parser_prod::ALlMethid::init_allmethid";
 void parser___parser_prod___ALlMethid___init_allmethid(val_t p0, val_t p1, int* init_table){
   int itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALlMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos86]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2667;
+  fra.me.line = 2756;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___init_allmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2671 */
-  CALL_parser___parser_prod___ALlMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2672 */
+  /* parser/parser_prod.nit:2756 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2760 */
+  CALL_parser___parser_prod___ALlMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2761 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2672);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2761);
   }
-  ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2673 */
+  ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2762 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2673);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2762);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos86] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALlMethid___replace_child[] = "parser_prod::ALlMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -14063,10 +15192,11 @@ void parser___parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2676;
+  fra.me.line = 2765;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14074,11 +15204,11 @@ void parser___parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2678 */
+  /* parser/parser_prod.nit:2767 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 2678);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 2767);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14088,13 +15218,13 @@ void parser___parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2679 */
+    /* parser/parser_prod.nit:2768 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -14103,56 +15233,59 @@ void parser___parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2680 */
+      /* parser/parser_prod.nit:2769 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2680);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2769);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2681 */
+      /* parser/parser_prod.nit:2770 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TLl, ID_parser___parser_nodes___TLl)) /*cast TLl*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2681);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2770);
       }
-      /* ./parser//parser_prod.nit:2682 */
+      /* parser/parser_prod.nit:2771 */
       ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2684 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2684);
+      /* parser/parser_prod.nit:2773 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2773);
     }
-    /* ./parser//parser_prod.nit:2686 */
+    /* parser/parser_prod.nit:2775 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALlMethid___visit_all[] = "parser_prod::ALlMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ALlMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2690;
+  fra.me.line = 2779;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2692 */
+  /* parser/parser_prod.nit:2781 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 2692);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 2781);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGgMethid___empty_init[] = "parser_prod::AGgMethid::empty_init";
 void parser___parser_prod___AGgMethid___empty_init(val_t p0, int* init_table){
   int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGgMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -14160,51 +15293,58 @@ void parser___parser_prod___AGgMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos87]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2696;
+  fra.me.line = 2785;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos87] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGgMethid___init_aggmethid[] = "parser_prod::AGgMethid::init_aggmethid";
 void parser___parser_prod___AGgMethid___init_aggmethid(val_t p0, val_t p1, int* init_table){
   int itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGgMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos88]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2698;
+  fra.me.line = 2787;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___init_aggmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2702 */
-  CALL_parser___parser_prod___AGgMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2703 */
+  /* parser/parser_prod.nit:2787 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2791 */
+  CALL_parser___parser_prod___AGgMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2792 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2703);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2792);
   }
-  ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2704 */
+  ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2793 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2704);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2793);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos88] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGgMethid___replace_child[] = "parser_prod::AGgMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -14212,10 +15352,11 @@ void parser___parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2707;
+  fra.me.line = 2796;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14223,11 +15364,11 @@ void parser___parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2709 */
+  /* parser/parser_prod.nit:2798 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 2709);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 2798);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14237,13 +15378,13 @@ void parser___parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2710 */
+    /* parser/parser_prod.nit:2799 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -14252,56 +15393,59 @@ void parser___parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2711 */
+      /* parser/parser_prod.nit:2800 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2711);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2800);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2712 */
+      /* parser/parser_prod.nit:2801 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TGg, ID_parser___parser_nodes___TGg)) /*cast TGg*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2712);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2801);
       }
-      /* ./parser//parser_prod.nit:2713 */
+      /* parser/parser_prod.nit:2802 */
       ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2715 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2715);
+      /* parser/parser_prod.nit:2804 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2804);
     }
-    /* ./parser//parser_prod.nit:2717 */
+    /* parser/parser_prod.nit:2806 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGgMethid___visit_all[] = "parser_prod::AGgMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AGgMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2721;
+  fra.me.line = 2810;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2723 */
+  /* parser/parser_prod.nit:2812 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 2723);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 2812);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraMethid___empty_init[] = "parser_prod::ABraMethid::empty_init";
 void parser___parser_prod___ABraMethid___empty_init(val_t p0, int* init_table){
   int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -14309,66 +15453,73 @@ void parser___parser_prod___ABraMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos89]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2727;
+  fra.me.line = 2816;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos89] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraMethid___init_abramethid[] = "parser_prod::ABraMethid::init_abramethid";
 void parser___parser_prod___ABraMethid___init_abramethid(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos90]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2729;
+  fra.me.line = 2818;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___init_abramethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2734 */
-  CALL_parser___parser_prod___ABraMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2735 */
+  /* parser/parser_prod.nit:2818 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2823 */
+  CALL_parser___parser_prod___ABraMethid___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:2824 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2735);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2824);
   }
-  ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2736 */
+  ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2825 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2736);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2825);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2737 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2826 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2737);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2826);
   }
-  ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2738 */
+  ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:2827 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2738);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2827);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos90] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraMethid___replace_child[] = "parser_prod::ABraMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -14376,10 +15527,11 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2741;
+  fra.me.line = 2830;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14387,11 +15539,11 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2743 */
+  /* parser/parser_prod.nit:2832 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2743);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2832);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14401,13 +15553,13 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2744 */
+    /* parser/parser_prod.nit:2833 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -14416,32 +15568,32 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2745 */
+      /* parser/parser_prod.nit:2834 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2745);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2834);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2746 */
+      /* parser/parser_prod.nit:2835 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2746);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2835);
       }
-      /* ./parser//parser_prod.nit:2747 */
+      /* parser/parser_prod.nit:2836 */
       ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2749 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2749);
+      /* parser/parser_prod.nit:2838 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2838);
     }
-    /* ./parser//parser_prod.nit:2751 */
+    /* parser/parser_prod.nit:2840 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2753 */
+  /* parser/parser_prod.nit:2842 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2753);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2842);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14451,13 +15603,13 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2754 */
+    /* parser/parser_prod.nit:2843 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -14466,65 +15618,68 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2755 */
+      /* parser/parser_prod.nit:2844 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2755);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2844);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2756 */
+      /* parser/parser_prod.nit:2845 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast TCbra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2756);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2845);
       }
-      /* ./parser//parser_prod.nit:2757 */
+      /* parser/parser_prod.nit:2846 */
       ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2759 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2759);
+      /* parser/parser_prod.nit:2848 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2848);
     }
-    /* ./parser//parser_prod.nit:2761 */
+    /* parser/parser_prod.nit:2850 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraMethid___visit_all[] = "parser_prod::ABraMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ABraMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2765;
+  fra.me.line = 2854;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2767 */
+  /* parser/parser_prod.nit:2856 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2767);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2856);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2768 */
+  /* parser/parser_prod.nit:2857 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2768);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2857);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarshipMethid___empty_init[] = "parser_prod::AStarshipMethid::empty_init";
 void parser___parser_prod___AStarshipMethid___empty_init(val_t p0, int* init_table){
   int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarshipMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -14532,51 +15687,58 @@ void parser___parser_prod___AStarshipMethid___empty_init(val_t p0, int* init_tab
   if (init_table[itpos91]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2772;
+  fra.me.line = 2861;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos91] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarshipMethid___init_astarshipmethid[] = "parser_prod::AStarshipMethid::init_astarshipmethid";
 void parser___parser_prod___AStarshipMethid___init_astarshipmethid(val_t p0, val_t p1, int* init_table){
   int itpos92 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarshipMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos92]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2774;
+  fra.me.line = 2863;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___init_astarshipmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2778 */
-  CALL_parser___parser_prod___AStarshipMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2779 */
+  /* parser/parser_prod.nit:2863 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2867 */
+  CALL_parser___parser_prod___AStarshipMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:2868 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2779);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2868);
   }
-  ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2780 */
+  ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2869 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2780);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2869);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos92] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarshipMethid___replace_child[] = "parser_prod::AStarshipMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -14584,10 +15746,11 @@ void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2783;
+  fra.me.line = 2872;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14595,11 +15758,11 @@ void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2785 */
+  /* parser/parser_prod.nit:2874 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 2785);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 2874);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14609,13 +15772,13 @@ void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2786 */
+    /* parser/parser_prod.nit:2875 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -14624,56 +15787,59 @@ void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2787 */
+      /* parser/parser_prod.nit:2876 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2787);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2876);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2788 */
+      /* parser/parser_prod.nit:2877 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TStarship, ID_parser___parser_nodes___TStarship)) /*cast TStarship*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2788);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2877);
       }
-      /* ./parser//parser_prod.nit:2789 */
+      /* parser/parser_prod.nit:2878 */
       ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2791 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2791);
+      /* parser/parser_prod.nit:2880 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2880);
     }
-    /* ./parser//parser_prod.nit:2793 */
+    /* parser/parser_prod.nit:2882 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarshipMethid___visit_all[] = "parser_prod::AStarshipMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStarshipMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2797;
+  fra.me.line = 2886;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2799 */
+  /* parser/parser_prod.nit:2888 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 2799);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 2888);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAssignMethid___empty_init[] = "parser_prod::AAssignMethid::empty_init";
 void parser___parser_prod___AAssignMethid___empty_init(val_t p0, int* init_table){
   int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAssignMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -14681,66 +15847,73 @@ void parser___parser_prod___AAssignMethid___empty_init(val_t p0, int* init_table
   if (init_table[itpos93]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2803;
+  fra.me.line = 2892;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos93] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAssignMethid___init_aassignmethid[] = "parser_prod::AAssignMethid::init_aassignmethid";
 void parser___parser_prod___AAssignMethid___init_aassignmethid(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos94 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAssignMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos94]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2805;
+  fra.me.line = 2894;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___init_aassignmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2810 */
-  CALL_parser___parser_prod___AAssignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2811 */
+  /* parser/parser_prod.nit:2894 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2899 */
+  CALL_parser___parser_prod___AAssignMethid___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:2900 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2811);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2900);
   }
-  ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2812 */
+  ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2901 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2812);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2901);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2813 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2902 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2813);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2902);
   }
-  ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2814 */
+  ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:2903 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2814);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2903);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos94] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAssignMethid___replace_child[] = "parser_prod::AAssignMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -14748,10 +15921,11 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2817;
+  fra.me.line = 2906;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14759,11 +15933,11 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2819 */
+  /* parser/parser_prod.nit:2908 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2819);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2908);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14773,13 +15947,13 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2820 */
+    /* parser/parser_prod.nit:2909 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -14788,32 +15962,32 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2821 */
+      /* parser/parser_prod.nit:2910 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2821);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2910);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2822 */
+      /* parser/parser_prod.nit:2911 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2822);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2911);
       }
-      /* ./parser//parser_prod.nit:2823 */
+      /* parser/parser_prod.nit:2912 */
       ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2825 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2825);
+      /* parser/parser_prod.nit:2914 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2914);
     }
-    /* ./parser//parser_prod.nit:2827 */
+    /* parser/parser_prod.nit:2916 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2829 */
+  /* parser/parser_prod.nit:2918 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2829);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2918);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14823,13 +15997,13 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2830 */
+    /* parser/parser_prod.nit:2919 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -14838,65 +16012,68 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2831 */
+      /* parser/parser_prod.nit:2920 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2831);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2920);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2832 */
+      /* parser/parser_prod.nit:2921 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2832);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2921);
       }
-      /* ./parser//parser_prod.nit:2833 */
+      /* parser/parser_prod.nit:2922 */
       ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2835 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2835);
+      /* parser/parser_prod.nit:2924 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2924);
     }
-    /* ./parser//parser_prod.nit:2837 */
+    /* parser/parser_prod.nit:2926 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAssignMethid___visit_all[] = "parser_prod::AAssignMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AAssignMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2841;
+  fra.me.line = 2930;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2843 */
+  /* parser/parser_prod.nit:2932 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2843);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2932);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2844 */
+  /* parser/parser_prod.nit:2933 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2844);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2933);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraassignMethid___empty_init[] = "parser_prod::ABraassignMethid::empty_init";
 void parser___parser_prod___ABraassignMethid___empty_init(val_t p0, int* init_table){
   int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraassignMethid].i;
   struct {struct stack_frame_t me;} fra;
@@ -14904,81 +16081,88 @@ void parser___parser_prod___ABraassignMethid___empty_init(val_t p0, int* init_ta
   if (init_table[itpos95]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2848;
+  fra.me.line = 2937;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos95] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraassignMethid___init_abraassignmethid[] = "parser_prod::ABraassignMethid::init_abraassignmethid";
 void parser___parser_prod___ABraassignMethid___init_abraassignmethid(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos96 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraassignMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos96]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2850;
+  fra.me.line = 2939;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___init_abraassignmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:2856 */
-  CALL_parser___parser_prod___ABraassignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2857 */
+  /* parser/parser_prod.nit:2939 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2945 */
+  CALL_parser___parser_prod___ABraassignMethid___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:2946 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2857);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2946);
   }
-  ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2858 */
+  ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2947 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2858);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2947);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2859 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:2948 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2859);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2948);
   }
-  ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2860 */
+  ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:2949 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2860);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2949);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2861 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:2950 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2861);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2950);
   }
-  ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:2862 */
+  ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:2951 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2862);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2951);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos96] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraassignMethid___replace_child[] = "parser_prod::ABraassignMethid::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -14986,10 +16170,11 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2865;
+  fra.me.line = 2954;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14997,11 +16182,11 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2867 */
+  /* parser/parser_prod.nit:2956 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2867);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2956);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15011,13 +16196,13 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2868 */
+    /* parser/parser_prod.nit:2957 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15026,32 +16211,32 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2869 */
+      /* parser/parser_prod.nit:2958 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2869);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2958);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2870 */
+      /* parser/parser_prod.nit:2959 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2870);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2959);
       }
-      /* ./parser//parser_prod.nit:2871 */
+      /* parser/parser_prod.nit:2960 */
       ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2873 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2873);
+      /* parser/parser_prod.nit:2962 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2962);
     }
-    /* ./parser//parser_prod.nit:2875 */
+    /* parser/parser_prod.nit:2964 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2877 */
+  /* parser/parser_prod.nit:2966 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2877);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2966);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15061,13 +16246,13 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2878 */
+    /* parser/parser_prod.nit:2967 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15076,32 +16261,32 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2879 */
+      /* parser/parser_prod.nit:2968 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2879);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2968);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2880 */
+      /* parser/parser_prod.nit:2969 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast TCbra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2880);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2969);
       }
-      /* ./parser//parser_prod.nit:2881 */
+      /* parser/parser_prod.nit:2970 */
       ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2883 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2883);
+      /* parser/parser_prod.nit:2972 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2972);
     }
-    /* ./parser//parser_prod.nit:2885 */
+    /* parser/parser_prod.nit:2974 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2887 */
+  /* parser/parser_prod.nit:2976 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2887);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2976);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15111,13 +16296,13 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2888 */
+    /* parser/parser_prod.nit:2977 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15126,73 +16311,76 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2889 */
+      /* parser/parser_prod.nit:2978 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2889);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2978);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2890 */
+      /* parser/parser_prod.nit:2979 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2890);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2979);
       }
-      /* ./parser//parser_prod.nit:2891 */
+      /* parser/parser_prod.nit:2980 */
       ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2893 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2893);
+      /* parser/parser_prod.nit:2982 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2982);
     }
-    /* ./parser//parser_prod.nit:2895 */
+    /* parser/parser_prod.nit:2984 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraassignMethid___visit_all[] = "parser_prod::ABraassignMethid::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ABraassignMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2899;
+  fra.me.line = 2988;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2901 */
+  /* parser/parser_prod.nit:2990 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2901);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2990);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2902 */
+  /* parser/parser_prod.nit:2991 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2902);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2991);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2903 */
+  /* parser/parser_prod.nit:2992 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2903);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2992);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASignature___empty_init[] = "parser_prod::ASignature::empty_init";
 void parser___parser_prod___ASignature___empty_init(val_t p0, int* init_table){
   int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASignature].i;
   struct {struct stack_frame_t me;} fra;
@@ -15200,65 +16388,120 @@ void parser___parser_prod___ASignature___empty_init(val_t p0, int* init_table){
   if (init_table[itpos97]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2907;
+  fra.me.line = 2996;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos97] = 1;
   return;
 }
-void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+static const char LOCATE_parser___parser_prod___ASignature___init_asignature[] = "parser_prod::ASignature::init_asignature";
+void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
   int itpos98 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASignature].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos98]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2909;
+  fra.me.line = 2998;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___init_asignature;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:2915 */
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* parser/parser_prod.nit:3006 */
   CALL_parser___parser_prod___ASignature___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___init_asignature_1));
-  /* ./parser//parser_prod.nit:2921 */
-  ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2922 */
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3007 */
+  ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3008 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2923 */
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* parser/parser_prod.nit:3009 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2923);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3009);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___init_asignature_1));
+  /* parser/parser_prod.nit:3016 */
+  ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3017 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___init_asignature_2));
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3018 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3018);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  /* parser/parser_prod.nit:3020 */
+  ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:3021 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3022 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3022);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  }
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[5])(fra.me.REG[5], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___init_asignature_2));
   stack_frame_head = fra.me.prev;
   init_table[itpos98] = 1;
   return;
@@ -15268,34 +16511,35 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:2916 */
+    /* parser/parser_prod.nit:3011 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___ASignature___init_asignature;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:2917 */
+    /* parser/parser_prod.nit:3012 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AParam, ID_parser___parser_nodes___AParam)) /*cast AParam*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2917);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3012);
     }
-    /* ./parser//parser_prod.nit:2918 */
+    /* parser/parser_prod.nit:3013 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 2918);
+      nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3013);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ASignature____n_params(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:2919 */
+    /* parser/parser_prod.nit:3014 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -15305,38 +16549,40 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:2925 */
+    /* parser/parser_prod.nit:3024 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___ASignature___init_asignature;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:2926 */
+    /* parser/parser_prod.nit:3025 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AClosureDecl, ID_parser___parser_nodes___AClosureDecl)) /*cast AClosureDecl*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2926);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3025);
     }
-    /* ./parser//parser_prod.nit:2927 */
+    /* parser/parser_prod.nit:3026 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 2927);
+      nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3026);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:2928 */
+    /* parser/parser_prod.nit:3027 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ASignature___replace_child[] = "parser_prod::ASignature::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -15347,10 +16593,11 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2932;
+  fra.me.line = 3031;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15358,37 +16605,93 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2934 */
+  /* parser/parser_prod.nit:3033 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3034 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:3035 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3035);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3036 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3036);
+      }
+      /* parser/parser_prod.nit:3037 */
+      ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:3039 */
+      ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:3041 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:3043 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 2934);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3043);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:2934 */
+      /* parser/parser_prod.nit:3043 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:2935 */
+      /* parser/parser_prod.nit:3044 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 2935);
+        nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3044);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -15396,13 +16699,13 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:2936 */
+        /* parser/parser_prod.nit:3045 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15411,59 +16714,110 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:2937 */
+          /* parser/parser_prod.nit:3046 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AParam, ID_parser___parser_nodes___AParam)) /*cast AParam*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2937);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3046);
           }
-          /* ./parser//parser_prod.nit:2938 */
+          /* parser/parser_prod.nit:3047 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 2938);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3047);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:2939 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:3048 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2939);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3048);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:2941 */
+          /* parser/parser_prod.nit:3050 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 2941);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3050);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:2943 */
+        /* parser/parser_prod.nit:3052 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:2946 */
+  /* parser/parser_prod.nit:3055 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3056 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:3057 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3057);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3058 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3058);
+      }
+      /* parser/parser_prod.nit:3059 */
+      ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:3061 */
+      ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:3063 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:3065 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -15471,13 +16825,13 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2947 */
+    /* parser/parser_prod.nit:3066 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15486,58 +16840,63 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:2948 */
+      /* parser/parser_prod.nit:3067 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2948);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3067);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2949 */
+      /* parser/parser_prod.nit:3068 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2949);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3068);
       }
-      /* ./parser//parser_prod.nit:2950 */
+      /* parser/parser_prod.nit:3069 */
       ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2952 */
+      /* parser/parser_prod.nit:3071 */
       ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2954 */
+    /* parser/parser_prod.nit:3073 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2956 */
+  /* parser/parser_prod.nit:3075 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 2956);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3075);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:2956 */
+      /* parser/parser_prod.nit:3075 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:2957 */
+      /* parser/parser_prod.nit:3076 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 2957);
+        nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3076);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -15545,13 +16904,13 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:2958 */
+        /* parser/parser_prod.nit:3077 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15560,47 +16919,47 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:2959 */
+          /* parser/parser_prod.nit:3078 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureDecl, ID_parser___parser_nodes___AClosureDecl)) /*cast AClosureDecl*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2959);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3078);
           }
-          /* ./parser//parser_prod.nit:2960 */
+          /* parser/parser_prod.nit:3079 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 2960);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3079);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:2961 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:3080 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2961);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3080);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:2963 */
+          /* parser/parser_prod.nit:3082 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 2963);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3082);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:2965 */
+        /* parser/parser_prod.nit:3084 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label3;
     }
   }
@@ -15609,63 +16968,118 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASignature___visit_all[] = "parser_prod::ASignature::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2970;
+  fra.me.line = 3089;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2972 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3089 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3091 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 2972);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___visit_all_1));
-  /* ./parser//parser_prod.nit:2975 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3092 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3092);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:3094 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3094);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___visit_all_1));
+  /* parser/parser_prod.nit:3097 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2976 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+    /* parser/parser_prod.nit:3098 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2976);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3098);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:3100 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3101 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3101);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:2978 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3103 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 2978);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3103);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___visit_all_2));
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___visit_all_2));
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -15679,12 +17093,13 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___ASignature___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:2973 */
+    /* parser/parser_prod.nit:3095 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -15699,16 +17114,18 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___ASignature___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:2979 */
+    /* parser/parser_prod.nit:3104 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AParam___empty_init[] = "parser_prod::AParam::empty_init";
 void parser___parser_prod___AParam___empty_init(val_t p0, int* init_table){
   int itpos99 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParam].i;
   struct {struct stack_frame_t me;} fra;
@@ -15716,61 +17133,67 @@ void parser___parser_prod___AParam___empty_init(val_t p0, int* init_table){
   if (init_table[itpos99]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2984;
+  fra.me.line = 3109;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos99] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AParam___init_aparam[] = "parser_prod::AParam::init_aparam";
 void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParam].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos100]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2986;
+  fra.me.line = 3111;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___init_aparam;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:2992 */
-  CALL_parser___parser_prod___AParam___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2993 */
+  /* parser/parser_prod.nit:3111 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3117 */
+  CALL_parser___parser_prod___AParam___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:3118 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2993);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3118);
   }
-  ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2994 */
+  ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3119 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2994);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3119);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2995 */
-  ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2996 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:3120 */
+  ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3121 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15779,22 +17202,22 @@ void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2997 */
+    /* parser/parser_prod.nit:3122 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2997);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3122);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:2999 */
-  ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3000 */
+  /* parser/parser_prod.nit:3124 */
+  ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3125 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
@@ -15803,17 +17226,18 @@ void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3001 */
+    /* parser/parser_prod.nit:3126 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3001);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3126);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos100] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AParam___replace_child[] = "parser_prod::AParam::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -15821,10 +17245,11 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3005;
+  fra.me.line = 3130;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15832,11 +17257,11 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3007 */
+  /* parser/parser_prod.nit:3132 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3007);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3132);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15846,13 +17271,13 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3008 */
+    /* parser/parser_prod.nit:3133 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15861,35 +17286,35 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3009 */
+      /* parser/parser_prod.nit:3134 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3009);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3134);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3010 */
+      /* parser/parser_prod.nit:3135 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3010);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3135);
       }
-      /* ./parser//parser_prod.nit:3011 */
+      /* parser/parser_prod.nit:3136 */
       ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3013 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3013);
+      /* parser/parser_prod.nit:3138 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3138);
     }
-    /* ./parser//parser_prod.nit:3015 */
+    /* parser/parser_prod.nit:3140 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3017 */
+  /* parser/parser_prod.nit:3142 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -15897,13 +17322,13 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3018 */
+    /* parser/parser_prod.nit:3143 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15912,35 +17337,35 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3019 */
+      /* parser/parser_prod.nit:3144 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3019);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3144);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3020 */
+      /* parser/parser_prod.nit:3145 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3020);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3145);
       }
-      /* ./parser//parser_prod.nit:3021 */
+      /* parser/parser_prod.nit:3146 */
       ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3023 */
+      /* parser/parser_prod.nit:3148 */
       ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3025 */
+    /* parser/parser_prod.nit:3150 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3027 */
+  /* parser/parser_prod.nit:3152 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -15948,13 +17373,13 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3028 */
+    /* parser/parser_prod.nit:3153 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -15963,108 +17388,114 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3029 */
+      /* parser/parser_prod.nit:3154 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3029);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3154);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3030 */
+      /* parser/parser_prod.nit:3155 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast TDotdotdot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3030);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3155);
       }
-      /* ./parser//parser_prod.nit:3031 */
+      /* parser/parser_prod.nit:3156 */
       ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3033 */
+      /* parser/parser_prod.nit:3158 */
       ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3035 */
+    /* parser/parser_prod.nit:3160 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AParam___visit_all[] = "parser_prod::AParam::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3039;
+  fra.me.line = 3164;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3041 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3164 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3166 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3041);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3166);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3042 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3167 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3043 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+    /* parser/parser_prod.nit:3168 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3043);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3168);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3045 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3170 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3046 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast TDotdotdot*/;
+    /* parser/parser_prod.nit:3171 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast TDotdotdot*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3046);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3171);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AClosureDecl___empty_init[] = "parser_prod::AClosureDecl::empty_init";
 void parser___parser_prod___AClosureDecl___empty_init(val_t p0, int* init_table){
   int itpos101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDecl].i;
   struct {struct stack_frame_t me;} fra;
@@ -16072,52 +17503,58 @@ void parser___parser_prod___AClosureDecl___empty_init(val_t p0, int* init_table)
   if (init_table[itpos101]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3051;
+  fra.me.line = 3176;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos101] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AClosureDecl___init_aclosuredecl[] = "parser_prod::AClosureDecl::init_aclosuredecl";
 void parser___parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
   int itpos102 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDecl].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos102]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3053;
+  fra.me.line = 3178;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___init_aclosuredecl;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:3061 */
-  CALL_parser___parser_prod___AClosureDecl___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3062 */
-  ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3063 */
+  /* parser/parser_prod.nit:3178 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3186 */
+  CALL_parser___parser_prod___AClosureDecl___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:3187 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3188 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -16126,61 +17563,61 @@ void parser___parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3064 */
+    /* parser/parser_prod.nit:3189 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3064);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3189);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
   }
-  /* ./parser//parser_prod.nit:3066 */
+  /* parser/parser_prod.nit:3191 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3066);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3191);
   }
-  ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3067 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3192 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3067);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3192);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3068 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:3193 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3068);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3193);
   }
-  ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3069 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[6]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3194 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3069);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3194);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3070 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:3195 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3070);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3195);
   }
-  ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3071 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:3196 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3071);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3196);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3072 */
-  ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:3073 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:3197 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:3198 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
@@ -16189,17 +17626,18 @@ void parser___parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3074 */
+    /* parser/parser_prod.nit:3199 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3074);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3199);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos102] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AClosureDecl___replace_child[] = "parser_prod::AClosureDecl::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -16207,10 +17645,11 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3078;
+  fra.me.line = 3203;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16218,14 +17657,14 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3080 */
+  /* parser/parser_prod.nit:3205 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -16233,13 +17672,13 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3081 */
+    /* parser/parser_prod.nit:3206 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -16248,32 +17687,32 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3082 */
+      /* parser/parser_prod.nit:3207 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3082);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3207);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3083 */
+      /* parser/parser_prod.nit:3208 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3083);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3208);
       }
-      /* ./parser//parser_prod.nit:3084 */
+      /* parser/parser_prod.nit:3209 */
       ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3086 */
+      /* parser/parser_prod.nit:3211 */
       ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3088 */
+    /* parser/parser_prod.nit:3213 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3090 */
+  /* parser/parser_prod.nit:3215 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 3090);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 3215);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16283,13 +17722,13 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3091 */
+    /* parser/parser_prod.nit:3216 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -16298,32 +17737,32 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3092 */
+      /* parser/parser_prod.nit:3217 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3092);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3217);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3093 */
+      /* parser/parser_prod.nit:3218 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast TBang*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3093);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3218);
       }
-      /* ./parser//parser_prod.nit:3094 */
+      /* parser/parser_prod.nit:3219 */
       ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3096 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3096);
+      /* parser/parser_prod.nit:3221 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3221);
     }
-    /* ./parser//parser_prod.nit:3098 */
+    /* parser/parser_prod.nit:3223 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3100 */
+  /* parser/parser_prod.nit:3225 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3100);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3225);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16333,13 +17772,13 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3101 */
+    /* parser/parser_prod.nit:3226 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -16348,32 +17787,32 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3102 */
+      /* parser/parser_prod.nit:3227 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3102);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3227);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3103 */
+      /* parser/parser_prod.nit:3228 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3103);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3228);
       }
-      /* ./parser//parser_prod.nit:3104 */
+      /* parser/parser_prod.nit:3229 */
       ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3106 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3106);
+      /* parser/parser_prod.nit:3231 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3231);
     }
-    /* ./parser//parser_prod.nit:3108 */
+    /* parser/parser_prod.nit:3233 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3110 */
+  /* parser/parser_prod.nit:3235 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 3110);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 3235);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16383,13 +17822,13 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3111 */
+    /* parser/parser_prod.nit:3236 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -16398,35 +17837,35 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3112 */
+      /* parser/parser_prod.nit:3237 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3112);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3237);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3113 */
+      /* parser/parser_prod.nit:3238 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3113);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3238);
       }
-      /* ./parser//parser_prod.nit:3114 */
+      /* parser/parser_prod.nit:3239 */
       ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3116 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3116);
+      /* parser/parser_prod.nit:3241 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3241);
     }
-    /* ./parser//parser_prod.nit:3118 */
+    /* parser/parser_prod.nit:3243 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3120 */
+  /* parser/parser_prod.nit:3245 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -16434,13 +17873,13 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3121 */
+    /* parser/parser_prod.nit:3246 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -16449,124 +17888,130 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3122 */
+      /* parser/parser_prod.nit:3247 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3122);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3247);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3123 */
+      /* parser/parser_prod.nit:3248 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3123);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3248);
       }
-      /* ./parser//parser_prod.nit:3124 */
+      /* parser/parser_prod.nit:3249 */
       ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3126 */
+      /* parser/parser_prod.nit:3251 */
       ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3128 */
+    /* parser/parser_prod.nit:3253 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AClosureDecl___visit_all[] = "parser_prod::AClosureDecl::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3132;
+  fra.me.line = 3257;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3134 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3257 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3259 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3135 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
+    /* parser/parser_prod.nit:3260 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3135);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3260);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3137 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3262 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 3137);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 3262);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3138 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3263 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3138);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3263);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3139 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3264 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 3139);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 3264);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3140 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3265 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3141 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:3266 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3141);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3266);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AType___empty_init[] = "parser_prod::AType::empty_init";
 void parser___parser_prod___AType___empty_init(val_t p0, int* init_table){
   int itpos103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AType].i;
   struct {struct stack_frame_t me;} fra;
@@ -16574,48 +18019,54 @@ void parser___parser_prod___AType___empty_init(val_t p0, int* init_table){
   if (init_table[itpos103]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3146;
+  fra.me.line = 3271;
   fra.me.meth = LOCATE_parser___parser_prod___AType___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos103] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AType___init_atype[] = "parser_prod::AType::init_atype";
 void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AType].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos104]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3148;
+  fra.me.line = 3273;
   fra.me.meth = LOCATE_parser___parser_prod___AType___init_atype;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3154 */
-  CALL_parser___parser_prod___AType___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3155 */
-  ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3156 */
+  /* parser/parser_prod.nit:3273 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3279 */
+  CALL_parser___parser_prod___AType___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:3280 */
+  ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3281 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -16624,26 +18075,26 @@ void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3157 */
+    /* parser/parser_prod.nit:3282 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3157);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3282);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:3159 */
+  /* parser/parser_prod.nit:3284 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3159);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3284);
   }
-  ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3160 */
+  ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3285 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3160);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3285);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AType___init_atype_1));
   stack_frame_head = fra.me.prev;
   init_table[itpos104] = 1;
@@ -16654,38 +18105,40 @@ void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:3161 */
+    /* parser/parser_prod.nit:3286 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AType___init_atype;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:3162 */
+    /* parser/parser_prod.nit:3287 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3162);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3287);
     }
-    /* ./parser//parser_prod.nit:3163 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:3288 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(closctx->REG[4])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3163);
+      nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3288);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AType____n_types(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AType____n_types(closctx->REG[4]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:3164 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:3289 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AType___replace_child[] = "parser_prod::AType::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -16696,10 +18149,11 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3168;
+  fra.me.line = 3293;
   fra.me.meth = LOCATE_parser___parser_prod___AType___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16707,14 +18161,14 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3170 */
+  /* parser/parser_prod.nit:3295 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -16722,13 +18176,13 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3171 */
+    /* parser/parser_prod.nit:3296 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -16737,32 +18191,32 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3172 */
+      /* parser/parser_prod.nit:3297 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3172);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3297);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3173 */
+      /* parser/parser_prod.nit:3298 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3173);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3298);
       }
-      /* ./parser//parser_prod.nit:3174 */
+      /* parser/parser_prod.nit:3299 */
       ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3176 */
+      /* parser/parser_prod.nit:3301 */
       ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3178 */
+    /* parser/parser_prod.nit:3303 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3180 */
+  /* parser/parser_prod.nit:3305 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3180);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3305);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16772,13 +18226,13 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3181 */
+    /* parser/parser_prod.nit:3306 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -16787,58 +18241,63 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3182 */
+      /* parser/parser_prod.nit:3307 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3182);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3307);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3183 */
+      /* parser/parser_prod.nit:3308 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3183);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3308);
       }
-      /* ./parser//parser_prod.nit:3184 */
+      /* parser/parser_prod.nit:3309 */
       ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3186 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3186);
+      /* parser/parser_prod.nit:3311 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3311);
     }
-    /* ./parser//parser_prod.nit:3188 */
+    /* parser/parser_prod.nit:3313 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3190 */
+  /* parser/parser_prod.nit:3315 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3190);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3315);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:3190 */
+      /* parser/parser_prod.nit:3315 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:3191 */
+      /* parser/parser_prod.nit:3316 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3191);
+        nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3316);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -16846,13 +18305,13 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:3192 */
+        /* parser/parser_prod.nit:3317 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -16861,47 +18320,47 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:3193 */
+          /* parser/parser_prod.nit:3318 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3193);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3318);
           }
-          /* ./parser//parser_prod.nit:3194 */
+          /* parser/parser_prod.nit:3319 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3194);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3319);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:3195 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:3320 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3195);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3320);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:3197 */
+          /* parser/parser_prod.nit:3322 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3197);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3322);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:3199 */
+        /* parser/parser_prod.nit:3324 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
@@ -16910,63 +18369,68 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AType___visit_all[] = "parser_prod::AType::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3204;
+  fra.me.line = 3329;
   fra.me.meth = LOCATE_parser___parser_prod___AType___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3206 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3329 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3331 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3207 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
+    /* parser/parser_prod.nit:3332 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3207);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3332);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3209 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3334 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3209);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3334);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3210 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3335 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3210);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3335);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AType___visit_all_1));
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AType___visit_all_1));
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -16980,16 +18444,18 @@ void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AType___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:3211 */
+    /* parser/parser_prod.nit:3336 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ALabel___empty_init[] = "parser_prod::ALabel::empty_init";
 void parser___parser_prod___ALabel___empty_init(val_t p0, int* init_table){
   int itpos105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALabel].i;
   struct {struct stack_frame_t me;} fra;
@@ -16997,66 +18463,73 @@ void parser___parser_prod___ALabel___empty_init(val_t p0, int* init_table){
   if (init_table[itpos105]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3216;
+  fra.me.line = 3341;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos105] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALabel___init_alabel[] = "parser_prod::ALabel::init_alabel";
 void parser___parser_prod___ALabel___init_alabel(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos106 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALabel].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos106]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3218;
+  fra.me.line = 3343;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___init_alabel;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3223 */
-  CALL_parser___parser_prod___ALabel___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3224 */
+  /* parser/parser_prod.nit:3343 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3348 */
+  CALL_parser___parser_prod___ALabel___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:3349 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3224);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3349);
   }
-  ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3225 */
+  ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3350 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3225);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3350);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3226 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3351 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3226);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3351);
   }
-  ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3227 */
+  ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3352 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3227);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3352);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos106] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALabel___replace_child[] = "parser_prod::ALabel::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -17064,10 +18537,11 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3230;
+  fra.me.line = 3355;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17075,11 +18549,11 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3232 */
+  /* parser/parser_prod.nit:3357 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 3232);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 3357);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17089,13 +18563,13 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3233 */
+    /* parser/parser_prod.nit:3358 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -17104,32 +18578,32 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3234 */
+      /* parser/parser_prod.nit:3359 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3234);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3359);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3235 */
+      /* parser/parser_prod.nit:3360 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwlabel, ID_parser___parser_nodes___TKwlabel)) /*cast TKwlabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3235);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3360);
       }
-      /* ./parser//parser_prod.nit:3236 */
+      /* parser/parser_prod.nit:3361 */
       ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3238 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3238);
+      /* parser/parser_prod.nit:3363 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3363);
     }
-    /* ./parser//parser_prod.nit:3240 */
+    /* parser/parser_prod.nit:3365 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3242 */
+  /* parser/parser_prod.nit:3367 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3242);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3367);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17139,13 +18613,13 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3243 */
+    /* parser/parser_prod.nit:3368 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -17154,65 +18628,68 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3244 */
+      /* parser/parser_prod.nit:3369 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3244);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3369);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3245 */
+      /* parser/parser_prod.nit:3370 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3245);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3370);
       }
-      /* ./parser//parser_prod.nit:3246 */
+      /* parser/parser_prod.nit:3371 */
       ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3248 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3248);
+      /* parser/parser_prod.nit:3373 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3373);
     }
-    /* ./parser//parser_prod.nit:3250 */
+    /* parser/parser_prod.nit:3375 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALabel___visit_all[] = "parser_prod::ALabel::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ALabel___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3254;
+  fra.me.line = 3379;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3256 */
+  /* parser/parser_prod.nit:3381 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 3256);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 3381);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3257 */
+  /* parser/parser_prod.nit:3382 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3257);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3382);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABlockExpr___empty_init[] = "parser_prod::ABlockExpr::empty_init";
 void parser___parser_prod___ABlockExpr___empty_init(val_t p0, int* init_table){
   int itpos107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABlockExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -17220,34 +18697,65 @@ void parser___parser_prod___ABlockExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos107]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3261;
+  fra.me.line = 3386;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos107] = 1;
   return;
 }
-void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, int* init_table){
+static const char LOCATE_parser___parser_prod___ABlockExpr___init_ablockexpr[] = "parser_prod::ABlockExpr::init_ablockexpr";
+void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos108 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABlockExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos108]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3263;
+  fra.me.line = 3388;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___init_ablockexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3267 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:3393 */
   CALL_parser___parser_prod___ABlockExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABlockExpr___init_ablockexpr_1));
+  /* parser/parser_prod.nit:3399 */
+  ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3400 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3401 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3401);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
   stack_frame_head = fra.me.prev;
   init_table[itpos108] = 1;
   return;
@@ -17257,38 +18765,40 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, int
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:3268 */
+    /* parser/parser_prod.nit:3394 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___init_ablockexpr;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:3269 */
+    /* parser/parser_prod.nit:3395 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3269);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3395);
     }
-    /* ./parser//parser_prod.nit:3270 */
+    /* parser/parser_prod.nit:3396 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3270);
+      nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3396);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:3271 */
+    /* parser/parser_prod.nit:3397 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ABlockExpr___replace_child[] = "parser_prod::ABlockExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -17299,10 +18809,11 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3275;
+  fra.me.line = 3405;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17310,37 +18821,42 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3277 */
+  /* parser/parser_prod.nit:3407 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3277);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3407);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:3277 */
+      /* parser/parser_prod.nit:3407 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:3278 */
+      /* parser/parser_prod.nit:3408 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3278);
+        nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3408);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -17348,13 +18864,13 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:3279 */
+        /* parser/parser_prod.nit:3409 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -17363,77 +18879,160 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:3280 */
+          /* parser/parser_prod.nit:3410 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3280);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3410);
           }
-          /* ./parser//parser_prod.nit:3281 */
+          /* parser/parser_prod.nit:3411 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3281);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3411);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:3282 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:3412 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3282);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3412);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:3284 */
+          /* parser/parser_prod.nit:3414 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3284);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3414);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:3286 */
+        /* parser/parser_prod.nit:3416 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
   label2: while(0);
+  /* parser/parser_prod.nit:3419 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3420 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:3421 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3421);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3422 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast TKwend*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3422);
+      }
+      /* parser/parser_prod.nit:3423 */
+      ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:3425 */
+      ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:3427 */
+    goto label1;
+  }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABlockExpr___visit_all[] = "parser_prod::ABlockExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3291;
+  fra.me.line = 3431;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3293 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3431 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3433 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3293);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3433);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABlockExpr___visit_all_1));
+  /* parser/parser_prod.nit:3436 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3437 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast TKwend*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3437);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABlockExpr___visit_all_1));
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -17447,16 +19046,18 @@ void parser___parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:3294 */
+    /* parser/parser_prod.nit:3434 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AVardeclExpr___empty_init[] = "parser_prod::AVardeclExpr::empty_init";
 void parser___parser_prod___AVardeclExpr___empty_init(val_t p0, int* init_table){
   int itpos109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVardeclExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -17464,78 +19065,84 @@ void parser___parser_prod___AVardeclExpr___empty_init(val_t p0, int* init_table)
   if (init_table[itpos109]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3299;
+  fra.me.line = 3442;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos109] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVardeclExpr___init_avardeclexpr[] = "parser_prod::AVardeclExpr::init_avardeclexpr";
 void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
   int itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVardeclExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos110]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3301;
+  fra.me.line = 3444;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___init_avardeclexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:3309 */
-  CALL_parser___parser_prod___AVardeclExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3310 */
+  /* parser/parser_prod.nit:3444 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3452 */
+  CALL_parser___parser_prod___AVardeclExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:3453 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3310);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3453);
   }
-  ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3311 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3454 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3311);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3454);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3312 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:3455 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3312);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3455);
   }
-  ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3313 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3456 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3313);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3456);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3314 */
-  ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3315 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:3457 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[6]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3458 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
@@ -17544,22 +19151,22 @@ void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3316 */
+    /* parser/parser_prod.nit:3459 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3316);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3459);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
   }
-  /* ./parser//parser_prod.nit:3318 */
-  ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3319 */
+  /* parser/parser_prod.nit:3461 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:3462 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
@@ -17568,22 +19175,22 @@ void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3320 */
+    /* parser/parser_prod.nit:3463 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3320);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3463);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
   }
-  /* ./parser//parser_prod.nit:3322 */
-  ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:3323 */
+  /* parser/parser_prod.nit:3465 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:3466 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
@@ -17592,17 +19199,18 @@ void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3324 */
+    /* parser/parser_prod.nit:3467 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3324);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3467);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos110] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVardeclExpr___replace_child[] = "parser_prod::AVardeclExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -17610,10 +19218,11 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3328;
+  fra.me.line = 3471;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17621,11 +19230,11 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3330 */
+  /* parser/parser_prod.nit:3473 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 3330);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 3473);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17635,13 +19244,13 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3331 */
+    /* parser/parser_prod.nit:3474 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -17650,32 +19259,32 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3332 */
+      /* parser/parser_prod.nit:3475 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3332);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3475);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3333 */
+      /* parser/parser_prod.nit:3476 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast TKwvar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3333);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3476);
       }
-      /* ./parser//parser_prod.nit:3334 */
+      /* parser/parser_prod.nit:3477 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3336 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3336);
+      /* parser/parser_prod.nit:3479 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3479);
     }
-    /* ./parser//parser_prod.nit:3338 */
+    /* parser/parser_prod.nit:3481 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3340 */
+  /* parser/parser_prod.nit:3483 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3340);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3483);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17685,13 +19294,13 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3341 */
+    /* parser/parser_prod.nit:3484 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -17700,35 +19309,35 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3342 */
+      /* parser/parser_prod.nit:3485 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3342);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3485);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3343 */
+      /* parser/parser_prod.nit:3486 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3343);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3486);
       }
-      /* ./parser//parser_prod.nit:3344 */
+      /* parser/parser_prod.nit:3487 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3346 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3346);
+      /* parser/parser_prod.nit:3489 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3489);
     }
-    /* ./parser//parser_prod.nit:3348 */
+    /* parser/parser_prod.nit:3491 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3350 */
+  /* parser/parser_prod.nit:3493 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -17736,13 +19345,13 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3351 */
+    /* parser/parser_prod.nit:3494 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -17751,35 +19360,35 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3352 */
+      /* parser/parser_prod.nit:3495 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3352);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3495);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3353 */
+      /* parser/parser_prod.nit:3496 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3353);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3496);
       }
-      /* ./parser//parser_prod.nit:3354 */
+      /* parser/parser_prod.nit:3497 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3356 */
+      /* parser/parser_prod.nit:3499 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3358 */
+    /* parser/parser_prod.nit:3501 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3360 */
+  /* parser/parser_prod.nit:3503 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -17787,13 +19396,13 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3361 */
+    /* parser/parser_prod.nit:3504 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -17802,35 +19411,35 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3362 */
+      /* parser/parser_prod.nit:3505 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3362);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3505);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3363 */
+      /* parser/parser_prod.nit:3506 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3363);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3506);
       }
-      /* ./parser//parser_prod.nit:3364 */
+      /* parser/parser_prod.nit:3507 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3366 */
+      /* parser/parser_prod.nit:3509 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3368 */
+    /* parser/parser_prod.nit:3511 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3370 */
+  /* parser/parser_prod.nit:3513 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -17838,13 +19447,13 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3371 */
+    /* parser/parser_prod.nit:3514 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -17853,141 +19462,147 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3372 */
+      /* parser/parser_prod.nit:3515 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3372);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3515);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3373 */
+      /* parser/parser_prod.nit:3516 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3373);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3516);
       }
-      /* ./parser//parser_prod.nit:3374 */
+      /* parser/parser_prod.nit:3517 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3376 */
+      /* parser/parser_prod.nit:3519 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3378 */
+    /* parser/parser_prod.nit:3521 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVardeclExpr___visit_all[] = "parser_prod::AVardeclExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3382;
+  fra.me.line = 3525;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3384 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3525 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3527 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 3384);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 3527);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3385 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3528 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3385);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3528);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3386 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3529 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3387 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+    /* parser/parser_prod.nit:3530 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3387);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3530);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3389 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3532 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3390 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
+    /* parser/parser_prod.nit:3533 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3390);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3533);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3392 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3535 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3393 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:3536 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3393);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3536);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AReturnExpr___empty_init[] = "parser_prod::AReturnExpr::empty_init";
 void parser___parser_prod___AReturnExpr___empty_init(val_t p0, int* init_table){
   int itpos111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AReturnExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -17995,16 +19610,18 @@ void parser___parser_prod___AReturnExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos111]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3398;
+  fra.me.line = 3541;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos111] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AReturnExpr___init_areturnexpr[] = "parser_prod::AReturnExpr::init_areturnexpr";
 void parser___parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos112 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AReturnExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
@@ -18014,27 +19631,28 @@ void parser___parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, v
   if (init_table[itpos112]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3400;
+  fra.me.line = 3543;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___init_areturnexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3405 */
+  /* parser/parser_prod.nit:3548 */
   CALL_parser___parser_prod___AReturnExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3406 */
+  /* parser/parser_prod.nit:3549 */
   ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3407 */
+  /* parser/parser_prod.nit:3550 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -18043,22 +19661,22 @@ void parser___parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3408 */
+    /* parser/parser_prod.nit:3551 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3408);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3551);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3410 */
+  /* parser/parser_prod.nit:3553 */
   ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3411 */
+  /* parser/parser_prod.nit:3554 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18067,10 +19685,10 @@ void parser___parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3412 */
+    /* parser/parser_prod.nit:3555 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3412);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3555);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
@@ -18078,6 +19696,7 @@ void parser___parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, v
   init_table[itpos112] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AReturnExpr___replace_child[] = "parser_prod::AReturnExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -18085,10 +19704,11 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3416;
+  fra.me.line = 3559;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18096,14 +19716,14 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3418 */
+  /* parser/parser_prod.nit:3561 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -18111,13 +19731,13 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3419 */
+    /* parser/parser_prod.nit:3562 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18126,35 +19746,35 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3420 */
+      /* parser/parser_prod.nit:3563 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3420);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3563);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3421 */
+      /* parser/parser_prod.nit:3564 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast TKwreturn*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3421);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3564);
       }
-      /* ./parser//parser_prod.nit:3422 */
+      /* parser/parser_prod.nit:3565 */
       ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3424 */
+      /* parser/parser_prod.nit:3567 */
       ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3426 */
+    /* parser/parser_prod.nit:3569 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3428 */
+  /* parser/parser_prod.nit:3571 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -18162,13 +19782,13 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3429 */
+    /* parser/parser_prod.nit:3572 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18177,100 +19797,106 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3430 */
+      /* parser/parser_prod.nit:3573 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3430);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3573);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3431 */
+      /* parser/parser_prod.nit:3574 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3431);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3574);
       }
-      /* ./parser//parser_prod.nit:3432 */
+      /* parser/parser_prod.nit:3575 */
       ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3434 */
+      /* parser/parser_prod.nit:3577 */
       ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3436 */
+    /* parser/parser_prod.nit:3579 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AReturnExpr___visit_all[] = "parser_prod::AReturnExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3440;
+  fra.me.line = 3583;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3442 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3583 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3585 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3443 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast TKwreturn*/;
+    /* parser/parser_prod.nit:3586 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast TKwreturn*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3443);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3586);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3445 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3588 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3446 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:3589 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3446);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3589);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABreakExpr___empty_init[] = "parser_prod::ABreakExpr::empty_init";
 void parser___parser_prod___ABreakExpr___empty_init(val_t p0, int* init_table){
   int itpos113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABreakExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -18278,61 +19904,67 @@ void parser___parser_prod___ABreakExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos113]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3451;
+  fra.me.line = 3594;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos113] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABreakExpr___init_abreakexpr[] = "parser_prod::ABreakExpr::init_abreakexpr";
 void parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos114 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABreakExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos114]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3453;
+  fra.me.line = 3596;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___init_abreakexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3459 */
-  CALL_parser___parser_prod___ABreakExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3460 */
+  /* parser/parser_prod.nit:3596 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3602 */
+  CALL_parser___parser_prod___ABreakExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:3603 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3460);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3603);
   }
-  ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3461 */
+  ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3604 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3461);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3604);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3462 */
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3463 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:3605 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3606 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18341,22 +19973,22 @@ void parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3464 */
+    /* parser/parser_prod.nit:3607 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3464);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3607);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:3466 */
-  ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3467 */
+  /* parser/parser_prod.nit:3609 */
+  ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3610 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
@@ -18365,17 +19997,18 @@ void parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3468 */
+    /* parser/parser_prod.nit:3611 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3468);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3611);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos114] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABreakExpr___replace_child[] = "parser_prod::ABreakExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -18383,10 +20016,11 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3472;
+  fra.me.line = 3615;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18394,11 +20028,11 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3474 */
+  /* parser/parser_prod.nit:3617 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 3474);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 3617);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -18408,13 +20042,13 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3475 */
+    /* parser/parser_prod.nit:3618 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18423,35 +20057,35 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3476 */
+      /* parser/parser_prod.nit:3619 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3476);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3619);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3477 */
+      /* parser/parser_prod.nit:3620 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3477);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3620);
       }
-      /* ./parser//parser_prod.nit:3478 */
+      /* parser/parser_prod.nit:3621 */
       ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3480 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3480);
+      /* parser/parser_prod.nit:3623 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3623);
     }
-    /* ./parser//parser_prod.nit:3482 */
+    /* parser/parser_prod.nit:3625 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3484 */
+  /* parser/parser_prod.nit:3627 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -18459,13 +20093,13 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3485 */
+    /* parser/parser_prod.nit:3628 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18474,35 +20108,35 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3486 */
+      /* parser/parser_prod.nit:3629 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3486);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3629);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3487 */
+      /* parser/parser_prod.nit:3630 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3487);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3630);
       }
-      /* ./parser//parser_prod.nit:3488 */
+      /* parser/parser_prod.nit:3631 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3490 */
+      /* parser/parser_prod.nit:3633 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3492 */
+    /* parser/parser_prod.nit:3635 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3494 */
+  /* parser/parser_prod.nit:3637 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -18510,13 +20144,13 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3495 */
+    /* parser/parser_prod.nit:3638 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18525,108 +20159,114 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3496 */
+      /* parser/parser_prod.nit:3639 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3496);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3639);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3497 */
+      /* parser/parser_prod.nit:3640 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3497);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3640);
       }
-      /* ./parser//parser_prod.nit:3498 */
+      /* parser/parser_prod.nit:3641 */
       ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3500 */
+      /* parser/parser_prod.nit:3643 */
       ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3502 */
+    /* parser/parser_prod.nit:3645 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABreakExpr___visit_all[] = "parser_prod::ABreakExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3506;
+  fra.me.line = 3649;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3508 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3649 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3651 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 3508);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 3651);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3509 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3652 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3510 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
+    /* parser/parser_prod.nit:3653 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3510);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3653);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3512 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3655 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3513 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:3656 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3513);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3656);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAbortExpr___empty_init[] = "parser_prod::AAbortExpr::empty_init";
 void parser___parser_prod___AAbortExpr___empty_init(val_t p0, int* init_table){
   int itpos115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAbortExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -18634,51 +20274,58 @@ void parser___parser_prod___AAbortExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos115]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3518;
+  fra.me.line = 3661;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos115] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAbortExpr___init_aabortexpr[] = "parser_prod::AAbortExpr::init_aabortexpr";
 void parser___parser_prod___AAbortExpr___init_aabortexpr(val_t p0, val_t p1, int* init_table){
   int itpos116 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAbortExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos116]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3520;
+  fra.me.line = 3663;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___init_aabortexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3524 */
-  CALL_parser___parser_prod___AAbortExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3525 */
+  /* parser/parser_prod.nit:3663 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3667 */
+  CALL_parser___parser_prod___AAbortExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:3668 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3525);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3668);
   }
-  ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3526 */
+  ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3669 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3526);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3669);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos116] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAbortExpr___replace_child[] = "parser_prod::AAbortExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -18686,10 +20333,11 @@ void parser___parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3529;
+  fra.me.line = 3672;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18697,11 +20345,11 @@ void parser___parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3531 */
+  /* parser/parser_prod.nit:3674 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 3531);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 3674);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -18711,13 +20359,13 @@ void parser___parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3532 */
+    /* parser/parser_prod.nit:3675 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18726,56 +20374,59 @@ void parser___parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3533 */
+      /* parser/parser_prod.nit:3676 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3533);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3676);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3534 */
+      /* parser/parser_prod.nit:3677 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwabort, ID_parser___parser_nodes___TKwabort)) /*cast TKwabort*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3534);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3677);
       }
-      /* ./parser//parser_prod.nit:3535 */
+      /* parser/parser_prod.nit:3678 */
       ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3537 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3537);
+      /* parser/parser_prod.nit:3680 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3680);
     }
-    /* ./parser//parser_prod.nit:3539 */
+    /* parser/parser_prod.nit:3682 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAbortExpr___visit_all[] = "parser_prod::AAbortExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AAbortExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3543;
+  fra.me.line = 3686;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3545 */
+  /* parser/parser_prod.nit:3688 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 3545);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 3688);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AContinueExpr___empty_init[] = "parser_prod::AContinueExpr::empty_init";
 void parser___parser_prod___AContinueExpr___empty_init(val_t p0, int* init_table){
   int itpos117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AContinueExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -18783,16 +20434,18 @@ void parser___parser_prod___AContinueExpr___empty_init(val_t p0, int* init_table
   if (init_table[itpos117]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3549;
+  fra.me.line = 3692;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos117] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AContinueExpr___init_acontinueexpr[] = "parser_prod::AContinueExpr::init_acontinueexpr";
 void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos118 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AContinueExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
@@ -18802,10 +20455,11 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   if (init_table[itpos118]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3551;
+  fra.me.line = 3694;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___init_acontinueexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18814,17 +20468,17 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3557 */
+  /* parser/parser_prod.nit:3700 */
   CALL_parser___parser_prod___AContinueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3558 */
+  /* parser/parser_prod.nit:3701 */
   ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3559 */
+  /* parser/parser_prod.nit:3702 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -18833,22 +20487,22 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3560 */
+    /* parser/parser_prod.nit:3703 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3560);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3703);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3562 */
+  /* parser/parser_prod.nit:3705 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3563 */
+  /* parser/parser_prod.nit:3706 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18857,22 +20511,22 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3564 */
+    /* parser/parser_prod.nit:3707 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3564);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3707);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3566 */
+  /* parser/parser_prod.nit:3709 */
   ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3567 */
+  /* parser/parser_prod.nit:3710 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
@@ -18881,10 +20535,10 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3568 */
+    /* parser/parser_prod.nit:3711 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3568);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3711);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
@@ -18892,6 +20546,7 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   init_table[itpos118] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AContinueExpr___replace_child[] = "parser_prod::AContinueExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -18899,10 +20554,11 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3572;
+  fra.me.line = 3715;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18910,14 +20566,14 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3574 */
+  /* parser/parser_prod.nit:3717 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -18925,13 +20581,13 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3575 */
+    /* parser/parser_prod.nit:3718 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18940,35 +20596,35 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3576 */
+      /* parser/parser_prod.nit:3719 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3576);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3719);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3577 */
+      /* parser/parser_prod.nit:3720 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast TKwcontinue*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3577);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3720);
       }
-      /* ./parser//parser_prod.nit:3578 */
+      /* parser/parser_prod.nit:3721 */
       ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3580 */
+      /* parser/parser_prod.nit:3723 */
       ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3582 */
+    /* parser/parser_prod.nit:3725 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3584 */
+  /* parser/parser_prod.nit:3727 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -18976,13 +20632,13 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3585 */
+    /* parser/parser_prod.nit:3728 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -18991,35 +20647,35 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3586 */
+      /* parser/parser_prod.nit:3729 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3586);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3729);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3587 */
+      /* parser/parser_prod.nit:3730 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3587);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3730);
       }
-      /* ./parser//parser_prod.nit:3588 */
+      /* parser/parser_prod.nit:3731 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3590 */
+      /* parser/parser_prod.nit:3733 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3592 */
+    /* parser/parser_prod.nit:3735 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3594 */
+  /* parser/parser_prod.nit:3737 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -19027,13 +20683,13 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3595 */
+    /* parser/parser_prod.nit:3738 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -19042,125 +20698,131 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3596 */
+      /* parser/parser_prod.nit:3739 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3596);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3739);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3597 */
+      /* parser/parser_prod.nit:3740 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3597);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3740);
       }
-      /* ./parser//parser_prod.nit:3598 */
+      /* parser/parser_prod.nit:3741 */
       ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3600 */
+      /* parser/parser_prod.nit:3743 */
       ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3602 */
+    /* parser/parser_prod.nit:3745 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AContinueExpr___visit_all[] = "parser_prod::AContinueExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3606;
+  fra.me.line = 3749;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3608 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3749 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3751 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3609 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast TKwcontinue*/;
+    /* parser/parser_prod.nit:3752 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast TKwcontinue*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3609);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3752);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3611 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3754 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3612 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
+    /* parser/parser_prod.nit:3755 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3612);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3755);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3614 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3757 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3615 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:3758 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3615);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3758);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADoExpr___empty_init[] = "parser_prod::ADoExpr::empty_init";
 void parser___parser_prod___ADoExpr___empty_init(val_t p0, int* init_table){
   int itpos119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -19168,61 +20830,67 @@ void parser___parser_prod___ADoExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos119]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3620;
+  fra.me.line = 3763;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos119] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADoExpr___init_adoexpr[] = "parser_prod::ADoExpr::init_adoexpr";
 void parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos120 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos120]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3622;
+  fra.me.line = 3765;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___init_adoexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3628 */
-  CALL_parser___parser_prod___ADoExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3629 */
+  /* parser/parser_prod.nit:3765 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3771 */
+  CALL_parser___parser_prod___ADoExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:3772 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3629);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3772);
   }
-  ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3630 */
+  ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3773 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3630);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3773);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3631 */
-  ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3632 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:3774 */
+  ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3775 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -19231,22 +20899,22 @@ void parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3633 */
+    /* parser/parser_prod.nit:3776 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3633);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3776);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:3635 */
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3636 */
+  /* parser/parser_prod.nit:3778 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3779 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
@@ -19255,17 +20923,18 @@ void parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3637 */
+    /* parser/parser_prod.nit:3780 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3637);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3780);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos120] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADoExpr___replace_child[] = "parser_prod::ADoExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -19273,10 +20942,11 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3641;
+  fra.me.line = 3784;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19284,11 +20954,11 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3643 */
+  /* parser/parser_prod.nit:3786 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 3643);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 3786);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19298,13 +20968,13 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3644 */
+    /* parser/parser_prod.nit:3787 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -19313,35 +20983,35 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3645 */
+      /* parser/parser_prod.nit:3788 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3645);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3788);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3646 */
+      /* parser/parser_prod.nit:3789 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3646);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3789);
       }
-      /* ./parser//parser_prod.nit:3647 */
+      /* parser/parser_prod.nit:3790 */
       ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3649 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3649);
+      /* parser/parser_prod.nit:3792 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3792);
     }
-    /* ./parser//parser_prod.nit:3651 */
+    /* parser/parser_prod.nit:3794 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3653 */
+  /* parser/parser_prod.nit:3796 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -19349,13 +21019,13 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3654 */
+    /* parser/parser_prod.nit:3797 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -19364,35 +21034,35 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3655 */
+      /* parser/parser_prod.nit:3798 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3655);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3798);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3656 */
+      /* parser/parser_prod.nit:3799 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3656);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3799);
       }
-      /* ./parser//parser_prod.nit:3657 */
+      /* parser/parser_prod.nit:3800 */
       ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3659 */
+      /* parser/parser_prod.nit:3802 */
       ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3661 */
+    /* parser/parser_prod.nit:3804 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3663 */
+  /* parser/parser_prod.nit:3806 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -19400,13 +21070,13 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3664 */
+    /* parser/parser_prod.nit:3807 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -19415,108 +21085,114 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3665 */
+      /* parser/parser_prod.nit:3808 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3665);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3808);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3666 */
+      /* parser/parser_prod.nit:3809 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3666);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3809);
       }
-      /* ./parser//parser_prod.nit:3667 */
+      /* parser/parser_prod.nit:3810 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3669 */
+      /* parser/parser_prod.nit:3812 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3671 */
+    /* parser/parser_prod.nit:3814 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADoExpr___visit_all[] = "parser_prod::ADoExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3675;
+  fra.me.line = 3818;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3677 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3818 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3820 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 3677);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 3820);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3678 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3821 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3679 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:3822 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3679);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3822);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3681 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3824 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3682 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
+    /* parser/parser_prod.nit:3825 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3682);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3825);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIfExpr___empty_init[] = "parser_prod::AIfExpr::empty_init";
 void parser___parser_prod___AIfExpr___empty_init(val_t p0, int* init_table){
   int itpos121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIfExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -19524,76 +21200,82 @@ void parser___parser_prod___AIfExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos121]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3687;
+  fra.me.line = 3830;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos121] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIfExpr___init_aifexpr[] = "parser_prod::AIfExpr::init_aifexpr";
 void parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos122 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIfExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos122]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3689;
+  fra.me.line = 3832;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___init_aifexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:3696 */
-  CALL_parser___parser_prod___AIfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3697 */
+  /* parser/parser_prod.nit:3832 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3839 */
+  CALL_parser___parser_prod___AIfExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:3840 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3697);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3840);
   }
-  ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3698 */
+  ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3841 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3698);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3841);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3699 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:3842 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3699);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3842);
   }
-  ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3700 */
+  ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3843 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3700);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3843);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3701 */
-  ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3702 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:3844 */
+  ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3845 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
@@ -19602,22 +21284,22 @@ void parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3703 */
+    /* parser/parser_prod.nit:3846 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3703);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3846);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
   }
-  /* ./parser//parser_prod.nit:3705 */
-  ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3706 */
+  /* parser/parser_prod.nit:3848 */
+  ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:3849 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
@@ -19626,17 +21308,18 @@ void parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3707 */
+    /* parser/parser_prod.nit:3850 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3707);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3850);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos122] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIfExpr___replace_child[] = "parser_prod::AIfExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -19644,10 +21327,11 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3711;
+  fra.me.line = 3854;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19655,11 +21339,11 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3713 */
+  /* parser/parser_prod.nit:3856 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3713);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3856);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19669,13 +21353,13 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3714 */
+    /* parser/parser_prod.nit:3857 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -19684,32 +21368,32 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3715 */
+      /* parser/parser_prod.nit:3858 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3715);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3858);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3716 */
+      /* parser/parser_prod.nit:3859 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast TKwif*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3716);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3859);
       }
-      /* ./parser//parser_prod.nit:3717 */
+      /* parser/parser_prod.nit:3860 */
       ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3719 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3719);
+      /* parser/parser_prod.nit:3862 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3862);
     }
-    /* ./parser//parser_prod.nit:3721 */
+    /* parser/parser_prod.nit:3864 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3723 */
+  /* parser/parser_prod.nit:3866 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3723);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3866);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19719,13 +21403,13 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3724 */
+    /* parser/parser_prod.nit:3867 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -19734,35 +21418,35 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3725 */
+      /* parser/parser_prod.nit:3868 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3725);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3868);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3726 */
+      /* parser/parser_prod.nit:3869 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3726);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3869);
       }
-      /* ./parser//parser_prod.nit:3727 */
+      /* parser/parser_prod.nit:3870 */
       ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3729 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3729);
+      /* parser/parser_prod.nit:3872 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3872);
     }
-    /* ./parser//parser_prod.nit:3731 */
+    /* parser/parser_prod.nit:3874 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3733 */
+  /* parser/parser_prod.nit:3876 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -19770,13 +21454,13 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3734 */
+    /* parser/parser_prod.nit:3877 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -19785,35 +21469,35 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3735 */
+      /* parser/parser_prod.nit:3878 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3735);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3878);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3736 */
+      /* parser/parser_prod.nit:3879 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3736);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3879);
       }
-      /* ./parser//parser_prod.nit:3737 */
+      /* parser/parser_prod.nit:3880 */
       ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3739 */
+      /* parser/parser_prod.nit:3882 */
       ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3741 */
+    /* parser/parser_prod.nit:3884 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3743 */
+  /* parser/parser_prod.nit:3886 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -19821,13 +21505,13 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3744 */
+    /* parser/parser_prod.nit:3887 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -19836,116 +21520,122 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3745 */
+      /* parser/parser_prod.nit:3888 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3745);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3888);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3746 */
+      /* parser/parser_prod.nit:3889 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3746);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3889);
       }
-      /* ./parser//parser_prod.nit:3747 */
+      /* parser/parser_prod.nit:3890 */
       ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3749 */
+      /* parser/parser_prod.nit:3892 */
       ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3751 */
+    /* parser/parser_prod.nit:3894 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIfExpr___visit_all[] = "parser_prod::AIfExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3755;
+  fra.me.line = 3898;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3757 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:3898 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3900 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3757);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3900);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3758 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3901 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3758);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3901);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3759 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3902 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3760 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:3903 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3760);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3903);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3762 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:3905 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3763 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:3906 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3763);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3906);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIfexprExpr___empty_init[] = "parser_prod::AIfexprExpr::empty_init";
 void parser___parser_prod___AIfexprExpr___empty_init(val_t p0, int* init_table){
   int itpos123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIfexprExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -19953,28 +21643,31 @@ void parser___parser_prod___AIfexprExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos123]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3768;
+  fra.me.line = 3911;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos123] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIfexprExpr___init_aifexprexpr[] = "parser_prod::AIfexprExpr::init_aifexprexpr";
 void parser___parser_prod___AIfexprExpr___init_aifexprexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
   int itpos124 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIfexprExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos124]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3770;
+  fra.me.line = 3913;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___init_aifexprexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19982,6 +21675,7 @@ void parser___parser_prod___AIfexprExpr___init_aifexprexpr(val_t p0, val_t p1, v
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -19989,90 +21683,93 @@ void parser___parser_prod___AIfexprExpr___init_aifexprexpr(val_t p0, val_t p1, v
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:3779 */
-  CALL_parser___parser_prod___AIfexprExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3780 */
+  /* parser/parser_prod.nit:3913 */
+  fra.me.REG[7] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3922 */
+  CALL_parser___parser_prod___AIfexprExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
+  /* parser/parser_prod.nit:3923 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3780);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3923);
   }
-  ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3781 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[7]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3924 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3781);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3924);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3782 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+  /* parser/parser_prod.nit:3925 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3782);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3925);
   }
-  ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3783 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[7]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3926 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3783);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3926);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3784 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+  /* parser/parser_prod.nit:3927 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3784);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3927);
   }
-  ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3785 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[7]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3928 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3785);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3928);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3786 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:3929 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3786);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3929);
   }
-  ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3787 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[7]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:3930 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3787);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3930);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3788 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:3931 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3788);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3931);
   }
-  ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:3789 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[7]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:3932 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3789);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3932);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3790 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+  /* parser/parser_prod.nit:3933 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3790);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3933);
   }
-  ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:3791 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[7]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:3934 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3791);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3934);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
   init_table[itpos124] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIfexprExpr___replace_child[] = "parser_prod::AIfexprExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -20080,10 +21777,11 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3794;
+  fra.me.line = 3937;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -20091,11 +21789,11 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3796 */
+  /* parser/parser_prod.nit:3939 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3796);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3939);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20105,13 +21803,13 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3797 */
+    /* parser/parser_prod.nit:3940 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20120,32 +21818,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3798 */
+      /* parser/parser_prod.nit:3941 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3798);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3941);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3799 */
+      /* parser/parser_prod.nit:3942 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast TKwif*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3799);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3942);
       }
-      /* ./parser//parser_prod.nit:3800 */
+      /* parser/parser_prod.nit:3943 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3802 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3802);
+      /* parser/parser_prod.nit:3945 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3945);
     }
-    /* ./parser//parser_prod.nit:3804 */
+    /* parser/parser_prod.nit:3947 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3806 */
+  /* parser/parser_prod.nit:3949 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3806);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3949);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20155,13 +21853,13 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3807 */
+    /* parser/parser_prod.nit:3950 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20170,32 +21868,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3808 */
+      /* parser/parser_prod.nit:3951 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3808);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3951);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3809 */
+      /* parser/parser_prod.nit:3952 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3809);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3952);
       }
-      /* ./parser//parser_prod.nit:3810 */
+      /* parser/parser_prod.nit:3953 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3812 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3812);
+      /* parser/parser_prod.nit:3955 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3955);
     }
-    /* ./parser//parser_prod.nit:3814 */
+    /* parser/parser_prod.nit:3957 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3816 */
+  /* parser/parser_prod.nit:3959 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 3816);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 3959);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20205,13 +21903,13 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3817 */
+    /* parser/parser_prod.nit:3960 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20220,32 +21918,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3818 */
+      /* parser/parser_prod.nit:3961 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3818);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3961);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3819 */
+      /* parser/parser_prod.nit:3962 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwthen, ID_parser___parser_nodes___TKwthen)) /*cast TKwthen*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3819);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3962);
       }
-      /* ./parser//parser_prod.nit:3820 */
+      /* parser/parser_prod.nit:3963 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3822 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3822);
+      /* parser/parser_prod.nit:3965 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3965);
     }
-    /* ./parser//parser_prod.nit:3824 */
+    /* parser/parser_prod.nit:3967 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3826 */
+  /* parser/parser_prod.nit:3969 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 3826);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 3969);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20255,13 +21953,13 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3827 */
+    /* parser/parser_prod.nit:3970 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20270,32 +21968,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3828 */
+      /* parser/parser_prod.nit:3971 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3828);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3971);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3829 */
+      /* parser/parser_prod.nit:3972 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3829);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3972);
       }
-      /* ./parser//parser_prod.nit:3830 */
+      /* parser/parser_prod.nit:3973 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3832 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3832);
+      /* parser/parser_prod.nit:3975 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3975);
     }
-    /* ./parser//parser_prod.nit:3834 */
+    /* parser/parser_prod.nit:3977 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3836 */
+  /* parser/parser_prod.nit:3979 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 3836);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 3979);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20305,13 +22003,13 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3837 */
+    /* parser/parser_prod.nit:3980 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20320,32 +22018,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3838 */
+      /* parser/parser_prod.nit:3981 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3838);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3981);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3839 */
+      /* parser/parser_prod.nit:3982 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwelse, ID_parser___parser_nodes___TKwelse)) /*cast TKwelse*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3839);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3982);
       }
-      /* ./parser//parser_prod.nit:3840 */
+      /* parser/parser_prod.nit:3983 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3842 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3842);
+      /* parser/parser_prod.nit:3985 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3985);
     }
-    /* ./parser//parser_prod.nit:3844 */
+    /* parser/parser_prod.nit:3987 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3846 */
+  /* parser/parser_prod.nit:3989 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 3846);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 3989);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20355,13 +22053,13 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3847 */
+    /* parser/parser_prod.nit:3990 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20370,97 +22068,100 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3848 */
+      /* parser/parser_prod.nit:3991 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3848);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3991);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3849 */
+      /* parser/parser_prod.nit:3992 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3849);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3992);
       }
-      /* ./parser//parser_prod.nit:3850 */
+      /* parser/parser_prod.nit:3993 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3852 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3852);
+      /* parser/parser_prod.nit:3995 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3995);
     }
-    /* ./parser//parser_prod.nit:3854 */
+    /* parser/parser_prod.nit:3997 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIfexprExpr___visit_all[] = "parser_prod::AIfexprExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AIfexprExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3858;
+  fra.me.line = 4001;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3860 */
+  /* parser/parser_prod.nit:4003 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3860);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 4003);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3861 */
+  /* parser/parser_prod.nit:4004 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3861);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4004);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3862 */
+  /* parser/parser_prod.nit:4005 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 3862);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 4005);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3863 */
+  /* parser/parser_prod.nit:4006 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 3863);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 4006);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3864 */
+  /* parser/parser_prod.nit:4007 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 3864);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 4007);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3865 */
+  /* parser/parser_prod.nit:4008 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 3865);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 4008);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AWhileExpr___empty_init[] = "parser_prod::AWhileExpr::empty_init";
 void parser___parser_prod___AWhileExpr___empty_init(val_t p0, int* init_table){
   int itpos125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AWhileExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -20468,91 +22169,97 @@ void parser___parser_prod___AWhileExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos125]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3869;
+  fra.me.line = 4012;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos125] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AWhileExpr___init_awhileexpr[] = "parser_prod::AWhileExpr::init_awhileexpr";
 void parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
   int itpos126 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AWhileExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos126]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3871;
+  fra.me.line = 4014;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___init_awhileexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:3879 */
-  CALL_parser___parser_prod___AWhileExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3880 */
+  /* parser/parser_prod.nit:4014 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4022 */
+  CALL_parser___parser_prod___AWhileExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:4023 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3880);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4023);
   }
-  ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3881 */
+  ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4024 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3881);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4024);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3882 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:4025 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3882);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4025);
   }
-  ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3883 */
+  ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4026 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3883);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4026);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3884 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:4027 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3884);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4027);
   }
-  ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3885 */
+  ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[6]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:4028 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3885);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4028);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3886 */
-  ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3887 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:4029 */
+  ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:4030 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
@@ -20561,22 +22268,22 @@ void parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3888 */
+    /* parser/parser_prod.nit:4031 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3888);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4031);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
   }
-  /* ./parser//parser_prod.nit:3890 */
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:3891 */
+  /* parser/parser_prod.nit:4033 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:4034 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
@@ -20585,17 +22292,18 @@ void parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3892 */
+    /* parser/parser_prod.nit:4035 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3892);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4035);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos126] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AWhileExpr___replace_child[] = "parser_prod::AWhileExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -20603,10 +22311,11 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3896;
+  fra.me.line = 4039;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -20614,11 +22323,11 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3898 */
+  /* parser/parser_prod.nit:4041 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 3898);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 4041);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20628,13 +22337,13 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3899 */
+    /* parser/parser_prod.nit:4042 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20643,32 +22352,32 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3900 */
+      /* parser/parser_prod.nit:4043 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3900);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4043);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3901 */
+      /* parser/parser_prod.nit:4044 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast TKwwhile*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3901);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4044);
       }
-      /* ./parser//parser_prod.nit:3902 */
+      /* parser/parser_prod.nit:4045 */
       ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3904 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3904);
+      /* parser/parser_prod.nit:4047 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4047);
     }
-    /* ./parser//parser_prod.nit:3906 */
+    /* parser/parser_prod.nit:4049 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3908 */
+  /* parser/parser_prod.nit:4051 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3908);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4051);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20678,13 +22387,13 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3909 */
+    /* parser/parser_prod.nit:4052 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20693,32 +22402,32 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3910 */
+      /* parser/parser_prod.nit:4053 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3910);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4053);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3911 */
+      /* parser/parser_prod.nit:4054 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3911);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4054);
       }
-      /* ./parser//parser_prod.nit:3912 */
+      /* parser/parser_prod.nit:4055 */
       ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3914 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3914);
+      /* parser/parser_prod.nit:4057 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4057);
     }
-    /* ./parser//parser_prod.nit:3916 */
+    /* parser/parser_prod.nit:4059 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3918 */
+  /* parser/parser_prod.nit:4061 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 3918);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4061);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20728,13 +22437,13 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3919 */
+    /* parser/parser_prod.nit:4062 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20743,35 +22452,35 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3920 */
+      /* parser/parser_prod.nit:4063 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3920);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4063);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3921 */
+      /* parser/parser_prod.nit:4064 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3921);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4064);
       }
-      /* ./parser//parser_prod.nit:3922 */
+      /* parser/parser_prod.nit:4065 */
       ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3924 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3924);
+      /* parser/parser_prod.nit:4067 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4067);
     }
-    /* ./parser//parser_prod.nit:3926 */
+    /* parser/parser_prod.nit:4069 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3928 */
+  /* parser/parser_prod.nit:4071 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -20779,13 +22488,13 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3929 */
+    /* parser/parser_prod.nit:4072 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20794,35 +22503,35 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3930 */
+      /* parser/parser_prod.nit:4073 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3930);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4073);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3931 */
+      /* parser/parser_prod.nit:4074 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3931);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4074);
       }
-      /* ./parser//parser_prod.nit:3932 */
+      /* parser/parser_prod.nit:4075 */
       ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3934 */
+      /* parser/parser_prod.nit:4077 */
       ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3936 */
+    /* parser/parser_prod.nit:4079 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3938 */
+  /* parser/parser_prod.nit:4081 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -20830,13 +22539,13 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3939 */
+    /* parser/parser_prod.nit:4082 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -20845,124 +22554,130 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3940 */
+      /* parser/parser_prod.nit:4083 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3940);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4083);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3941 */
+      /* parser/parser_prod.nit:4084 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3941);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4084);
       }
-      /* ./parser//parser_prod.nit:3942 */
+      /* parser/parser_prod.nit:4085 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3944 */
+      /* parser/parser_prod.nit:4087 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3946 */
+    /* parser/parser_prod.nit:4089 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AWhileExpr___visit_all[] = "parser_prod::AWhileExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3950;
+  fra.me.line = 4093;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3952 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:4093 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4095 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 3952);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 4095);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3953 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4096 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3953);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4096);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3954 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4097 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 3954);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4097);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3955 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4098 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3956 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:4099 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3956);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4099);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:3958 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:4101 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3959 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
+    /* parser/parser_prod.nit:4102 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3959);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4102);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALoopExpr___empty_init[] = "parser_prod::ALoopExpr::empty_init";
 void parser___parser_prod___ALoopExpr___empty_init(val_t p0, int* init_table){
   int itpos127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALoopExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -20970,61 +22685,67 @@ void parser___parser_prod___ALoopExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos127]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3964;
+  fra.me.line = 4107;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos127] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALoopExpr___init_aloopexpr[] = "parser_prod::ALoopExpr::init_aloopexpr";
 void parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos128 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALoopExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos128]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3966;
+  fra.me.line = 4109;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___init_aloopexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3972 */
-  CALL_parser___parser_prod___ALoopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3973 */
+  /* parser/parser_prod.nit:4109 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4115 */
+  CALL_parser___parser_prod___ALoopExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:4116 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3973);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4116);
   }
-  ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3974 */
+  ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4117 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3974);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4117);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3975 */
-  ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3976 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:4118 */
+  ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4119 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21033,22 +22754,22 @@ void parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3977 */
+    /* parser/parser_prod.nit:4120 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3977);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4120);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:3979 */
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3980 */
+  /* parser/parser_prod.nit:4122 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:4123 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
@@ -21057,17 +22778,18 @@ void parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3981 */
+    /* parser/parser_prod.nit:4124 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3981);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4124);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos128] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALoopExpr___replace_child[] = "parser_prod::ALoopExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -21075,10 +22797,11 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3985;
+  fra.me.line = 4128;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -21086,11 +22809,11 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3987 */
+  /* parser/parser_prod.nit:4130 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 3987);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 4130);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21100,13 +22823,13 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3988 */
+    /* parser/parser_prod.nit:4131 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21115,35 +22838,35 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3989 */
+      /* parser/parser_prod.nit:4132 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3989);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4132);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3990 */
+      /* parser/parser_prod.nit:4133 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast TKwloop*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3990);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4133);
       }
-      /* ./parser//parser_prod.nit:3991 */
+      /* parser/parser_prod.nit:4134 */
       ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3993 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3993);
+      /* parser/parser_prod.nit:4136 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4136);
     }
-    /* ./parser//parser_prod.nit:3995 */
+    /* parser/parser_prod.nit:4138 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3997 */
+  /* parser/parser_prod.nit:4140 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -21151,13 +22874,13 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3998 */
+    /* parser/parser_prod.nit:4141 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21166,35 +22889,35 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:3999 */
+      /* parser/parser_prod.nit:4142 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3999);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4142);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4000 */
+      /* parser/parser_prod.nit:4143 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4000);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4143);
       }
-      /* ./parser//parser_prod.nit:4001 */
+      /* parser/parser_prod.nit:4144 */
       ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4003 */
+      /* parser/parser_prod.nit:4146 */
       ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4005 */
+    /* parser/parser_prod.nit:4148 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4007 */
+  /* parser/parser_prod.nit:4150 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -21202,13 +22925,13 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4008 */
+    /* parser/parser_prod.nit:4151 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21217,108 +22940,114 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4009 */
+      /* parser/parser_prod.nit:4152 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4009);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4152);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4010 */
+      /* parser/parser_prod.nit:4153 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4010);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4153);
       }
-      /* ./parser//parser_prod.nit:4011 */
+      /* parser/parser_prod.nit:4154 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4013 */
+      /* parser/parser_prod.nit:4156 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4015 */
+    /* parser/parser_prod.nit:4158 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALoopExpr___visit_all[] = "parser_prod::ALoopExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4019;
+  fra.me.line = 4162;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4021 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:4162 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4164 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 4021);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 4164);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4022 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4165 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4023 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:4166 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4023);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4166);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:4025 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:4168 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4026 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
+    /* parser/parser_prod.nit:4169 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4026);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4169);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AForExpr___empty_init[] = "parser_prod::AForExpr::empty_init";
 void parser___parser_prod___AForExpr___empty_init(val_t p0, int* init_table){
   int itpos129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AForExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -21326,29 +23055,32 @@ void parser___parser_prod___AForExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos129]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4031;
+  fra.me.line = 4174;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos129] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AForExpr___init_aforexpr[] = "parser_prod::AForExpr::init_aforexpr";
 void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
   int itpos130 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AForExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos130]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4033;
+  fra.me.line = 4176;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___init_aforexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -21356,6 +23088,7 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -21363,57 +23096,59 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:4042 */
-  CALL_parser___parser_prod___AForExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4043 */
+  /* parser/parser_prod.nit:4176 */
+  fra.me.REG[7] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4185 */
+  CALL_parser___parser_prod___AForExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
+  /* parser/parser_prod.nit:4186 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4043);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4186);
   }
-  ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4044 */
+  ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[7]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4187 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4044);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4187);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AForExpr___init_aforexpr_1));
-  /* ./parser//parser_prod.nit:4050 */
+  /* parser/parser_prod.nit:4193 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4050);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4193);
   }
-  ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:4051 */
+  ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[7]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:4194 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4051);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4194);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4052 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:4195 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4052);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4195);
   }
-  ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:4053 */
+  ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[7]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:4196 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4053);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4196);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4054 */
-  ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:4055 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:4197 */
+  ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[7]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:4198 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
@@ -21422,22 +23157,22 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4056 */
+    /* parser/parser_prod.nit:4199 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4056);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4199);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
   }
-  /* ./parser//parser_prod.nit:4058 */
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:4059 */
+  /* parser/parser_prod.nit:4201 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[7]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:4202 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
@@ -21446,12 +23181,12 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4060 */
+    /* parser/parser_prod.nit:4203 */
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4060);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4203);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos130] = 1;
@@ -21462,38 +23197,40 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:4045 */
+    /* parser/parser_prod.nit:4188 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AForExpr___init_aforexpr;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:4046 */
+    /* parser/parser_prod.nit:4189 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4046);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4189);
     }
-    /* ./parser//parser_prod.nit:4047 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:4190 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(closctx->REG[7])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4047);
+      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4190);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AForExpr____n_ids(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AForExpr____n_ids(closctx->REG[7]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:4048 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:4191 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[7]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AForExpr___replace_child[] = "parser_prod::AForExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -21504,10 +23241,11 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4064;
+  fra.me.line = 4207;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -21515,11 +23253,11 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4066 */
+  /* parser/parser_prod.nit:4209 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 4066);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 4209);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21529,13 +23267,13 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4067 */
+    /* parser/parser_prod.nit:4210 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21544,58 +23282,63 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4068 */
+      /* parser/parser_prod.nit:4211 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4068);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4211);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4069 */
+      /* parser/parser_prod.nit:4212 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast TKwfor*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4069);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4212);
       }
-      /* ./parser//parser_prod.nit:4070 */
+      /* parser/parser_prod.nit:4213 */
       ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4072 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4072);
+      /* parser/parser_prod.nit:4215 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4215);
     }
-    /* ./parser//parser_prod.nit:4074 */
+    /* parser/parser_prod.nit:4217 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4076 */
+  /* parser/parser_prod.nit:4219 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4076);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4219);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:4076 */
+      /* parser/parser_prod.nit:4219 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:4077 */
+      /* parser/parser_prod.nit:4220 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4077);
+        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4220);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -21603,13 +23346,13 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:4078 */
+        /* parser/parser_prod.nit:4221 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21618,56 +23361,56 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:4079 */
+          /* parser/parser_prod.nit:4222 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4079);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4222);
           }
-          /* ./parser//parser_prod.nit:4080 */
+          /* parser/parser_prod.nit:4223 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4080);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4223);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:4081 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:4224 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4081);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4224);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:4083 */
+          /* parser/parser_prod.nit:4226 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4083);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4226);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:4085 */
+        /* parser/parser_prod.nit:4228 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:4088 */
+  /* parser/parser_prod.nit:4231 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4088);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4231);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21677,13 +23420,13 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4089 */
+    /* parser/parser_prod.nit:4232 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21692,32 +23435,32 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4090 */
+      /* parser/parser_prod.nit:4233 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4090);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4233);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4091 */
+      /* parser/parser_prod.nit:4234 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4091);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4234);
       }
-      /* ./parser//parser_prod.nit:4092 */
+      /* parser/parser_prod.nit:4235 */
       ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4094 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4094);
+      /* parser/parser_prod.nit:4237 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4237);
     }
-    /* ./parser//parser_prod.nit:4096 */
+    /* parser/parser_prod.nit:4239 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4098 */
+  /* parser/parser_prod.nit:4241 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4098);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4241);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21727,13 +23470,13 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4099 */
+    /* parser/parser_prod.nit:4242 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21742,35 +23485,35 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4100 */
+      /* parser/parser_prod.nit:4243 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4100);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4243);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4101 */
+      /* parser/parser_prod.nit:4244 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4101);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4244);
       }
-      /* ./parser//parser_prod.nit:4102 */
+      /* parser/parser_prod.nit:4245 */
       ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4104 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4104);
+      /* parser/parser_prod.nit:4247 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4247);
     }
-    /* ./parser//parser_prod.nit:4106 */
+    /* parser/parser_prod.nit:4249 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4108 */
+  /* parser/parser_prod.nit:4251 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -21778,13 +23521,13 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4109 */
+    /* parser/parser_prod.nit:4252 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21793,35 +23536,35 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4110 */
+      /* parser/parser_prod.nit:4253 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4110);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4253);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4111 */
+      /* parser/parser_prod.nit:4254 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4111);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4254);
       }
-      /* ./parser//parser_prod.nit:4112 */
+      /* parser/parser_prod.nit:4255 */
       ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4114 */
+      /* parser/parser_prod.nit:4257 */
       ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4116 */
+    /* parser/parser_prod.nit:4259 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4118 */
+  /* parser/parser_prod.nit:4261 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -21829,13 +23572,13 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4119 */
+    /* parser/parser_prod.nit:4262 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -21844,128 +23587,133 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4120 */
+      /* parser/parser_prod.nit:4263 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4120);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4263);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4121 */
+      /* parser/parser_prod.nit:4264 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4121);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4264);
       }
-      /* ./parser//parser_prod.nit:4122 */
+      /* parser/parser_prod.nit:4265 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4124 */
+      /* parser/parser_prod.nit:4267 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4126 */
+    /* parser/parser_prod.nit:4269 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AForExpr___visit_all[] = "parser_prod::AForExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4130;
+  fra.me.line = 4273;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4132 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:4273 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4275 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 4132);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 4275);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4133 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4276 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4133);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4276);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AForExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:4136 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AForExpr___visit_all_1));
+  /* parser/parser_prod.nit:4279 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4136);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4279);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4137 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4280 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4137);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4280);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4138 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4281 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4139 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:4282 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4139);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4282);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:4141 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:4284 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4142 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
+    /* parser/parser_prod.nit:4285 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4142);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4285);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -21980,16 +23728,18 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AForExpr___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:4134 */
+    /* parser/parser_prod.nit:4277 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AAssertExpr___empty_init[] = "parser_prod::AAssertExpr::empty_init";
 void parser___parser_prod___AAssertExpr___empty_init(val_t p0, int* init_table){
   int itpos131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAssertExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -21997,63 +23747,69 @@ void parser___parser_prod___AAssertExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos131]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4147;
+  fra.me.line = 4290;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos131] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAssertExpr___init_aassertexpr[] = "parser_prod::AAssertExpr::init_aassertexpr";
 void parser___parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos132 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAssertExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos132]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4149;
+  fra.me.line = 4292;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___init_aassertexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:4156 */
-  CALL_parser___parser_prod___AAssertExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4157 */
+  /* parser/parser_prod.nit:4292 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4299 */
+  CALL_parser___parser_prod___AAssertExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:4300 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4157);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4300);
   }
-  ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4158 */
+  ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4301 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4158);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4301);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4159 */
-  ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4160 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:4302 */
+  ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4303 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22062,35 +23818,35 @@ void parser___parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4161 */
+    /* parser/parser_prod.nit:4304 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4161);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4304);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
   }
-  /* ./parser//parser_prod.nit:4163 */
+  /* parser/parser_prod.nit:4306 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4163);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4306);
   }
-  ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:4164 */
+  ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:4307 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4164);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4307);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4165 */
-  ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:4166 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:4308 */
+  ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:4309 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
@@ -22099,17 +23855,18 @@ void parser___parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4167 */
+    /* parser/parser_prod.nit:4310 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4167);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4310);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos132] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAssertExpr___replace_child[] = "parser_prod::AAssertExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -22117,10 +23874,11 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4171;
+  fra.me.line = 4314;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -22128,11 +23886,11 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4173 */
+  /* parser/parser_prod.nit:4316 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 4173);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 4316);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22142,13 +23900,13 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4174 */
+    /* parser/parser_prod.nit:4317 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22157,35 +23915,35 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4175 */
+      /* parser/parser_prod.nit:4318 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4175);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4318);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4176 */
+      /* parser/parser_prod.nit:4319 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast TKwassert*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4176);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4319);
       }
-      /* ./parser//parser_prod.nit:4177 */
+      /* parser/parser_prod.nit:4320 */
       ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4179 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4179);
+      /* parser/parser_prod.nit:4322 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4322);
     }
-    /* ./parser//parser_prod.nit:4181 */
+    /* parser/parser_prod.nit:4324 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4183 */
+  /* parser/parser_prod.nit:4326 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -22193,13 +23951,13 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4184 */
+    /* parser/parser_prod.nit:4327 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22208,32 +23966,32 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4185 */
+      /* parser/parser_prod.nit:4328 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4185);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4328);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4186 */
+      /* parser/parser_prod.nit:4329 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4186);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4329);
       }
-      /* ./parser//parser_prod.nit:4187 */
+      /* parser/parser_prod.nit:4330 */
       ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4189 */
+      /* parser/parser_prod.nit:4332 */
       ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4191 */
+    /* parser/parser_prod.nit:4334 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4193 */
+  /* parser/parser_prod.nit:4336 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4193);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4336);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22243,13 +24001,13 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4194 */
+    /* parser/parser_prod.nit:4337 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22258,35 +24016,35 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4195 */
+      /* parser/parser_prod.nit:4338 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4195);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4338);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4196 */
+      /* parser/parser_prod.nit:4339 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4196);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4339);
       }
-      /* ./parser//parser_prod.nit:4197 */
+      /* parser/parser_prod.nit:4340 */
       ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4199 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4199);
+      /* parser/parser_prod.nit:4342 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4342);
     }
-    /* ./parser//parser_prod.nit:4201 */
+    /* parser/parser_prod.nit:4344 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4203 */
+  /* parser/parser_prod.nit:4346 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -22294,13 +24052,13 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4204 */
+    /* parser/parser_prod.nit:4347 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22309,116 +24067,122 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4205 */
+      /* parser/parser_prod.nit:4348 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4205);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4348);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4206 */
+      /* parser/parser_prod.nit:4349 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4206);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4349);
       }
-      /* ./parser//parser_prod.nit:4207 */
+      /* parser/parser_prod.nit:4350 */
       ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4209 */
+      /* parser/parser_prod.nit:4352 */
       ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4211 */
+    /* parser/parser_prod.nit:4354 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAssertExpr___visit_all[] = "parser_prod::AAssertExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4215;
+  fra.me.line = 4358;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4217 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:4358 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4360 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 4217);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 4360);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4218 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4361 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4219 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
+    /* parser/parser_prod.nit:4362 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4219);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4362);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:4221 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:4364 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4221);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4364);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4222 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4365 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4223 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:4366 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4223);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4366);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOnceExpr___empty_init[] = "parser_prod::AOnceExpr::empty_init";
 void parser___parser_prod___AOnceExpr___empty_init(val_t p0, int* init_table){
   int itpos133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOnceExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -22426,66 +24190,73 @@ void parser___parser_prod___AOnceExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos133]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4228;
+  fra.me.line = 4371;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos133] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOnceExpr___init_aonceexpr[] = "parser_prod::AOnceExpr::init_aonceexpr";
 void parser___parser_prod___AOnceExpr___init_aonceexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos134 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOnceExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos134]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4230;
+  fra.me.line = 4373;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___init_aonceexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4235 */
-  CALL_parser___parser_prod___AOnceExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4236 */
+  /* parser/parser_prod.nit:4373 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4378 */
+  CALL_parser___parser_prod___AOnceExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4379 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4236);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4379);
   }
-  ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4237 */
+  ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4380 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4237);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4380);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4238 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4381 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4238);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4381);
   }
-  ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4239 */
+  ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4382 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4239);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4382);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos134] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOnceExpr___replace_child[] = "parser_prod::AOnceExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -22493,10 +24264,11 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4242;
+  fra.me.line = 4385;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -22504,11 +24276,11 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4244 */
+  /* parser/parser_prod.nit:4387 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 4244);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 4387);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22518,13 +24290,13 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4245 */
+    /* parser/parser_prod.nit:4388 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22533,32 +24305,32 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4246 */
+      /* parser/parser_prod.nit:4389 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4246);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4389);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4247 */
+      /* parser/parser_prod.nit:4390 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwonce, ID_parser___parser_nodes___TKwonce)) /*cast TKwonce*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4247);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4390);
       }
-      /* ./parser//parser_prod.nit:4248 */
+      /* parser/parser_prod.nit:4391 */
       ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4250 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4250);
+      /* parser/parser_prod.nit:4393 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4393);
     }
-    /* ./parser//parser_prod.nit:4252 */
+    /* parser/parser_prod.nit:4395 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4254 */
+  /* parser/parser_prod.nit:4397 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4254);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4397);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22568,13 +24340,13 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4255 */
+    /* parser/parser_prod.nit:4398 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22583,65 +24355,68 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4256 */
+      /* parser/parser_prod.nit:4399 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4256);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4399);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4257 */
+      /* parser/parser_prod.nit:4400 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4257);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4400);
       }
-      /* ./parser//parser_prod.nit:4258 */
+      /* parser/parser_prod.nit:4401 */
       ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4260 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4260);
+      /* parser/parser_prod.nit:4403 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4403);
     }
-    /* ./parser//parser_prod.nit:4262 */
+    /* parser/parser_prod.nit:4405 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOnceExpr___visit_all[] = "parser_prod::AOnceExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AOnceExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4266;
+  fra.me.line = 4409;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4268 */
+  /* parser/parser_prod.nit:4411 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 4268);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 4411);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4269 */
+  /* parser/parser_prod.nit:4412 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4269);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4412);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASendExpr___empty_init[] = "parser_prod::ASendExpr::empty_init";
 void parser___parser_prod___ASendExpr___empty_init(val_t p0, int* init_table){
   int itpos135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASendExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -22649,51 +24424,58 @@ void parser___parser_prod___ASendExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos135]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4273;
+  fra.me.line = 4416;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos135] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASendExpr___init_asendexpr[] = "parser_prod::ASendExpr::init_asendexpr";
 void parser___parser_prod___ASendExpr___init_asendexpr(val_t p0, val_t p1, int* init_table){
   int itpos136 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASendExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos136]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4275;
+  fra.me.line = 4418;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4279 */
-  CALL_parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4280 */
+  /* parser/parser_prod.nit:4418 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4422 */
+  CALL_parser___parser_prod___ASendExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:4423 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4280);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4423);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4281 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4424 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4281);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4424);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos136] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASendExpr___replace_child[] = "parser_prod::ASendExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -22701,10 +24483,11 @@ void parser___parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4284;
+  fra.me.line = 4427;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -22712,11 +24495,11 @@ void parser___parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4286 */
+  /* parser/parser_prod.nit:4429 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4286);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4429);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22726,13 +24509,13 @@ void parser___parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4287 */
+    /* parser/parser_prod.nit:4430 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22741,56 +24524,59 @@ void parser___parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4288 */
+      /* parser/parser_prod.nit:4431 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4288);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4431);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4289 */
+      /* parser/parser_prod.nit:4432 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4289);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4432);
       }
-      /* ./parser//parser_prod.nit:4290 */
+      /* parser/parser_prod.nit:4433 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4292 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4292);
+      /* parser/parser_prod.nit:4435 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4435);
     }
-    /* ./parser//parser_prod.nit:4294 */
+    /* parser/parser_prod.nit:4437 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASendExpr___visit_all[] = "parser_prod::ASendExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASendExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4298;
+  fra.me.line = 4441;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4300 */
+  /* parser/parser_prod.nit:4443 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4300);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4443);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABinopExpr___empty_init[] = "parser_prod::ABinopExpr::empty_init";
 void parser___parser_prod___ABinopExpr___empty_init(val_t p0, int* init_table){
   int itpos137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABinopExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -22798,66 +24584,73 @@ void parser___parser_prod___ABinopExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos137]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4304;
+  fra.me.line = 4447;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos137] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABinopExpr___init_abinopexpr[] = "parser_prod::ABinopExpr::init_abinopexpr";
 void parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos138 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABinopExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos138]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4306;
+  fra.me.line = 4449;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4311 */
-  CALL_parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4312 */
+  /* parser/parser_prod.nit:4449 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4454 */
+  CALL_parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4455 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4312);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4455);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4313 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4456 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4313);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4456);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4314 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4457 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4314);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4457);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4315 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4458 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4315);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4458);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos138] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABinopExpr___replace_child[] = "parser_prod::ABinopExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -22865,10 +24658,11 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4318;
+  fra.me.line = 4461;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -22876,11 +24670,11 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4320 */
+  /* parser/parser_prod.nit:4463 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4320);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4463);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22890,13 +24684,13 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4321 */
+    /* parser/parser_prod.nit:4464 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22905,32 +24699,32 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4322 */
+      /* parser/parser_prod.nit:4465 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4322);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4465);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4323 */
+      /* parser/parser_prod.nit:4466 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4323);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4466);
       }
-      /* ./parser//parser_prod.nit:4324 */
+      /* parser/parser_prod.nit:4467 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4326 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4326);
+      /* parser/parser_prod.nit:4469 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4469);
     }
-    /* ./parser//parser_prod.nit:4328 */
+    /* parser/parser_prod.nit:4471 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4330 */
+  /* parser/parser_prod.nit:4473 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4330);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4473);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22940,13 +24734,13 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4331 */
+    /* parser/parser_prod.nit:4474 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -22955,65 +24749,68 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4332 */
+      /* parser/parser_prod.nit:4475 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4332);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4475);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4333 */
+      /* parser/parser_prod.nit:4476 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4333);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4476);
       }
-      /* ./parser//parser_prod.nit:4334 */
+      /* parser/parser_prod.nit:4477 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4336 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4336);
+      /* parser/parser_prod.nit:4479 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4479);
     }
-    /* ./parser//parser_prod.nit:4338 */
+    /* parser/parser_prod.nit:4481 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABinopExpr___visit_all[] = "parser_prod::ABinopExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ABinopExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4342;
+  fra.me.line = 4485;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4344 */
+  /* parser/parser_prod.nit:4487 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4344);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4487);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4345 */
+  /* parser/parser_prod.nit:4488 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4345);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4488);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrExpr___empty_init[] = "parser_prod::AOrExpr::empty_init";
 void parser___parser_prod___AOrExpr___empty_init(val_t p0, int* init_table){
   int itpos139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -23021,66 +24818,73 @@ void parser___parser_prod___AOrExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos139]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4349;
+  fra.me.line = 4492;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos139] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrExpr___init_aorexpr[] = "parser_prod::AOrExpr::init_aorexpr";
 void parser___parser_prod___AOrExpr___init_aorexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos140 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos140]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4351;
+  fra.me.line = 4494;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___init_aorexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4356 */
-  CALL_parser___parser_prod___AOrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4357 */
+  /* parser/parser_prod.nit:4494 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4499 */
+  CALL_parser___parser_prod___AOrExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4500 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4357);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4500);
   }
-  ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4358 */
+  ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4501 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4358);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4501);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4359 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4502 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4359);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4502);
   }
-  ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4360 */
+  ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4503 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4360);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4503);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos140] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrExpr___replace_child[] = "parser_prod::AOrExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -23088,10 +24892,11 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4363;
+  fra.me.line = 4506;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23099,11 +24904,11 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4365 */
+  /* parser/parser_prod.nit:4508 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4365);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4508);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23113,13 +24918,13 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4366 */
+    /* parser/parser_prod.nit:4509 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -23128,32 +24933,32 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4367 */
+      /* parser/parser_prod.nit:4510 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4367);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4510);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4368 */
+      /* parser/parser_prod.nit:4511 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4368);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4511);
       }
-      /* ./parser//parser_prod.nit:4369 */
+      /* parser/parser_prod.nit:4512 */
       ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4371 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4371);
+      /* parser/parser_prod.nit:4514 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4514);
     }
-    /* ./parser//parser_prod.nit:4373 */
+    /* parser/parser_prod.nit:4516 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4375 */
+  /* parser/parser_prod.nit:4518 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4375);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4518);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23163,13 +24968,13 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4376 */
+    /* parser/parser_prod.nit:4519 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -23178,65 +24983,68 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4377 */
+      /* parser/parser_prod.nit:4520 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4377);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4520);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4378 */
+      /* parser/parser_prod.nit:4521 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4378);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4521);
       }
-      /* ./parser//parser_prod.nit:4379 */
+      /* parser/parser_prod.nit:4522 */
       ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4381 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4381);
+      /* parser/parser_prod.nit:4524 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4524);
     }
-    /* ./parser//parser_prod.nit:4383 */
+    /* parser/parser_prod.nit:4526 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrExpr___visit_all[] = "parser_prod::AOrExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AOrExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4387;
+  fra.me.line = 4530;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4389 */
+  /* parser/parser_prod.nit:4532 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4389);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4532);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4390 */
+  /* parser/parser_prod.nit:4533 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4390);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4533);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAndExpr___empty_init[] = "parser_prod::AAndExpr::empty_init";
 void parser___parser_prod___AAndExpr___empty_init(val_t p0, int* init_table){
   int itpos141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAndExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -23244,66 +25052,73 @@ void parser___parser_prod___AAndExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos141]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4394;
+  fra.me.line = 4537;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos141] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAndExpr___init_aandexpr[] = "parser_prod::AAndExpr::init_aandexpr";
 void parser___parser_prod___AAndExpr___init_aandexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos142 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAndExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos142]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4396;
+  fra.me.line = 4539;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___init_aandexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4401 */
-  CALL_parser___parser_prod___AAndExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4402 */
+  /* parser/parser_prod.nit:4539 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4544 */
+  CALL_parser___parser_prod___AAndExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4545 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4402);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4545);
   }
-  ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4403 */
+  ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4546 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4403);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4546);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4404 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4547 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4404);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4547);
   }
-  ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4405 */
+  ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4548 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4405);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4548);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos142] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAndExpr___replace_child[] = "parser_prod::AAndExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -23311,10 +25126,11 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4408;
+  fra.me.line = 4551;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23322,11 +25138,11 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4410 */
+  /* parser/parser_prod.nit:4553 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4410);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4553);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23336,13 +25152,13 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4411 */
+    /* parser/parser_prod.nit:4554 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -23351,32 +25167,32 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4412 */
+      /* parser/parser_prod.nit:4555 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4412);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4555);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4413 */
+      /* parser/parser_prod.nit:4556 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4413);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4556);
       }
-      /* ./parser//parser_prod.nit:4414 */
+      /* parser/parser_prod.nit:4557 */
       ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4416 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4416);
+      /* parser/parser_prod.nit:4559 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4559);
     }
-    /* ./parser//parser_prod.nit:4418 */
+    /* parser/parser_prod.nit:4561 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4420 */
+  /* parser/parser_prod.nit:4563 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4420);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4563);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23386,13 +25202,13 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4421 */
+    /* parser/parser_prod.nit:4564 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -23401,65 +25217,68 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4422 */
+      /* parser/parser_prod.nit:4565 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4422);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4565);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4423 */
+      /* parser/parser_prod.nit:4566 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4423);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4566);
       }
-      /* ./parser//parser_prod.nit:4424 */
+      /* parser/parser_prod.nit:4567 */
       ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4426 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4426);
+      /* parser/parser_prod.nit:4569 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4569);
     }
-    /* ./parser//parser_prod.nit:4428 */
+    /* parser/parser_prod.nit:4571 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAndExpr___visit_all[] = "parser_prod::AAndExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AAndExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4432;
+  fra.me.line = 4575;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4434 */
+  /* parser/parser_prod.nit:4577 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4434);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4577);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4435 */
+  /* parser/parser_prod.nit:4578 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4435);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4578);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrElseExpr___empty_init[] = "parser_prod::AOrElseExpr::empty_init";
 void parser___parser_prod___AOrElseExpr___empty_init(val_t p0, int* init_table){
   int itpos143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrElseExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -23467,66 +25286,73 @@ void parser___parser_prod___AOrElseExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos143]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4439;
+  fra.me.line = 4582;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos143] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrElseExpr___init_aorelseexpr[] = "parser_prod::AOrElseExpr::init_aorelseexpr";
 void parser___parser_prod___AOrElseExpr___init_aorelseexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos144 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrElseExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos144]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4441;
+  fra.me.line = 4584;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___init_aorelseexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4446 */
-  CALL_parser___parser_prod___AOrElseExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4584 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4589 */
+  CALL_parser___parser_prod___AOrElseExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4590 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4447);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4590);
   }
-  ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4448 */
+  ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4591 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4448);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4591);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4449 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4592 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4449);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4592);
   }
-  ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4450 */
+  ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4593 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4450);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4593);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos144] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrElseExpr___replace_child[] = "parser_prod::AOrElseExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -23534,10 +25360,11 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4453;
+  fra.me.line = 4596;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23545,11 +25372,11 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4455 */
+  /* parser/parser_prod.nit:4598 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4455);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4598);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23559,13 +25386,13 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4456 */
+    /* parser/parser_prod.nit:4599 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -23574,32 +25401,32 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4457 */
+      /* parser/parser_prod.nit:4600 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4457);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4600);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4458 */
+      /* parser/parser_prod.nit:4601 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4458);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4601);
       }
-      /* ./parser//parser_prod.nit:4459 */
+      /* parser/parser_prod.nit:4602 */
       ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4461 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4461);
+      /* parser/parser_prod.nit:4604 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4604);
     }
-    /* ./parser//parser_prod.nit:4463 */
+    /* parser/parser_prod.nit:4606 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4465 */
+  /* parser/parser_prod.nit:4608 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4465);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4608);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23609,13 +25436,13 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4466 */
+    /* parser/parser_prod.nit:4609 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -23624,65 +25451,68 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4467 */
+      /* parser/parser_prod.nit:4610 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4467);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4610);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4468 */
+      /* parser/parser_prod.nit:4611 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4468);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4611);
       }
-      /* ./parser//parser_prod.nit:4469 */
+      /* parser/parser_prod.nit:4612 */
       ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4471 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4471);
+      /* parser/parser_prod.nit:4614 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4614);
     }
-    /* ./parser//parser_prod.nit:4473 */
+    /* parser/parser_prod.nit:4616 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrElseExpr___visit_all[] = "parser_prod::AOrElseExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AOrElseExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4477;
+  fra.me.line = 4620;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4479 */
+  /* parser/parser_prod.nit:4622 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4479);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4622);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4480 */
+  /* parser/parser_prod.nit:4623 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4480);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4623);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANotExpr___empty_init[] = "parser_prod::ANotExpr::empty_init";
 void parser___parser_prod___ANotExpr___empty_init(val_t p0, int* init_table){
   int itpos145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANotExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -23690,66 +25520,73 @@ void parser___parser_prod___ANotExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos145]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4484;
+  fra.me.line = 4627;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos145] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANotExpr___init_anotexpr[] = "parser_prod::ANotExpr::init_anotexpr";
 void parser___parser_prod___ANotExpr___init_anotexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos146 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANotExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos146]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4486;
+  fra.me.line = 4629;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___init_anotexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4491 */
-  CALL_parser___parser_prod___ANotExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4492 */
+  /* parser/parser_prod.nit:4629 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4634 */
+  CALL_parser___parser_prod___ANotExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4635 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4492);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4635);
   }
-  ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4493 */
+  ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4636 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4493);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4636);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4494 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4637 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4494);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4637);
   }
-  ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4495 */
+  ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4638 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4495);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4638);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos146] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANotExpr___replace_child[] = "parser_prod::ANotExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -23757,10 +25594,11 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4498;
+  fra.me.line = 4641;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23768,11 +25606,11 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4500 */
+  /* parser/parser_prod.nit:4643 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 4500);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 4643);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23782,13 +25620,13 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4501 */
+    /* parser/parser_prod.nit:4644 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -23797,32 +25635,32 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4502 */
+      /* parser/parser_prod.nit:4645 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4502);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4645);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4503 */
+      /* parser/parser_prod.nit:4646 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast TKwnot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4503);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4646);
       }
-      /* ./parser//parser_prod.nit:4504 */
+      /* parser/parser_prod.nit:4647 */
       ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4506 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4506);
+      /* parser/parser_prod.nit:4649 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4649);
     }
-    /* ./parser//parser_prod.nit:4508 */
+    /* parser/parser_prod.nit:4651 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4510 */
+  /* parser/parser_prod.nit:4653 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4510);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4653);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23832,13 +25670,13 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4511 */
+    /* parser/parser_prod.nit:4654 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -23847,65 +25685,68 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4512 */
+      /* parser/parser_prod.nit:4655 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4512);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4655);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4513 */
+      /* parser/parser_prod.nit:4656 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4513);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4656);
       }
-      /* ./parser//parser_prod.nit:4514 */
+      /* parser/parser_prod.nit:4657 */
       ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4516 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4516);
+      /* parser/parser_prod.nit:4659 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4659);
     }
-    /* ./parser//parser_prod.nit:4518 */
+    /* parser/parser_prod.nit:4661 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANotExpr___visit_all[] = "parser_prod::ANotExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ANotExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4522;
+  fra.me.line = 4665;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4524 */
+  /* parser/parser_prod.nit:4667 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 4524);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 4667);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4525 */
+  /* parser/parser_prod.nit:4668 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4525);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4668);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEqExpr___empty_init[] = "parser_prod::AEqExpr::empty_init";
 void parser___parser_prod___AEqExpr___empty_init(val_t p0, int* init_table){
   int itpos147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEqExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -23913,66 +25754,73 @@ void parser___parser_prod___AEqExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos147]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4529;
+  fra.me.line = 4672;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos147] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEqExpr___init_aeqexpr[] = "parser_prod::AEqExpr::init_aeqexpr";
 void parser___parser_prod___AEqExpr___init_aeqexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos148 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEqExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos148]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4531;
+  fra.me.line = 4674;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___init_aeqexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4536 */
-  CALL_parser___parser_prod___AEqExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4537 */
+  /* parser/parser_prod.nit:4674 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4679 */
+  CALL_parser___parser_prod___AEqExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4680 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4537);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4680);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4538 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4681 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4538);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4681);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4539 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4682 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4539);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4682);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4540 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4683 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4540);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4683);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos148] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEqExpr___replace_child[] = "parser_prod::AEqExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -23980,10 +25828,11 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4543;
+  fra.me.line = 4686;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23991,11 +25840,11 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4545 */
+  /* parser/parser_prod.nit:4688 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4545);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4688);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24005,13 +25854,13 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4546 */
+    /* parser/parser_prod.nit:4689 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24020,32 +25869,32 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4547 */
+      /* parser/parser_prod.nit:4690 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4547);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4690);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4548 */
+      /* parser/parser_prod.nit:4691 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4548);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4691);
       }
-      /* ./parser//parser_prod.nit:4549 */
+      /* parser/parser_prod.nit:4692 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4551 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4551);
+      /* parser/parser_prod.nit:4694 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4694);
     }
-    /* ./parser//parser_prod.nit:4553 */
+    /* parser/parser_prod.nit:4696 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4555 */
+  /* parser/parser_prod.nit:4698 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4555);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4698);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24055,13 +25904,13 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4556 */
+    /* parser/parser_prod.nit:4699 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24070,65 +25919,68 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4557 */
+      /* parser/parser_prod.nit:4700 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4557);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4700);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4558 */
+      /* parser/parser_prod.nit:4701 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4558);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4701);
       }
-      /* ./parser//parser_prod.nit:4559 */
+      /* parser/parser_prod.nit:4702 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4561 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4561);
+      /* parser/parser_prod.nit:4704 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4704);
     }
-    /* ./parser//parser_prod.nit:4563 */
+    /* parser/parser_prod.nit:4706 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEqExpr___visit_all[] = "parser_prod::AEqExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AEqExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4567;
+  fra.me.line = 4710;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4569 */
+  /* parser/parser_prod.nit:4712 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4569);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4712);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4570 */
+  /* parser/parser_prod.nit:4713 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4570);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4713);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEeExpr___empty_init[] = "parser_prod::AEeExpr::empty_init";
 void parser___parser_prod___AEeExpr___empty_init(val_t p0, int* init_table){
   int itpos149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEeExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -24136,66 +25988,73 @@ void parser___parser_prod___AEeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos149]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4574;
+  fra.me.line = 4717;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos149] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEeExpr___init_aeeexpr[] = "parser_prod::AEeExpr::init_aeeexpr";
 void parser___parser_prod___AEeExpr___init_aeeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos150 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEeExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos150]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4576;
+  fra.me.line = 4719;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___init_aeeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4581 */
-  CALL_parser___parser_prod___AEeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4582 */
+  /* parser/parser_prod.nit:4719 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4724 */
+  CALL_parser___parser_prod___AEeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4725 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4582);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4725);
   }
-  ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4583 */
+  ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4726 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4583);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4726);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4584 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4727 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4584);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4727);
   }
-  ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4585 */
+  ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4728 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4585);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4728);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos150] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEeExpr___replace_child[] = "parser_prod::AEeExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -24203,10 +26062,11 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4588;
+  fra.me.line = 4731;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24214,11 +26074,11 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4590 */
+  /* parser/parser_prod.nit:4733 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4590);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4733);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24228,13 +26088,13 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4591 */
+    /* parser/parser_prod.nit:4734 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24243,32 +26103,32 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4592 */
+      /* parser/parser_prod.nit:4735 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4592);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4735);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4593 */
+      /* parser/parser_prod.nit:4736 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4593);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4736);
       }
-      /* ./parser//parser_prod.nit:4594 */
+      /* parser/parser_prod.nit:4737 */
       ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4596 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4596);
+      /* parser/parser_prod.nit:4739 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4739);
     }
-    /* ./parser//parser_prod.nit:4598 */
+    /* parser/parser_prod.nit:4741 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4600 */
+  /* parser/parser_prod.nit:4743 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4600);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4743);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24278,13 +26138,13 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4601 */
+    /* parser/parser_prod.nit:4744 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24293,65 +26153,68 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4602 */
+      /* parser/parser_prod.nit:4745 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4602);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4745);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4603 */
+      /* parser/parser_prod.nit:4746 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4603);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4746);
       }
-      /* ./parser//parser_prod.nit:4604 */
+      /* parser/parser_prod.nit:4747 */
       ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4606 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4606);
+      /* parser/parser_prod.nit:4749 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4749);
     }
-    /* ./parser//parser_prod.nit:4608 */
+    /* parser/parser_prod.nit:4751 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEeExpr___visit_all[] = "parser_prod::AEeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AEeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4612;
+  fra.me.line = 4755;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4614 */
+  /* parser/parser_prod.nit:4757 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4614);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4757);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4615 */
+  /* parser/parser_prod.nit:4758 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4615);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4758);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANeExpr___empty_init[] = "parser_prod::ANeExpr::empty_init";
 void parser___parser_prod___ANeExpr___empty_init(val_t p0, int* init_table){
   int itpos151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANeExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -24359,66 +26222,73 @@ void parser___parser_prod___ANeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos151]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4619;
+  fra.me.line = 4762;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos151] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANeExpr___init_aneexpr[] = "parser_prod::ANeExpr::init_aneexpr";
 void parser___parser_prod___ANeExpr___init_aneexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos152 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANeExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos152]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4621;
+  fra.me.line = 4764;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___init_aneexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4626 */
-  CALL_parser___parser_prod___ANeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4627 */
+  /* parser/parser_prod.nit:4764 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4769 */
+  CALL_parser___parser_prod___ANeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4770 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4627);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4770);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4628 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4771 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4628);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4771);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4629 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4772 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4629);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4772);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4630 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4773 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4630);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4773);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos152] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANeExpr___replace_child[] = "parser_prod::ANeExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -24426,10 +26296,11 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4633;
+  fra.me.line = 4776;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24437,11 +26308,11 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4635 */
+  /* parser/parser_prod.nit:4778 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4635);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4778);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24451,13 +26322,13 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4636 */
+    /* parser/parser_prod.nit:4779 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24466,32 +26337,32 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4637 */
+      /* parser/parser_prod.nit:4780 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4637);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4780);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4638 */
+      /* parser/parser_prod.nit:4781 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4638);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4781);
       }
-      /* ./parser//parser_prod.nit:4639 */
+      /* parser/parser_prod.nit:4782 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4641 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4641);
+      /* parser/parser_prod.nit:4784 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4784);
     }
-    /* ./parser//parser_prod.nit:4643 */
+    /* parser/parser_prod.nit:4786 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4645 */
+  /* parser/parser_prod.nit:4788 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4645);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4788);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24501,13 +26372,13 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4646 */
+    /* parser/parser_prod.nit:4789 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24516,65 +26387,68 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4647 */
+      /* parser/parser_prod.nit:4790 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4647);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4790);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4648 */
+      /* parser/parser_prod.nit:4791 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4648);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4791);
       }
-      /* ./parser//parser_prod.nit:4649 */
+      /* parser/parser_prod.nit:4792 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4651 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4651);
+      /* parser/parser_prod.nit:4794 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4794);
     }
-    /* ./parser//parser_prod.nit:4653 */
+    /* parser/parser_prod.nit:4796 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANeExpr___visit_all[] = "parser_prod::ANeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ANeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4657;
+  fra.me.line = 4800;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4659 */
+  /* parser/parser_prod.nit:4802 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4659);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4802);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4660 */
+  /* parser/parser_prod.nit:4803 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4660);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4803);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALtExpr___empty_init[] = "parser_prod::ALtExpr::empty_init";
 void parser___parser_prod___ALtExpr___empty_init(val_t p0, int* init_table){
   int itpos153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALtExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -24582,66 +26456,73 @@ void parser___parser_prod___ALtExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos153]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4664;
+  fra.me.line = 4807;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos153] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALtExpr___init_altexpr[] = "parser_prod::ALtExpr::init_altexpr";
 void parser___parser_prod___ALtExpr___init_altexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos154 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALtExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos154]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4666;
+  fra.me.line = 4809;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___init_altexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4671 */
-  CALL_parser___parser_prod___ALtExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4672 */
+  /* parser/parser_prod.nit:4809 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4814 */
+  CALL_parser___parser_prod___ALtExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4815 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4672);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4815);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4673 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4816 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4673);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4816);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4674 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4817 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4674);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4817);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4675 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4818 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4675);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4818);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos154] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALtExpr___replace_child[] = "parser_prod::ALtExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -24649,10 +26530,11 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4678;
+  fra.me.line = 4821;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24660,11 +26542,11 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4680 */
+  /* parser/parser_prod.nit:4823 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4680);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4823);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24674,13 +26556,13 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4681 */
+    /* parser/parser_prod.nit:4824 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24689,32 +26571,32 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4682 */
+      /* parser/parser_prod.nit:4825 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4682);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4825);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4683 */
+      /* parser/parser_prod.nit:4826 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4683);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4826);
       }
-      /* ./parser//parser_prod.nit:4684 */
+      /* parser/parser_prod.nit:4827 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4686 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4686);
+      /* parser/parser_prod.nit:4829 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4829);
     }
-    /* ./parser//parser_prod.nit:4688 */
+    /* parser/parser_prod.nit:4831 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4690 */
+  /* parser/parser_prod.nit:4833 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4690);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4833);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24724,13 +26606,13 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4691 */
+    /* parser/parser_prod.nit:4834 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24739,65 +26621,68 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4692 */
+      /* parser/parser_prod.nit:4835 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4692);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4835);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4693 */
+      /* parser/parser_prod.nit:4836 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4693);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4836);
       }
-      /* ./parser//parser_prod.nit:4694 */
+      /* parser/parser_prod.nit:4837 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4696 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4696);
+      /* parser/parser_prod.nit:4839 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4839);
     }
-    /* ./parser//parser_prod.nit:4698 */
+    /* parser/parser_prod.nit:4841 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALtExpr___visit_all[] = "parser_prod::ALtExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ALtExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4702;
+  fra.me.line = 4845;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4704 */
+  /* parser/parser_prod.nit:4847 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4704);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4847);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4705 */
+  /* parser/parser_prod.nit:4848 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4705);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4848);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALeExpr___empty_init[] = "parser_prod::ALeExpr::empty_init";
 void parser___parser_prod___ALeExpr___empty_init(val_t p0, int* init_table){
   int itpos155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALeExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -24805,66 +26690,73 @@ void parser___parser_prod___ALeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos155]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4709;
+  fra.me.line = 4852;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos155] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALeExpr___init_aleexpr[] = "parser_prod::ALeExpr::init_aleexpr";
 void parser___parser_prod___ALeExpr___init_aleexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos156 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALeExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos156]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4711;
+  fra.me.line = 4854;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___init_aleexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4716 */
-  CALL_parser___parser_prod___ALeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4717 */
+  /* parser/parser_prod.nit:4854 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4859 */
+  CALL_parser___parser_prod___ALeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4860 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4717);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4860);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4718 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4861 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4718);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4861);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4719 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4862 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4719);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4862);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4720 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4863 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4720);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4863);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos156] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALeExpr___replace_child[] = "parser_prod::ALeExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -24872,10 +26764,11 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4723;
+  fra.me.line = 4866;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24883,11 +26776,11 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4725 */
+  /* parser/parser_prod.nit:4868 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4725);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4868);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24897,13 +26790,13 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4726 */
+    /* parser/parser_prod.nit:4869 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24912,32 +26805,32 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4727 */
+      /* parser/parser_prod.nit:4870 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4727);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4870);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4728 */
+      /* parser/parser_prod.nit:4871 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4728);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4871);
       }
-      /* ./parser//parser_prod.nit:4729 */
+      /* parser/parser_prod.nit:4872 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4731 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4731);
+      /* parser/parser_prod.nit:4874 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4874);
     }
-    /* ./parser//parser_prod.nit:4733 */
+    /* parser/parser_prod.nit:4876 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4735 */
+  /* parser/parser_prod.nit:4878 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4735);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4878);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24947,13 +26840,13 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4736 */
+    /* parser/parser_prod.nit:4879 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -24962,65 +26855,68 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4737 */
+      /* parser/parser_prod.nit:4880 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4737);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4880);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4738 */
+      /* parser/parser_prod.nit:4881 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4738);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4881);
       }
-      /* ./parser//parser_prod.nit:4739 */
+      /* parser/parser_prod.nit:4882 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4741 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4741);
+      /* parser/parser_prod.nit:4884 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4884);
     }
-    /* ./parser//parser_prod.nit:4743 */
+    /* parser/parser_prod.nit:4886 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALeExpr___visit_all[] = "parser_prod::ALeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ALeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4747;
+  fra.me.line = 4890;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4749 */
+  /* parser/parser_prod.nit:4892 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4749);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4892);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4750 */
+  /* parser/parser_prod.nit:4893 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4750);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4893);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALlExpr___empty_init[] = "parser_prod::ALlExpr::empty_init";
 void parser___parser_prod___ALlExpr___empty_init(val_t p0, int* init_table){
   int itpos157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALlExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -25028,66 +26924,73 @@ void parser___parser_prod___ALlExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos157]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4754;
+  fra.me.line = 4897;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos157] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALlExpr___init_allexpr[] = "parser_prod::ALlExpr::init_allexpr";
 void parser___parser_prod___ALlExpr___init_allexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos158 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALlExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos158]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4756;
+  fra.me.line = 4899;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___init_allexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4761 */
-  CALL_parser___parser_prod___ALlExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4762 */
+  /* parser/parser_prod.nit:4899 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4904 */
+  CALL_parser___parser_prod___ALlExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4905 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4762);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4905);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4763 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4906 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4763);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4906);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4764 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4907 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4764);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4907);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4765 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4908 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4765);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4908);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos158] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALlExpr___replace_child[] = "parser_prod::ALlExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -25095,10 +26998,11 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4768;
+  fra.me.line = 4911;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25106,11 +27010,11 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4770 */
+  /* parser/parser_prod.nit:4913 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4770);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4913);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25120,13 +27024,13 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4771 */
+    /* parser/parser_prod.nit:4914 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -25135,32 +27039,32 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4772 */
+      /* parser/parser_prod.nit:4915 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4772);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4915);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4773 */
+      /* parser/parser_prod.nit:4916 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4773);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4916);
       }
-      /* ./parser//parser_prod.nit:4774 */
+      /* parser/parser_prod.nit:4917 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4776 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4776);
+      /* parser/parser_prod.nit:4919 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4919);
     }
-    /* ./parser//parser_prod.nit:4778 */
+    /* parser/parser_prod.nit:4921 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4780 */
+  /* parser/parser_prod.nit:4923 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4780);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4923);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25170,13 +27074,13 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4781 */
+    /* parser/parser_prod.nit:4924 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -25185,65 +27089,68 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4782 */
+      /* parser/parser_prod.nit:4925 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4782);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4925);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4783 */
+      /* parser/parser_prod.nit:4926 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4783);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4926);
       }
-      /* ./parser//parser_prod.nit:4784 */
+      /* parser/parser_prod.nit:4927 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4786 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4786);
+      /* parser/parser_prod.nit:4929 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4929);
     }
-    /* ./parser//parser_prod.nit:4788 */
+    /* parser/parser_prod.nit:4931 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ALlExpr___visit_all[] = "parser_prod::ALlExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ALlExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4792;
+  fra.me.line = 4935;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4794 */
+  /* parser/parser_prod.nit:4937 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4794);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4937);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4795 */
+  /* parser/parser_prod.nit:4938 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4795);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4938);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGtExpr___empty_init[] = "parser_prod::AGtExpr::empty_init";
 void parser___parser_prod___AGtExpr___empty_init(val_t p0, int* init_table){
   int itpos159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGtExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -25251,66 +27158,73 @@ void parser___parser_prod___AGtExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos159]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4799;
+  fra.me.line = 4942;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos159] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGtExpr___init_agtexpr[] = "parser_prod::AGtExpr::init_agtexpr";
 void parser___parser_prod___AGtExpr___init_agtexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos160 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGtExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos160]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4801;
+  fra.me.line = 4944;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___init_agtexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4806 */
-  CALL_parser___parser_prod___AGtExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4807 */
+  /* parser/parser_prod.nit:4944 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4949 */
+  CALL_parser___parser_prod___AGtExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4950 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4807);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4950);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4808 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4951 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4808);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4951);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4809 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4952 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4809);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4952);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4810 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4953 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4810);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4953);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos160] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGtExpr___replace_child[] = "parser_prod::AGtExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -25318,10 +27232,11 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4813;
+  fra.me.line = 4956;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25329,11 +27244,11 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4815 */
+  /* parser/parser_prod.nit:4958 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4815);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4958);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25343,13 +27258,13 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4816 */
+    /* parser/parser_prod.nit:4959 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -25358,32 +27273,32 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4817 */
+      /* parser/parser_prod.nit:4960 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4817);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4960);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4818 */
+      /* parser/parser_prod.nit:4961 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4818);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4961);
       }
-      /* ./parser//parser_prod.nit:4819 */
+      /* parser/parser_prod.nit:4962 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4821 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4821);
+      /* parser/parser_prod.nit:4964 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4964);
     }
-    /* ./parser//parser_prod.nit:4823 */
+    /* parser/parser_prod.nit:4966 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4825 */
+  /* parser/parser_prod.nit:4968 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4825);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4968);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25393,13 +27308,13 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4826 */
+    /* parser/parser_prod.nit:4969 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -25408,65 +27323,68 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4827 */
+      /* parser/parser_prod.nit:4970 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4827);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4970);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4828 */
+      /* parser/parser_prod.nit:4971 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4828);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4971);
       }
-      /* ./parser//parser_prod.nit:4829 */
+      /* parser/parser_prod.nit:4972 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4831 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4831);
+      /* parser/parser_prod.nit:4974 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4974);
     }
-    /* ./parser//parser_prod.nit:4833 */
+    /* parser/parser_prod.nit:4976 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGtExpr___visit_all[] = "parser_prod::AGtExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AGtExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4837;
+  fra.me.line = 4980;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4839 */
+  /* parser/parser_prod.nit:4982 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4839);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4982);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4840 */
+  /* parser/parser_prod.nit:4983 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4840);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4983);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGeExpr___empty_init[] = "parser_prod::AGeExpr::empty_init";
 void parser___parser_prod___AGeExpr___empty_init(val_t p0, int* init_table){
   int itpos161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGeExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -25474,66 +27392,73 @@ void parser___parser_prod___AGeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos161]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4844;
+  fra.me.line = 4987;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos161] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGeExpr___init_ageexpr[] = "parser_prod::AGeExpr::init_ageexpr";
 void parser___parser_prod___AGeExpr___init_ageexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos162 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGeExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos162]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4846;
+  fra.me.line = 4989;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___init_ageexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4851 */
-  CALL_parser___parser_prod___AGeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4852 */
+  /* parser/parser_prod.nit:4989 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:4994 */
+  CALL_parser___parser_prod___AGeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:4995 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4852);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4995);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4853 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4996 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4853);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4996);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4854 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4997 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4854);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4997);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4855 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:4998 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4855);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4998);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos162] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGeExpr___replace_child[] = "parser_prod::AGeExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -25541,10 +27466,11 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4858;
+  fra.me.line = 5001;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25552,11 +27478,11 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4860 */
+  /* parser/parser_prod.nit:5003 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4860);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5003);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25566,13 +27492,13 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4861 */
+    /* parser/parser_prod.nit:5004 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -25581,32 +27507,32 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4862 */
+      /* parser/parser_prod.nit:5005 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4862);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5005);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4863 */
+      /* parser/parser_prod.nit:5006 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4863);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5006);
       }
-      /* ./parser//parser_prod.nit:4864 */
+      /* parser/parser_prod.nit:5007 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4866 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4866);
+      /* parser/parser_prod.nit:5009 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5009);
     }
-    /* ./parser//parser_prod.nit:4868 */
+    /* parser/parser_prod.nit:5011 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4870 */
+  /* parser/parser_prod.nit:5013 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4870);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5013);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25616,13 +27542,13 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4871 */
+    /* parser/parser_prod.nit:5014 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -25631,65 +27557,68 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4872 */
+      /* parser/parser_prod.nit:5015 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4872);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5015);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4873 */
+      /* parser/parser_prod.nit:5016 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4873);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5016);
       }
-      /* ./parser//parser_prod.nit:4874 */
+      /* parser/parser_prod.nit:5017 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4876 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4876);
+      /* parser/parser_prod.nit:5019 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5019);
     }
-    /* ./parser//parser_prod.nit:4878 */
+    /* parser/parser_prod.nit:5021 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGeExpr___visit_all[] = "parser_prod::AGeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AGeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4882;
+  fra.me.line = 5025;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4884 */
+  /* parser/parser_prod.nit:5027 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4884);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5027);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4885 */
+  /* parser/parser_prod.nit:5028 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4885);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5028);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGgExpr___empty_init[] = "parser_prod::AGgExpr::empty_init";
 void parser___parser_prod___AGgExpr___empty_init(val_t p0, int* init_table){
   int itpos163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGgExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -25697,66 +27626,73 @@ void parser___parser_prod___AGgExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos163]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4889;
+  fra.me.line = 5032;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos163] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGgExpr___init_aggexpr[] = "parser_prod::AGgExpr::init_aggexpr";
 void parser___parser_prod___AGgExpr___init_aggexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos164 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGgExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos164]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4891;
+  fra.me.line = 5034;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___init_aggexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4896 */
-  CALL_parser___parser_prod___AGgExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4897 */
+  /* parser/parser_prod.nit:5034 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5039 */
+  CALL_parser___parser_prod___AGgExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5040 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4897);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5040);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4898 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5041 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4898);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5041);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4899 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5042 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4899);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5042);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4900 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5043 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4900);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5043);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos164] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGgExpr___replace_child[] = "parser_prod::AGgExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -25764,10 +27700,11 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4903;
+  fra.me.line = 5046;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25775,11 +27712,11 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4905 */
+  /* parser/parser_prod.nit:5048 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4905);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5048);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25789,13 +27726,13 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4906 */
+    /* parser/parser_prod.nit:5049 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -25804,32 +27741,32 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4907 */
+      /* parser/parser_prod.nit:5050 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4907);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5050);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4908 */
+      /* parser/parser_prod.nit:5051 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4908);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5051);
       }
-      /* ./parser//parser_prod.nit:4909 */
+      /* parser/parser_prod.nit:5052 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4911 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4911);
+      /* parser/parser_prod.nit:5054 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5054);
     }
-    /* ./parser//parser_prod.nit:4913 */
+    /* parser/parser_prod.nit:5056 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4915 */
+  /* parser/parser_prod.nit:5058 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4915);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5058);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25839,13 +27776,13 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4916 */
+    /* parser/parser_prod.nit:5059 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -25854,65 +27791,68 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4917 */
+      /* parser/parser_prod.nit:5060 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4917);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5060);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4918 */
+      /* parser/parser_prod.nit:5061 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4918);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5061);
       }
-      /* ./parser//parser_prod.nit:4919 */
+      /* parser/parser_prod.nit:5062 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4921 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4921);
+      /* parser/parser_prod.nit:5064 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5064);
     }
-    /* ./parser//parser_prod.nit:4923 */
+    /* parser/parser_prod.nit:5066 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AGgExpr___visit_all[] = "parser_prod::AGgExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AGgExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4927;
+  fra.me.line = 5070;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4929 */
+  /* parser/parser_prod.nit:5072 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4929);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5072);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4930 */
+  /* parser/parser_prod.nit:5073 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4930);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5073);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIsaExpr___empty_init[] = "parser_prod::AIsaExpr::empty_init";
 void parser___parser_prod___AIsaExpr___empty_init(val_t p0, int* init_table){
   int itpos165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIsaExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -25920,66 +27860,73 @@ void parser___parser_prod___AIsaExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos165]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4934;
+  fra.me.line = 5077;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos165] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIsaExpr___init_aisaexpr[] = "parser_prod::AIsaExpr::init_aisaexpr";
 void parser___parser_prod___AIsaExpr___init_aisaexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos166 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIsaExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos166]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4936;
+  fra.me.line = 5079;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___init_aisaexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4941 */
-  CALL_parser___parser_prod___AIsaExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4942 */
+  /* parser/parser_prod.nit:5079 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5084 */
+  CALL_parser___parser_prod___AIsaExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5085 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4942);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5085);
   }
-  ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4943 */
+  ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5086 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4943);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5086);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4944 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5087 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4944);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5087);
   }
-  ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4945 */
+  ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5088 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4945);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5088);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos166] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIsaExpr___replace_child[] = "parser_prod::AIsaExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -25987,10 +27934,11 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4948;
+  fra.me.line = 5091;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25998,11 +27946,11 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4950 */
+  /* parser/parser_prod.nit:5093 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4950);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5093);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26012,13 +27960,13 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4951 */
+    /* parser/parser_prod.nit:5094 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26027,32 +27975,32 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4952 */
+      /* parser/parser_prod.nit:5095 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4952);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5095);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4953 */
+      /* parser/parser_prod.nit:5096 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4953);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5096);
       }
-      /* ./parser//parser_prod.nit:4954 */
+      /* parser/parser_prod.nit:5097 */
       ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4956 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4956);
+      /* parser/parser_prod.nit:5099 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5099);
     }
-    /* ./parser//parser_prod.nit:4958 */
+    /* parser/parser_prod.nit:5101 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4960 */
+  /* parser/parser_prod.nit:5103 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 4960);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5103);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26062,13 +28010,13 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4961 */
+    /* parser/parser_prod.nit:5104 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26077,65 +28025,68 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4962 */
+      /* parser/parser_prod.nit:5105 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4962);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5105);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4963 */
+      /* parser/parser_prod.nit:5106 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4963);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5106);
       }
-      /* ./parser//parser_prod.nit:4964 */
+      /* parser/parser_prod.nit:5107 */
       ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4966 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4966);
+      /* parser/parser_prod.nit:5109 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5109);
     }
-    /* ./parser//parser_prod.nit:4968 */
+    /* parser/parser_prod.nit:5111 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIsaExpr___visit_all[] = "parser_prod::AIsaExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AIsaExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4972;
+  fra.me.line = 5115;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4974 */
+  /* parser/parser_prod.nit:5117 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4974);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5117);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4975 */
+  /* parser/parser_prod.nit:5118 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 4975);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5118);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusExpr___empty_init[] = "parser_prod::APlusExpr::empty_init";
 void parser___parser_prod___APlusExpr___empty_init(val_t p0, int* init_table){
   int itpos167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -26143,66 +28094,73 @@ void parser___parser_prod___APlusExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos167]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4979;
+  fra.me.line = 5122;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos167] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusExpr___init_aplusexpr[] = "parser_prod::APlusExpr::init_aplusexpr";
 void parser___parser_prod___APlusExpr___init_aplusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos168 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos168]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4981;
+  fra.me.line = 5124;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___init_aplusexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4986 */
-  CALL_parser___parser_prod___APlusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4987 */
+  /* parser/parser_prod.nit:5124 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5129 */
+  CALL_parser___parser_prod___APlusExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5130 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4987);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5130);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4988 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5131 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4988);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5131);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4989 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5132 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4989);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5132);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4990 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5133 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4990);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5133);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos168] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusExpr___replace_child[] = "parser_prod::APlusExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -26210,10 +28168,11 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4993;
+  fra.me.line = 5136;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26221,11 +28180,11 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4995 */
+  /* parser/parser_prod.nit:5138 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4995);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5138);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26235,13 +28194,13 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4996 */
+    /* parser/parser_prod.nit:5139 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26250,32 +28209,32 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:4997 */
+      /* parser/parser_prod.nit:5140 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4997);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5140);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4998 */
+      /* parser/parser_prod.nit:5141 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4998);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5141);
       }
-      /* ./parser//parser_prod.nit:4999 */
+      /* parser/parser_prod.nit:5142 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5001 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5001);
+      /* parser/parser_prod.nit:5144 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5144);
     }
-    /* ./parser//parser_prod.nit:5003 */
+    /* parser/parser_prod.nit:5146 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5005 */
+  /* parser/parser_prod.nit:5148 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5005);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5148);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26285,13 +28244,13 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5006 */
+    /* parser/parser_prod.nit:5149 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26300,65 +28259,68 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5007 */
+      /* parser/parser_prod.nit:5150 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5007);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5150);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5008 */
+      /* parser/parser_prod.nit:5151 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5008);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5151);
       }
-      /* ./parser//parser_prod.nit:5009 */
+      /* parser/parser_prod.nit:5152 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5011 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5011);
+      /* parser/parser_prod.nit:5154 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5154);
     }
-    /* ./parser//parser_prod.nit:5013 */
+    /* parser/parser_prod.nit:5156 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusExpr___visit_all[] = "parser_prod::APlusExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___APlusExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5017;
+  fra.me.line = 5160;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5019 */
+  /* parser/parser_prod.nit:5162 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5019);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5162);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5020 */
+  /* parser/parser_prod.nit:5163 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5020);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5163);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusExpr___empty_init[] = "parser_prod::AMinusExpr::empty_init";
 void parser___parser_prod___AMinusExpr___empty_init(val_t p0, int* init_table){
   int itpos169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -26366,66 +28328,73 @@ void parser___parser_prod___AMinusExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos169]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5024;
+  fra.me.line = 5167;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos169] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusExpr___init_aminusexpr[] = "parser_prod::AMinusExpr::init_aminusexpr";
 void parser___parser_prod___AMinusExpr___init_aminusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos170 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos170]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5026;
+  fra.me.line = 5169;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___init_aminusexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5031 */
-  CALL_parser___parser_prod___AMinusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5032 */
+  /* parser/parser_prod.nit:5169 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5174 */
+  CALL_parser___parser_prod___AMinusExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5175 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5032);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5175);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5033 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5176 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5033);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5176);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5034 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5177 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5034);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5177);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5035 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5178 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5035);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5178);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos170] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusExpr___replace_child[] = "parser_prod::AMinusExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -26433,10 +28402,11 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5038;
+  fra.me.line = 5181;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26444,11 +28414,11 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5040 */
+  /* parser/parser_prod.nit:5183 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5040);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5183);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26458,13 +28428,13 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5041 */
+    /* parser/parser_prod.nit:5184 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26473,32 +28443,32 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5042 */
+      /* parser/parser_prod.nit:5185 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5042);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5185);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5043 */
+      /* parser/parser_prod.nit:5186 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5043);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5186);
       }
-      /* ./parser//parser_prod.nit:5044 */
+      /* parser/parser_prod.nit:5187 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5046 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5046);
+      /* parser/parser_prod.nit:5189 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5189);
     }
-    /* ./parser//parser_prod.nit:5048 */
+    /* parser/parser_prod.nit:5191 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5050 */
+  /* parser/parser_prod.nit:5193 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5050);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5193);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26508,13 +28478,13 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5051 */
+    /* parser/parser_prod.nit:5194 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26523,65 +28493,68 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5052 */
+      /* parser/parser_prod.nit:5195 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5052);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5195);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5053 */
+      /* parser/parser_prod.nit:5196 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5053);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5196);
       }
-      /* ./parser//parser_prod.nit:5054 */
+      /* parser/parser_prod.nit:5197 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5056 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5056);
+      /* parser/parser_prod.nit:5199 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5199);
     }
-    /* ./parser//parser_prod.nit:5058 */
+    /* parser/parser_prod.nit:5201 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusExpr___visit_all[] = "parser_prod::AMinusExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AMinusExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5062;
+  fra.me.line = 5205;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5064 */
+  /* parser/parser_prod.nit:5207 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5064);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5207);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5065 */
+  /* parser/parser_prod.nit:5208 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5065);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5208);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarshipExpr___empty_init[] = "parser_prod::AStarshipExpr::empty_init";
 void parser___parser_prod___AStarshipExpr___empty_init(val_t p0, int* init_table){
   int itpos171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarshipExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -26589,66 +28562,73 @@ void parser___parser_prod___AStarshipExpr___empty_init(val_t p0, int* init_table
   if (init_table[itpos171]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5069;
+  fra.me.line = 5212;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos171] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarshipExpr___init_astarshipexpr[] = "parser_prod::AStarshipExpr::init_astarshipexpr";
 void parser___parser_prod___AStarshipExpr___init_astarshipexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos172 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarshipExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos172]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5071;
+  fra.me.line = 5214;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___init_astarshipexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5076 */
-  CALL_parser___parser_prod___AStarshipExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5077 */
+  /* parser/parser_prod.nit:5214 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5219 */
+  CALL_parser___parser_prod___AStarshipExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5220 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5077);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5220);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5078 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5221 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5078);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5221);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5079 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5222 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5079);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5222);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5080 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5223 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5080);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5223);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos172] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarshipExpr___replace_child[] = "parser_prod::AStarshipExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -26656,10 +28636,11 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5083;
+  fra.me.line = 5226;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26667,11 +28648,11 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5085 */
+  /* parser/parser_prod.nit:5228 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5085);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5228);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26681,13 +28662,13 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5086 */
+    /* parser/parser_prod.nit:5229 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26696,32 +28677,32 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5087 */
+      /* parser/parser_prod.nit:5230 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5087);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5230);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5088 */
+      /* parser/parser_prod.nit:5231 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5088);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5231);
       }
-      /* ./parser//parser_prod.nit:5089 */
+      /* parser/parser_prod.nit:5232 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5091 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5091);
+      /* parser/parser_prod.nit:5234 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5234);
     }
-    /* ./parser//parser_prod.nit:5093 */
+    /* parser/parser_prod.nit:5236 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5095 */
+  /* parser/parser_prod.nit:5238 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5095);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5238);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26731,13 +28712,13 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5096 */
+    /* parser/parser_prod.nit:5239 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26746,65 +28727,68 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5097 */
+      /* parser/parser_prod.nit:5240 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5097);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5240);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5098 */
+      /* parser/parser_prod.nit:5241 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5098);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5241);
       }
-      /* ./parser//parser_prod.nit:5099 */
+      /* parser/parser_prod.nit:5242 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5101 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5101);
+      /* parser/parser_prod.nit:5244 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5244);
     }
-    /* ./parser//parser_prod.nit:5103 */
+    /* parser/parser_prod.nit:5246 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarshipExpr___visit_all[] = "parser_prod::AStarshipExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStarshipExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5107;
+  fra.me.line = 5250;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5109 */
+  /* parser/parser_prod.nit:5252 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5109);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5252);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5110 */
+  /* parser/parser_prod.nit:5253 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5110);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5253);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarExpr___empty_init[] = "parser_prod::AStarExpr::empty_init";
 void parser___parser_prod___AStarExpr___empty_init(val_t p0, int* init_table){
   int itpos173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -26812,66 +28796,73 @@ void parser___parser_prod___AStarExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos173]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5114;
+  fra.me.line = 5257;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos173] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarExpr___init_astarexpr[] = "parser_prod::AStarExpr::init_astarexpr";
 void parser___parser_prod___AStarExpr___init_astarexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos174 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos174]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5116;
+  fra.me.line = 5259;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___init_astarexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5121 */
-  CALL_parser___parser_prod___AStarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5122 */
+  /* parser/parser_prod.nit:5259 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5264 */
+  CALL_parser___parser_prod___AStarExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5265 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5122);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5265);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5123 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5266 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5123);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5266);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5124 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5267 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5124);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5267);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5125 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5268 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5125);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5268);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos174] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarExpr___replace_child[] = "parser_prod::AStarExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -26879,10 +28870,11 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5128;
+  fra.me.line = 5271;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26890,11 +28882,11 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5130 */
+  /* parser/parser_prod.nit:5273 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5130);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5273);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26904,13 +28896,13 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5131 */
+    /* parser/parser_prod.nit:5274 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26919,32 +28911,32 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5132 */
+      /* parser/parser_prod.nit:5275 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5132);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5275);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5133 */
+      /* parser/parser_prod.nit:5276 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5133);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5276);
       }
-      /* ./parser//parser_prod.nit:5134 */
+      /* parser/parser_prod.nit:5277 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5136 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5136);
+      /* parser/parser_prod.nit:5279 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5279);
     }
-    /* ./parser//parser_prod.nit:5138 */
+    /* parser/parser_prod.nit:5281 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5140 */
+  /* parser/parser_prod.nit:5283 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5140);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5283);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26954,13 +28946,13 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5141 */
+    /* parser/parser_prod.nit:5284 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -26969,65 +28961,68 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5142 */
+      /* parser/parser_prod.nit:5285 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5142);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5285);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5143 */
+      /* parser/parser_prod.nit:5286 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5143);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5286);
       }
-      /* ./parser//parser_prod.nit:5144 */
+      /* parser/parser_prod.nit:5287 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5146 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5146);
+      /* parser/parser_prod.nit:5289 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5289);
     }
-    /* ./parser//parser_prod.nit:5148 */
+    /* parser/parser_prod.nit:5291 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStarExpr___visit_all[] = "parser_prod::AStarExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStarExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5152;
+  fra.me.line = 5295;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5154 */
+  /* parser/parser_prod.nit:5297 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5154);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5297);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5155 */
+  /* parser/parser_prod.nit:5298 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5155);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5298);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASlashExpr___empty_init[] = "parser_prod::ASlashExpr::empty_init";
 void parser___parser_prod___ASlashExpr___empty_init(val_t p0, int* init_table){
   int itpos175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASlashExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -27035,66 +29030,73 @@ void parser___parser_prod___ASlashExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos175]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5159;
+  fra.me.line = 5302;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos175] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASlashExpr___init_aslashexpr[] = "parser_prod::ASlashExpr::init_aslashexpr";
 void parser___parser_prod___ASlashExpr___init_aslashexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos176 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASlashExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos176]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5161;
+  fra.me.line = 5304;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___init_aslashexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5166 */
-  CALL_parser___parser_prod___ASlashExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5167 */
+  /* parser/parser_prod.nit:5304 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5309 */
+  CALL_parser___parser_prod___ASlashExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5310 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5167);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5310);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5168 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5311 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5168);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5311);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5169 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5312 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5169);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5312);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5170 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5313 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5170);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5313);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos176] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASlashExpr___replace_child[] = "parser_prod::ASlashExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -27102,10 +29104,11 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5173;
+  fra.me.line = 5316;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27113,11 +29116,11 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5175 */
+  /* parser/parser_prod.nit:5318 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5175);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5318);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27127,13 +29130,13 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5176 */
+    /* parser/parser_prod.nit:5319 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -27142,32 +29145,32 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5177 */
+      /* parser/parser_prod.nit:5320 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5177);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5320);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5178 */
+      /* parser/parser_prod.nit:5321 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5178);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5321);
       }
-      /* ./parser//parser_prod.nit:5179 */
+      /* parser/parser_prod.nit:5322 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5181 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5181);
+      /* parser/parser_prod.nit:5324 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5324);
     }
-    /* ./parser//parser_prod.nit:5183 */
+    /* parser/parser_prod.nit:5326 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5185 */
+  /* parser/parser_prod.nit:5328 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5185);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5328);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27177,13 +29180,13 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5186 */
+    /* parser/parser_prod.nit:5329 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -27192,65 +29195,68 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5187 */
+      /* parser/parser_prod.nit:5330 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5187);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5330);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5188 */
+      /* parser/parser_prod.nit:5331 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5188);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5331);
       }
-      /* ./parser//parser_prod.nit:5189 */
+      /* parser/parser_prod.nit:5332 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5191 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5191);
+      /* parser/parser_prod.nit:5334 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5334);
     }
-    /* ./parser//parser_prod.nit:5193 */
+    /* parser/parser_prod.nit:5336 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASlashExpr___visit_all[] = "parser_prod::ASlashExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASlashExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5197;
+  fra.me.line = 5340;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5199 */
+  /* parser/parser_prod.nit:5342 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5199);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5342);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5200 */
+  /* parser/parser_prod.nit:5343 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5200);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5343);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APercentExpr___empty_init[] = "parser_prod::APercentExpr::empty_init";
 void parser___parser_prod___APercentExpr___empty_init(val_t p0, int* init_table){
   int itpos177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APercentExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -27258,66 +29264,73 @@ void parser___parser_prod___APercentExpr___empty_init(val_t p0, int* init_table)
   if (init_table[itpos177]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5204;
+  fra.me.line = 5347;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos177] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APercentExpr___init_apercentexpr[] = "parser_prod::APercentExpr::init_apercentexpr";
 void parser___parser_prod___APercentExpr___init_apercentexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos178 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APercentExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos178]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5206;
+  fra.me.line = 5349;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___init_apercentexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5211 */
-  CALL_parser___parser_prod___APercentExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5212 */
+  /* parser/parser_prod.nit:5349 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5354 */
+  CALL_parser___parser_prod___APercentExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5355 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5212);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5355);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5213 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5356 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5213);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5356);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5214 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5357 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5214);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5357);
   }
-  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5215 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5358 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5215);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5358);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos178] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APercentExpr___replace_child[] = "parser_prod::APercentExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -27325,10 +29338,11 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5218;
+  fra.me.line = 5361;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27336,11 +29350,11 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5220 */
+  /* parser/parser_prod.nit:5363 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5220);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5363);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27350,13 +29364,13 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5221 */
+    /* parser/parser_prod.nit:5364 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -27365,32 +29379,32 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5222 */
+      /* parser/parser_prod.nit:5365 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5222);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5365);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5223 */
+      /* parser/parser_prod.nit:5366 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5223);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5366);
       }
-      /* ./parser//parser_prod.nit:5224 */
+      /* parser/parser_prod.nit:5367 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5226 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5226);
+      /* parser/parser_prod.nit:5369 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5369);
     }
-    /* ./parser//parser_prod.nit:5228 */
+    /* parser/parser_prod.nit:5371 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5230 */
+  /* parser/parser_prod.nit:5373 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5230);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5373);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27400,13 +29414,13 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5231 */
+    /* parser/parser_prod.nit:5374 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -27415,65 +29429,68 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5232 */
+      /* parser/parser_prod.nit:5375 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5232);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5375);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5233 */
+      /* parser/parser_prod.nit:5376 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5233);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5376);
       }
-      /* ./parser//parser_prod.nit:5234 */
+      /* parser/parser_prod.nit:5377 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5236 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5236);
+      /* parser/parser_prod.nit:5379 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5379);
     }
-    /* ./parser//parser_prod.nit:5238 */
+    /* parser/parser_prod.nit:5381 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APercentExpr___visit_all[] = "parser_prod::APercentExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___APercentExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5242;
+  fra.me.line = 5385;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5244 */
+  /* parser/parser_prod.nit:5387 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5244);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5387);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5245 */
+  /* parser/parser_prod.nit:5388 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5245);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5388);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AUminusExpr___empty_init[] = "parser_prod::AUminusExpr::empty_init";
 void parser___parser_prod___AUminusExpr___empty_init(val_t p0, int* init_table){
   int itpos179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AUminusExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -27481,66 +29498,73 @@ void parser___parser_prod___AUminusExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos179]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5249;
+  fra.me.line = 5392;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos179] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AUminusExpr___init_auminusexpr[] = "parser_prod::AUminusExpr::init_auminusexpr";
 void parser___parser_prod___AUminusExpr___init_auminusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos180 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AUminusExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos180]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5251;
+  fra.me.line = 5394;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___init_auminusexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5256 */
-  CALL_parser___parser_prod___AUminusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5257 */
+  /* parser/parser_prod.nit:5394 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5399 */
+  CALL_parser___parser_prod___AUminusExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5400 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5257);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5400);
   }
-  ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5258 */
+  ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5401 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5258);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5401);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5259 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5402 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5259);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5402);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5260 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5403 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5260);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5403);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos180] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AUminusExpr___replace_child[] = "parser_prod::AUminusExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -27548,10 +29572,11 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5263;
+  fra.me.line = 5406;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27559,11 +29584,11 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5265 */
+  /* parser/parser_prod.nit:5408 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 5265);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 5408);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27573,13 +29598,13 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5266 */
+    /* parser/parser_prod.nit:5409 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -27588,32 +29613,32 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5267 */
+      /* parser/parser_prod.nit:5410 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5267);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5410);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5268 */
+      /* parser/parser_prod.nit:5411 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast TMinus*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5268);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5411);
       }
-      /* ./parser//parser_prod.nit:5269 */
+      /* parser/parser_prod.nit:5412 */
       ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5271 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5271);
+      /* parser/parser_prod.nit:5414 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5414);
     }
-    /* ./parser//parser_prod.nit:5273 */
+    /* parser/parser_prod.nit:5416 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5275 */
+  /* parser/parser_prod.nit:5418 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5275);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5418);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27623,13 +29648,13 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5276 */
+    /* parser/parser_prod.nit:5419 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -27638,65 +29663,68 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5277 */
+      /* parser/parser_prod.nit:5420 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5277);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5420);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5278 */
+      /* parser/parser_prod.nit:5421 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5278);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5421);
       }
-      /* ./parser//parser_prod.nit:5279 */
+      /* parser/parser_prod.nit:5422 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5281 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5281);
+      /* parser/parser_prod.nit:5424 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5424);
     }
-    /* ./parser//parser_prod.nit:5283 */
+    /* parser/parser_prod.nit:5426 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AUminusExpr___visit_all[] = "parser_prod::AUminusExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AUminusExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5287;
+  fra.me.line = 5430;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5289 */
+  /* parser/parser_prod.nit:5432 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 5289);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 5432);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5290 */
+  /* parser/parser_prod.nit:5433 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5290);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5433);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANewExpr___empty_init[] = "parser_prod::ANewExpr::empty_init";
 void parser___parser_prod___ANewExpr___empty_init(val_t p0, int* init_table){
   int itpos181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANewExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -27704,76 +29732,82 @@ void parser___parser_prod___ANewExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos181]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5294;
+  fra.me.line = 5437;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos181] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANewExpr___init_anewexpr[] = "parser_prod::ANewExpr::init_anewexpr";
 void parser___parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos182 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANewExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos182]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5296;
+  fra.me.line = 5439;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___init_anewexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:5303 */
-  CALL_parser___parser_prod___ANewExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5304 */
+  /* parser/parser_prod.nit:5439 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5446 */
+  CALL_parser___parser_prod___ANewExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:5447 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5304);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5447);
   }
-  ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5305 */
+  ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5448 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5305);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5448);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5306 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5449 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5306);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5449);
   }
-  ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5307 */
+  ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5450 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5307);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5450);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5308 */
-  ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:5309 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5451 */
+  ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:5452 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
@@ -27782,69 +29816,43 @@ void parser___parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5310 */
+    /* parser/parser_prod.nit:5453 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5310);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5453);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  }
+  /* parser/parser_prod.nit:5455 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5455);
   }
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[4])(fra.me.REG[4], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ANewExpr___init_anewexpr_1));
+  ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:5456 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5456);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
   init_table[itpos182] = 1;
   return;
 }
-  void OC_parser___parser_prod___ANewExpr___init_anewexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:5312 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___init_anewexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5313 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5313);
-    }
-    /* ./parser//parser_prod.nit:5314 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5314);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ANewExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5315 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ANewExpr___replace_child[] = "parser_prod::ANewExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5319;
+  fra.me.line = 5459;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27852,11 +29860,11 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5321 */
+  /* parser/parser_prod.nit:5461 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 5321);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 5461);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27866,13 +29874,13 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5322 */
+    /* parser/parser_prod.nit:5462 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -27881,32 +29889,32 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5323 */
+      /* parser/parser_prod.nit:5463 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5323);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5463);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5324 */
+      /* parser/parser_prod.nit:5464 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast TKwnew*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5324);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5464);
       }
-      /* ./parser//parser_prod.nit:5325 */
+      /* parser/parser_prod.nit:5465 */
       ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5327 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5327);
+      /* parser/parser_prod.nit:5467 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5467);
     }
-    /* ./parser//parser_prod.nit:5329 */
+    /* parser/parser_prod.nit:5469 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5331 */
+  /* parser/parser_prod.nit:5471 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5331);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5471);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27916,13 +29924,13 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5332 */
+    /* parser/parser_prod.nit:5472 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -27931,35 +29939,35 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5333 */
+      /* parser/parser_prod.nit:5473 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5333);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5473);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5334 */
+      /* parser/parser_prod.nit:5474 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5334);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5474);
       }
-      /* ./parser//parser_prod.nit:5335 */
+      /* parser/parser_prod.nit:5475 */
       ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5337 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5337);
+      /* parser/parser_prod.nit:5477 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5477);
     }
-    /* ./parser//parser_prod.nit:5339 */
+    /* parser/parser_prod.nit:5479 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5341 */
+  /* parser/parser_prod.nit:5481 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -27967,13 +29975,13 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5342 */
+    /* parser/parser_prod.nit:5482 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -27982,217 +29990,155 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5343 */
+      /* parser/parser_prod.nit:5483 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5343);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5483);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5344 */
+      /* parser/parser_prod.nit:5484 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5344);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5484);
       }
-      /* ./parser//parser_prod.nit:5345 */
+      /* parser/parser_prod.nit:5485 */
       ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5347 */
+      /* parser/parser_prod.nit:5487 */
       ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5349 */
+    /* parser/parser_prod.nit:5489 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5351 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:5491 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5351);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5491);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5351 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5352 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:5492 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5352);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:5493 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5493);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5353 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:5354 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5354);
-          }
-          /* ./parser//parser_prod.nit:5355 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5355);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5356 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5356);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:5358 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5358);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:5360 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5494 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5494);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:5495 */
+      ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:5497 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5497);
     }
+    /* parser/parser_prod.nit:5499 */
+    goto label1;
   }
-  label2: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANewExpr___visit_all[] = "parser_prod::ANewExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ANewExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5365;
+  fra.me.line = 5503;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5367 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:5503 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5505 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 5367);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 5505);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5368 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5506 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5368);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5506);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5369 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5507 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5370 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
+    /* parser/parser_prod.nit:5508 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5370);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5508);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:5372 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:5510 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5372);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5510);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ANewExpr___visit_all_1));
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-  void OC_parser___parser_prod___ANewExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5373 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___AAttrExpr___empty_init[] = "parser_prod::AAttrExpr::empty_init";
 void parser___parser_prod___AAttrExpr___empty_init(val_t p0, int* init_table){
   int itpos183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -28200,66 +30146,73 @@ void parser___parser_prod___AAttrExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos183]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5378;
+  fra.me.line = 5514;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos183] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrExpr___init_aattrexpr[] = "parser_prod::AAttrExpr::init_aattrexpr";
 void parser___parser_prod___AAttrExpr___init_aattrexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos184 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos184]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5380;
+  fra.me.line = 5516;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___init_aattrexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5385 */
-  CALL_parser___parser_prod___AAttrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5386 */
+  /* parser/parser_prod.nit:5516 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5521 */
+  CALL_parser___parser_prod___AAttrExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:5522 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5386);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5522);
   }
-  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5387 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5523 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5387);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5523);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5388 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5524 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5388);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5524);
   }
-  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5389 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5525 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5389);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5525);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos184] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrExpr___replace_child[] = "parser_prod::AAttrExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -28267,10 +30220,11 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5392;
+  fra.me.line = 5528;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28278,11 +30232,11 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5394 */
+  /* parser/parser_prod.nit:5530 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5394);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5530);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28292,13 +30246,13 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5395 */
+    /* parser/parser_prod.nit:5531 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -28307,32 +30261,32 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5396 */
+      /* parser/parser_prod.nit:5532 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5396);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5532);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5397 */
+      /* parser/parser_prod.nit:5533 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5397);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5533);
       }
-      /* ./parser//parser_prod.nit:5398 */
+      /* parser/parser_prod.nit:5534 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5400 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5400);
+      /* parser/parser_prod.nit:5536 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5536);
     }
-    /* ./parser//parser_prod.nit:5402 */
+    /* parser/parser_prod.nit:5538 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5404 */
+  /* parser/parser_prod.nit:5540 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5404);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5540);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28342,13 +30296,13 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5405 */
+    /* parser/parser_prod.nit:5541 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -28357,65 +30311,68 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5406 */
+      /* parser/parser_prod.nit:5542 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5406);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5542);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5407 */
+      /* parser/parser_prod.nit:5543 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5407);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5543);
       }
-      /* ./parser//parser_prod.nit:5408 */
+      /* parser/parser_prod.nit:5544 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5410 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5410);
+      /* parser/parser_prod.nit:5546 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5546);
     }
-    /* ./parser//parser_prod.nit:5412 */
+    /* parser/parser_prod.nit:5548 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrExpr___visit_all[] = "parser_prod::AAttrExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AAttrExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5416;
+  fra.me.line = 5552;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5418 */
+  /* parser/parser_prod.nit:5554 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5418);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5554);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5419 */
+  /* parser/parser_prod.nit:5555 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5419);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5555);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrAssignExpr___empty_init[] = "parser_prod::AAttrAssignExpr::empty_init";
 void parser___parser_prod___AAttrAssignExpr___empty_init(val_t p0, int* init_table){
   int itpos185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -28423,96 +30380,103 @@ void parser___parser_prod___AAttrAssignExpr___empty_init(val_t p0, int* init_tab
   if (init_table[itpos185]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5423;
+  fra.me.line = 5559;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos185] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr[] = "parser_prod::AAttrAssignExpr::init_aattrassignexpr";
 void parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos186 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrAssignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos186]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5425;
+  fra.me.line = 5561;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:5432 */
-  CALL_parser___parser_prod___AAttrAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5433 */
+  /* parser/parser_prod.nit:5561 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5568 */
+  CALL_parser___parser_prod___AAttrAssignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:5569 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5433);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5569);
   }
-  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5434 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5570 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5434);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5570);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5435 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5571 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5435);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5571);
   }
-  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5436 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5572 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5436);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5572);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5437 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5573 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5437);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5573);
   }
-  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:5438 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:5574 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5438);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5574);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5439 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5575 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5439);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5575);
   }
-  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5440 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:5576 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5440);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5576);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
   init_table[itpos186] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrAssignExpr___replace_child[] = "parser_prod::AAttrAssignExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -28520,10 +30484,11 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5443;
+  fra.me.line = 5579;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28531,11 +30496,11 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5445 */
+  /* parser/parser_prod.nit:5581 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5445);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5581);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28545,13 +30510,13 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5446 */
+    /* parser/parser_prod.nit:5582 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -28560,32 +30525,32 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5447 */
+      /* parser/parser_prod.nit:5583 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5447);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5583);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5448 */
+      /* parser/parser_prod.nit:5584 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5448);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5584);
       }
-      /* ./parser//parser_prod.nit:5449 */
+      /* parser/parser_prod.nit:5585 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5451 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5451);
+      /* parser/parser_prod.nit:5587 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5587);
     }
-    /* ./parser//parser_prod.nit:5453 */
+    /* parser/parser_prod.nit:5589 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5455 */
+  /* parser/parser_prod.nit:5591 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5455);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5591);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28595,13 +30560,13 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5456 */
+    /* parser/parser_prod.nit:5592 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -28610,32 +30575,32 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5457 */
+      /* parser/parser_prod.nit:5593 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5457);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5593);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5458 */
+      /* parser/parser_prod.nit:5594 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5458);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5594);
       }
-      /* ./parser//parser_prod.nit:5459 */
+      /* parser/parser_prod.nit:5595 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5461 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5461);
+      /* parser/parser_prod.nit:5597 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5597);
     }
-    /* ./parser//parser_prod.nit:5463 */
+    /* parser/parser_prod.nit:5599 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5465 */
+  /* parser/parser_prod.nit:5601 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5465);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5601);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28645,13 +30610,13 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5466 */
+    /* parser/parser_prod.nit:5602 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -28660,32 +30625,32 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5467 */
+      /* parser/parser_prod.nit:5603 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5467);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5603);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5468 */
+      /* parser/parser_prod.nit:5604 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5468);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5604);
       }
-      /* ./parser//parser_prod.nit:5469 */
+      /* parser/parser_prod.nit:5605 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5471 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5471);
+      /* parser/parser_prod.nit:5607 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5607);
     }
-    /* ./parser//parser_prod.nit:5473 */
+    /* parser/parser_prod.nit:5609 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5475 */
+  /* parser/parser_prod.nit:5611 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5475);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5611);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28695,13 +30660,13 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5476 */
+    /* parser/parser_prod.nit:5612 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -28710,81 +30675,84 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5477 */
+      /* parser/parser_prod.nit:5613 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5477);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5613);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5478 */
+      /* parser/parser_prod.nit:5614 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5478);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5614);
       }
-      /* ./parser//parser_prod.nit:5479 */
+      /* parser/parser_prod.nit:5615 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5481 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5481);
+      /* parser/parser_prod.nit:5617 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5617);
     }
-    /* ./parser//parser_prod.nit:5483 */
+    /* parser/parser_prod.nit:5619 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrAssignExpr___visit_all[] = "parser_prod::AAttrAssignExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AAttrAssignExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5487;
+  fra.me.line = 5623;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5489 */
+  /* parser/parser_prod.nit:5625 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5489);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5625);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5490 */
+  /* parser/parser_prod.nit:5626 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5490);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5626);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5491 */
+  /* parser/parser_prod.nit:5627 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5491);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5627);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5492 */
+  /* parser/parser_prod.nit:5628 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5492);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5628);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrReassignExpr___empty_init[] = "parser_prod::AAttrReassignExpr::empty_init";
 void parser___parser_prod___AAttrReassignExpr___empty_init(val_t p0, int* init_table){
   int itpos187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -28792,96 +30760,103 @@ void parser___parser_prod___AAttrReassignExpr___empty_init(val_t p0, int* init_t
   if (init_table[itpos187]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5496;
+  fra.me.line = 5632;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos187] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr[] = "parser_prod::AAttrReassignExpr::init_aattrreassignexpr";
 void parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos188 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrReassignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos188]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5498;
+  fra.me.line = 5634;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:5505 */
-  CALL_parser___parser_prod___AAttrReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5506 */
+  /* parser/parser_prod.nit:5634 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5641 */
+  CALL_parser___parser_prod___AAttrReassignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:5642 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5506);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5642);
   }
-  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5507 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5643 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5507);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5643);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5508 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5644 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5508);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5644);
   }
-  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5509 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5645 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5509);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5645);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5510 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5646 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5510);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5646);
   }
-  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:5511 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:5647 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5511);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5647);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5512 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5648 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5512);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5648);
   }
-  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5513 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:5649 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5513);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5649);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
   init_table[itpos188] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrReassignExpr___replace_child[] = "parser_prod::AAttrReassignExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -28889,10 +30864,11 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5516;
+  fra.me.line = 5652;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28900,11 +30876,11 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5518 */
+  /* parser/parser_prod.nit:5654 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5518);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5654);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28914,13 +30890,13 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5519 */
+    /* parser/parser_prod.nit:5655 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -28929,32 +30905,32 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5520 */
+      /* parser/parser_prod.nit:5656 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5520);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5656);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5521 */
+      /* parser/parser_prod.nit:5657 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5521);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5657);
       }
-      /* ./parser//parser_prod.nit:5522 */
+      /* parser/parser_prod.nit:5658 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5524 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5524);
+      /* parser/parser_prod.nit:5660 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5660);
     }
-    /* ./parser//parser_prod.nit:5526 */
+    /* parser/parser_prod.nit:5662 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5528 */
+  /* parser/parser_prod.nit:5664 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5528);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5664);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28964,13 +30940,13 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5529 */
+    /* parser/parser_prod.nit:5665 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -28979,32 +30955,32 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5530 */
+      /* parser/parser_prod.nit:5666 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5530);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5666);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5531 */
+      /* parser/parser_prod.nit:5667 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5531);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5667);
       }
-      /* ./parser//parser_prod.nit:5532 */
+      /* parser/parser_prod.nit:5668 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5534 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5534);
+      /* parser/parser_prod.nit:5670 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5670);
     }
-    /* ./parser//parser_prod.nit:5536 */
+    /* parser/parser_prod.nit:5672 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5538 */
+  /* parser/parser_prod.nit:5674 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5538);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5674);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29014,13 +30990,13 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5539 */
+    /* parser/parser_prod.nit:5675 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -29029,32 +31005,32 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5540 */
+      /* parser/parser_prod.nit:5676 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5540);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5676);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5541 */
+      /* parser/parser_prod.nit:5677 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5541);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5677);
       }
-      /* ./parser//parser_prod.nit:5542 */
+      /* parser/parser_prod.nit:5678 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5544 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5544);
+      /* parser/parser_prod.nit:5680 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5680);
     }
-    /* ./parser//parser_prod.nit:5546 */
+    /* parser/parser_prod.nit:5682 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5548 */
+  /* parser/parser_prod.nit:5684 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5548);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5684);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29064,13 +31040,13 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5549 */
+    /* parser/parser_prod.nit:5685 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -29079,81 +31055,84 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5550 */
+      /* parser/parser_prod.nit:5686 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5550);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5686);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5551 */
+      /* parser/parser_prod.nit:5687 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5551);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5687);
       }
-      /* ./parser//parser_prod.nit:5552 */
+      /* parser/parser_prod.nit:5688 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5554 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5554);
+      /* parser/parser_prod.nit:5690 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5690);
     }
-    /* ./parser//parser_prod.nit:5556 */
+    /* parser/parser_prod.nit:5692 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAttrReassignExpr___visit_all[] = "parser_prod::AAttrReassignExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AAttrReassignExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5560;
+  fra.me.line = 5696;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5562 */
+  /* parser/parser_prod.nit:5698 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5562);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5698);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5563 */
+  /* parser/parser_prod.nit:5699 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5563);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5699);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5564 */
+  /* parser/parser_prod.nit:5700 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5564);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5700);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5565 */
+  /* parser/parser_prod.nit:5701 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5565);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5701);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACallExpr___empty_init[] = "parser_prod::ACallExpr::empty_init";
 void parser___parser_prod___ACallExpr___empty_init(val_t p0, int* init_table){
   int itpos189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -29161,68 +31140,86 @@ void parser___parser_prod___ACallExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos189]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5569;
+  fra.me.line = 5705;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos189] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACallExpr___init_acallexpr[] = "parser_prod::ACallExpr::init_acallexpr";
 void parser___parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos190]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5571;
+  fra.me.line = 5707;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___init_acallexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:5578 */
-  CALL_parser___parser_prod___ACallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5579 */
+  /* parser/parser_prod.nit:5707 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5714 */
+  CALL_parser___parser_prod___ACallExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:5715 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5579);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5715);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5580 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5716 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5580);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5716);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5581 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5717 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5581);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5717);
   }
-  ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5582 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5718 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5582);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5718);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5719 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5719);
+  }
+  ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:5720 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5720);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallExpr___init_acallexpr_1));
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[4])(fra.me.REG[4], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallExpr___init_acallexpr_2));
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[4])(fra.me.REG[4], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallExpr___init_acallexpr_1));
   stack_frame_head = fra.me.prev;
   init_table[itpos190] = 1;
   return;
@@ -29232,75 +31229,40 @@ void parser___parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5583 */
+    /* parser/parser_prod.nit:5721 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___init_acallexpr;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5584 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5584);
-    }
-    /* ./parser//parser_prod.nit:5585 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5585);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5586 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
-  void OC_parser___parser_prod___ACallExpr___init_acallexpr_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:5588 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___init_acallexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5589 */
+    /* parser/parser_prod.nit:5722 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5589);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5722);
     }
-    /* ./parser//parser_prod.nit:5590 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:5723 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[5])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5590);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5723);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[5]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5591 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:5724 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[5]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ACallExpr___replace_child[] = "parser_prod::ACallExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -29311,10 +31273,11 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5595;
+  fra.me.line = 5728;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29322,11 +31285,11 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5597 */
+  /* parser/parser_prod.nit:5730 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5597);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5730);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29336,13 +31299,13 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5598 */
+    /* parser/parser_prod.nit:5731 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -29351,32 +31314,32 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5599 */
+      /* parser/parser_prod.nit:5732 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5599);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5732);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5600 */
+      /* parser/parser_prod.nit:5733 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5600);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5733);
       }
-      /* ./parser//parser_prod.nit:5601 */
+      /* parser/parser_prod.nit:5734 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5603 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5603);
+      /* parser/parser_prod.nit:5736 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5736);
     }
-    /* ./parser//parser_prod.nit:5605 */
+    /* parser/parser_prod.nit:5738 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5607 */
+  /* parser/parser_prod.nit:5740 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5607);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5740);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29386,13 +31349,13 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5608 */
+    /* parser/parser_prod.nit:5741 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -29401,156 +31364,113 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5609 */
+      /* parser/parser_prod.nit:5742 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5609);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5742);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5610 */
+      /* parser/parser_prod.nit:5743 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5610);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5743);
       }
-      /* ./parser//parser_prod.nit:5611 */
+      /* parser/parser_prod.nit:5744 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5613 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5613);
+      /* parser/parser_prod.nit:5746 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5746);
     }
-    /* ./parser//parser_prod.nit:5615 */
+    /* parser/parser_prod.nit:5748 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5617 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:5750 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5617);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5750);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5617 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5618 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:5751 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5618);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:5752 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5752);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5619 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:5620 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5620);
-          }
-          /* ./parser//parser_prod.nit:5621 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5621);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5622 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5622);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:5624 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5624);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:5626 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5753 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5753);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:5754 */
+      ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:5756 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5756);
     }
+    /* parser/parser_prod.nit:5758 */
+    goto label1;
   }
-  label2: while(0);
-  /* ./parser//parser_prod.nit:5629 */
+  /* parser/parser_prod.nit:5760 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5629);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5760);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5629 */
+      /* parser/parser_prod.nit:5760 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5630 */
+      /* parser/parser_prod.nit:5761 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5630);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5761);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -29558,13 +31478,13 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5631 */
+        /* parser/parser_prod.nit:5762 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -29573,102 +31493,104 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:5632 */
+          /* parser/parser_prod.nit:5763 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5632);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5763);
           }
-          /* ./parser//parser_prod.nit:5633 */
+          /* parser/parser_prod.nit:5764 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5633);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5764);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5634 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:5765 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5634);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5765);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5636 */
+          /* parser/parser_prod.nit:5767 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5636);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5767);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5638 */
+        /* parser/parser_prod.nit:5769 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label3;
+      /* ../lib/standard/kernel.nit:355 */
+      goto label2;
     }
   }
-  label3: while(0);
+  label2: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACallExpr___visit_all[] = "parser_prod::ACallExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ACallExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5643;
+  fra.me.line = 5774;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5645 */
+  /* parser/parser_prod.nit:5776 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5645);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5776);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5646 */
+  /* parser/parser_prod.nit:5777 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5646);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5777);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5647 */
+  /* parser/parser_prod.nit:5778 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5647);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5778);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:5650 */
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:5779 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5650);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5779);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallExpr___visit_all_2));
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallExpr___visit_all_1));
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -29682,36 +31604,18 @@ void parser___parser_prod___ACallExpr___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5648 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
-  void OC_parser___parser_prod___ACallExpr___visit_all_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5651 */
+    /* parser/parser_prod.nit:5780 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ACallAssignExpr___empty_init[] = "parser_prod::ACallAssignExpr::empty_init";
 void parser___parser_prod___ACallAssignExpr___empty_init(val_t p0, int* init_table){
   int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -29719,150 +31623,130 @@ void parser___parser_prod___ACallAssignExpr___empty_init(val_t p0, int* init_tab
   if (init_table[itpos191]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5656;
+  fra.me.line = 5785;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos191] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACallAssignExpr___init_acallassignexpr[] = "parser_prod::ACallAssignExpr::init_acallassignexpr";
 void parser___parser_prod___ACallAssignExpr___init_acallassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
   int itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallAssignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos192]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5658;
+  fra.me.line = 5787;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___init_acallassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:5666 */
-  CALL_parser___parser_prod___ACallAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5667 */
+  /* parser/parser_prod.nit:5787 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5795 */
+  CALL_parser___parser_prod___ACallAssignExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:5796 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5667);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5796);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5668 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5797 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5668);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5797);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5669 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5798 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5669);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5798);
   }
-  ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5670 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5799 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5670);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5799);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallAssignExpr___init_acallassignexpr_1));
-  /* ./parser//parser_prod.nit:5676 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5800 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5800);
+  }
+  ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[6]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:5801 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5801);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5802 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5676);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5802);
   }
-  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5677 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:5803 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5677);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5803);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5678 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5804 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5678);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5804);
   }
-  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:5679 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:5805 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5679);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5805);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   stack_frame_head = fra.me.prev;
   init_table[itpos192] = 1;
   return;
 }
-  void OC_parser___parser_prod___ACallAssignExpr___init_acallassignexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:5671 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___init_acallassignexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5672 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5672);
-    }
-    /* ./parser//parser_prod.nit:5673 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5673);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5674 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ACallAssignExpr___replace_child[] = "parser_prod::ACallAssignExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5682;
+  fra.me.line = 5808;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29870,11 +31754,11 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5684 */
+  /* parser/parser_prod.nit:5810 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5684);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5810);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29884,13 +31768,13 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5685 */
+    /* parser/parser_prod.nit:5811 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -29899,32 +31783,32 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5686 */
+      /* parser/parser_prod.nit:5812 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5686);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5812);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5687 */
+      /* parser/parser_prod.nit:5813 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5687);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5813);
       }
-      /* ./parser//parser_prod.nit:5688 */
+      /* parser/parser_prod.nit:5814 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5690 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5690);
+      /* parser/parser_prod.nit:5816 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5816);
     }
-    /* ./parser//parser_prod.nit:5692 */
+    /* parser/parser_prod.nit:5818 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5694 */
+  /* parser/parser_prod.nit:5820 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5694);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5820);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29934,13 +31818,13 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5695 */
+    /* parser/parser_prod.nit:5821 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -29949,132 +31833,34 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5696 */
+      /* parser/parser_prod.nit:5822 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5696);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5822);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5697 */
+      /* parser/parser_prod.nit:5823 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5697);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5823);
       }
-      /* ./parser//parser_prod.nit:5698 */
+      /* parser/parser_prod.nit:5824 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5700 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5700);
+      /* parser/parser_prod.nit:5826 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5826);
     }
-    /* ./parser//parser_prod.nit:5702 */
+    /* parser/parser_prod.nit:5828 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5704 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5704);
-  }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5704 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5705 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5705);
-      }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
-      }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5706 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:5707 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5707);
-          }
-          /* ./parser//parser_prod.nit:5708 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5708);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5709 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5709);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:5711 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5711);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:5713 */
-        goto label1;
-      }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
-    } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
-    }
-  }
-  label2: while(0);
-  /* ./parser//parser_prod.nit:5716 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:5830 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5716);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5830);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30082,13 +31868,13 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5717 */
+    /* parser/parser_prod.nit:5831 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -30097,32 +31883,82 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5718 */
+      /* parser/parser_prod.nit:5832 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5718);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5832);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5719 */
+      /* parser/parser_prod.nit:5833 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5833);
+      }
+      /* parser/parser_prod.nit:5834 */
+      ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:5836 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5836);
+    }
+    /* parser/parser_prod.nit:5838 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:5840 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5840);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:5841 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:5842 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5842);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5843 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5719);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5843);
       }
-      /* ./parser//parser_prod.nit:5720 */
+      /* parser/parser_prod.nit:5844 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5722 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5722);
+      /* parser/parser_prod.nit:5846 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5846);
     }
-    /* ./parser//parser_prod.nit:5724 */
+    /* parser/parser_prod.nit:5848 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5726 */
+  /* parser/parser_prod.nit:5850 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5726);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5850);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30132,13 +31968,13 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5727 */
+    /* parser/parser_prod.nit:5851 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -30147,109 +31983,92 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5728 */
+      /* parser/parser_prod.nit:5852 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5728);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5852);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5729 */
+      /* parser/parser_prod.nit:5853 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5729);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5853);
       }
-      /* ./parser//parser_prod.nit:5730 */
+      /* parser/parser_prod.nit:5854 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5732 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5732);
+      /* parser/parser_prod.nit:5856 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5856);
     }
-    /* ./parser//parser_prod.nit:5734 */
+    /* parser/parser_prod.nit:5858 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACallAssignExpr___visit_all[] = "parser_prod::ACallAssignExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ACallAssignExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5738;
+  fra.me.line = 5862;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5740 */
+  /* parser/parser_prod.nit:5864 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5740);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5864);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5741 */
+  /* parser/parser_prod.nit:5865 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5741);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5865);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5742 */
+  /* parser/parser_prod.nit:5866 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5742);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5866);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallAssignExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:5745 */
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:5867 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5745);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5867);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5746 */
+  /* parser/parser_prod.nit:5868 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5746);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5868);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-  void OC_parser___parser_prod___ACallAssignExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5743 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ACallReassignExpr___empty_init[] = "parser_prod::ACallReassignExpr::empty_init";
 void parser___parser_prod___ACallReassignExpr___empty_init(val_t p0, int* init_table){
   int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -30257,150 +32076,130 @@ void parser___parser_prod___ACallReassignExpr___empty_init(val_t p0, int* init_t
   if (init_table[itpos193]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5750;
+  fra.me.line = 5872;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos193] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr[] = "parser_prod::ACallReassignExpr::init_acallreassignexpr";
 void parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
   int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallReassignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos194]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5752;
+  fra.me.line = 5874;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:5760 */
-  CALL_parser___parser_prod___ACallReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5761 */
+  /* parser/parser_prod.nit:5874 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5882 */
+  CALL_parser___parser_prod___ACallReassignExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:5883 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5761);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5883);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5762 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5884 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5762);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5884);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5763 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5885 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5763);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5885);
   }
-  ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5764 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5886 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5764);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5886);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5887 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5887);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr_1));
-  /* ./parser//parser_prod.nit:5770 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[6]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:5888 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5888);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5889 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5770);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5889);
   }
-  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5771 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:5890 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5771);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5890);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5772 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5891 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5772);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5891);
   }
-  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:5773 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:5892 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5773);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5892);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   stack_frame_head = fra.me.prev;
   init_table[itpos194] = 1;
   return;
 }
-  void OC_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:5765 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5766 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5766);
-    }
-    /* ./parser//parser_prod.nit:5767 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5767);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5768 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ACallReassignExpr___replace_child[] = "parser_prod::ACallReassignExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5776;
+  fra.me.line = 5895;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30408,11 +32207,11 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5778 */
+  /* parser/parser_prod.nit:5897 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5778);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5897);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30422,13 +32221,13 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5779 */
+    /* parser/parser_prod.nit:5898 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -30437,32 +32236,32 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5780 */
+      /* parser/parser_prod.nit:5899 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5780);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5899);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5781 */
+      /* parser/parser_prod.nit:5900 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5781);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5900);
       }
-      /* ./parser//parser_prod.nit:5782 */
+      /* parser/parser_prod.nit:5901 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5784 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5784);
+      /* parser/parser_prod.nit:5903 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5903);
     }
-    /* ./parser//parser_prod.nit:5786 */
+    /* parser/parser_prod.nit:5905 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5788 */
+  /* parser/parser_prod.nit:5907 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5788);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5907);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30472,13 +32271,13 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5789 */
+    /* parser/parser_prod.nit:5908 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -30487,130 +32286,82 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5790 */
+      /* parser/parser_prod.nit:5909 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5790);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5909);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5791 */
+      /* parser/parser_prod.nit:5910 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5791);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5910);
       }
-      /* ./parser//parser_prod.nit:5792 */
+      /* parser/parser_prod.nit:5911 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5794 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5794);
+      /* parser/parser_prod.nit:5913 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5913);
     }
-    /* ./parser//parser_prod.nit:5796 */
+    /* parser/parser_prod.nit:5915 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5798 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:5917 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5798);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5917);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5798 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5799 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:5918 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5799);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:5919 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5919);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5800 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:5801 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5801);
-          }
-          /* ./parser//parser_prod.nit:5802 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5802);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5803 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5803);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:5805 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5805);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:5807 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5920 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5920);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:5921 */
+      ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:5923 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5923);
     }
+    /* parser/parser_prod.nit:5925 */
+    goto label1;
   }
-  label2: while(0);
-  /* ./parser//parser_prod.nit:5810 */
+  /* parser/parser_prod.nit:5927 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5810);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5927);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30620,13 +32371,13 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5811 */
+    /* parser/parser_prod.nit:5928 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -30635,32 +32386,32 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5812 */
+      /* parser/parser_prod.nit:5929 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5812);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5929);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5813 */
+      /* parser/parser_prod.nit:5930 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5813);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5930);
       }
-      /* ./parser//parser_prod.nit:5814 */
+      /* parser/parser_prod.nit:5931 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5816 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5816);
+      /* parser/parser_prod.nit:5933 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5933);
     }
-    /* ./parser//parser_prod.nit:5818 */
+    /* parser/parser_prod.nit:5935 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5820 */
+  /* parser/parser_prod.nit:5937 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5820);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5937);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30670,13 +32421,13 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5821 */
+    /* parser/parser_prod.nit:5938 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -30685,109 +32436,92 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5822 */
+      /* parser/parser_prod.nit:5939 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5822);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5939);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5823 */
+      /* parser/parser_prod.nit:5940 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5823);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5940);
       }
-      /* ./parser//parser_prod.nit:5824 */
+      /* parser/parser_prod.nit:5941 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5826 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5826);
+      /* parser/parser_prod.nit:5943 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5943);
     }
-    /* ./parser//parser_prod.nit:5828 */
+    /* parser/parser_prod.nit:5945 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACallReassignExpr___visit_all[] = "parser_prod::ACallReassignExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ACallReassignExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5832;
+  fra.me.line = 5949;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5834 */
+  /* parser/parser_prod.nit:5951 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5834);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5951);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5835 */
+  /* parser/parser_prod.nit:5952 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5835);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5952);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5836 */
+  /* parser/parser_prod.nit:5953 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5836);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5953);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallReassignExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:5839 */
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:5954 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5839);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5954);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5840 */
+  /* parser/parser_prod.nit:5955 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5840);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5955);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-  void OC_parser___parser_prod___ACallReassignExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5837 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ASuperExpr___empty_init[] = "parser_prod::ASuperExpr::empty_init";
 void parser___parser_prod___ASuperExpr___empty_init(val_t p0, int* init_table){
   int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -30795,48 +32529,54 @@ void parser___parser_prod___ASuperExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos195]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5844;
+  fra.me.line = 5959;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos195] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperExpr___init_asuperexpr[] = "parser_prod::ASuperExpr::init_asuperexpr";
 void parser___parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos196]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5846;
+  fra.me.line = 5961;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___init_asuperexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:5852 */
-  CALL_parser___parser_prod___ASuperExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5853 */
-  ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5854 */
+  /* parser/parser_prod.nit:5961 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:5967 */
+  CALL_parser___parser_prod___ASuperExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:5968 */
+  ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5969 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -30845,82 +32585,56 @@ void parser___parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5855 */
+    /* parser/parser_prod.nit:5970 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5855);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5970);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* ./parser//parser_prod.nit:5857 */
+  /* parser/parser_prod.nit:5972 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5857);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5972);
   }
-  ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5858 */
+  ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:5973 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5858);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5973);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:5974 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5974);
+  }
+  ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:5975 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5975);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASuperExpr___init_asuperexpr_1));
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos196] = 1;
   return;
 }
-  void OC_parser___parser_prod___ASuperExpr___init_asuperexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:5859 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___init_asuperexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5860 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5860);
-    }
-    /* ./parser//parser_prod.nit:5861 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5861);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ASuperExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5862 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ASuperExpr___replace_child[] = "parser_prod::ASuperExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5866;
+  fra.me.line = 5978;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30928,14 +32642,14 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5868 */
+  /* parser/parser_prod.nit:5980 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -30943,13 +32657,13 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5869 */
+    /* parser/parser_prod.nit:5981 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -30958,32 +32672,32 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5870 */
+      /* parser/parser_prod.nit:5982 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5870);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5982);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5871 */
+      /* parser/parser_prod.nit:5983 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AQualified, ID_parser___parser_nodes___AQualified)) /*cast AQualified*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5871);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5983);
       }
-      /* ./parser//parser_prod.nit:5872 */
+      /* parser/parser_prod.nit:5984 */
       ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5874 */
+      /* parser/parser_prod.nit:5986 */
       ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5876 */
+    /* parser/parser_prod.nit:5988 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5878 */
+  /* parser/parser_prod.nit:5990 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 5878);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 5990);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30993,13 +32707,13 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5879 */
+    /* parser/parser_prod.nit:5991 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -31008,209 +32722,147 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5880 */
+      /* parser/parser_prod.nit:5992 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5880);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5992);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5881 */
+      /* parser/parser_prod.nit:5993 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5881);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5993);
       }
-      /* ./parser//parser_prod.nit:5882 */
+      /* parser/parser_prod.nit:5994 */
       ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5884 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5884);
+      /* parser/parser_prod.nit:5996 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5996);
     }
-    /* ./parser//parser_prod.nit:5886 */
+    /* parser/parser_prod.nit:5998 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5888 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:6000 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5888);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6000);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5888 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5889 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6001 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5889);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6002 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6002);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5890 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:5891 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5891);
-          }
-          /* ./parser//parser_prod.nit:5892 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5892);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5893 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5893);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:5895 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5895);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:5897 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6003 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6003);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:6004 */
+      ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:6006 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6006);
     }
+    /* parser/parser_prod.nit:6008 */
+    goto label1;
   }
-  label2: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperExpr___visit_all[] = "parser_prod::ASuperExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASuperExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5902;
+  fra.me.line = 6012;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5904 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:6012 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6014 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5905 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AQualified, ID_parser___parser_nodes___AQualified)) /*cast AQualified*/;
+    /* parser/parser_prod.nit:6015 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AQualified, ID_parser___parser_nodes___AQualified)) /*cast AQualified*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5905);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6015);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:5907 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:6017 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 5907);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 6017);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5908 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6018 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5908);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6018);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASuperExpr___visit_all_1));
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-  void OC_parser___parser_prod___ASuperExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5909 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___AInitExpr___empty_init[] = "parser_prod::AInitExpr::empty_init";
 void parser___parser_prod___AInitExpr___empty_init(val_t p0, int* init_table){
   int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInitExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -31218,120 +32870,100 @@ void parser___parser_prod___AInitExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos197]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5914;
+  fra.me.line = 6022;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos197] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInitExpr___init_ainitexpr[] = "parser_prod::AInitExpr::init_ainitexpr";
 void parser___parser_prod___AInitExpr___init_ainitexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInitExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos198]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5916;
+  fra.me.line = 6024;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___init_ainitexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:5922 */
-  CALL_parser___parser_prod___AInitExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5923 */
+  /* parser/parser_prod.nit:6024 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6030 */
+  CALL_parser___parser_prod___AInitExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:6031 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5923);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6031);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5924 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6032 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5924);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6032);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5925 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6033 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5925);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6033);
   }
-  ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5926 */
+  ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6034 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5926);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6034);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AInitExpr___init_ainitexpr_1));
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6035 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6035);
+  }
+  ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6036 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6036);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos198] = 1;
   return;
 }
-  void OC_parser___parser_prod___AInitExpr___init_ainitexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:5927 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___init_ainitexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5928 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5928);
-    }
-    /* ./parser//parser_prod.nit:5929 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5929);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AInitExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5930 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___AInitExpr___replace_child[] = "parser_prod::AInitExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5934;
+  fra.me.line = 6039;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31339,11 +32971,11 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5936 */
+  /* parser/parser_prod.nit:6041 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5936);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6041);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31353,13 +32985,13 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5937 */
+    /* parser/parser_prod.nit:6042 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -31368,32 +33000,32 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5938 */
+      /* parser/parser_prod.nit:6043 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5938);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6043);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5939 */
+      /* parser/parser_prod.nit:6044 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5939);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6044);
       }
-      /* ./parser//parser_prod.nit:5940 */
+      /* parser/parser_prod.nit:6045 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5942 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5942);
+      /* parser/parser_prod.nit:6047 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6047);
     }
-    /* ./parser//parser_prod.nit:5944 */
+    /* parser/parser_prod.nit:6049 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5946 */
+  /* parser/parser_prod.nit:6051 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 5946);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 6051);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31403,13 +33035,13 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5947 */
+    /* parser/parser_prod.nit:6052 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -31418,191 +33050,126 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:5948 */
+      /* parser/parser_prod.nit:6053 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5948);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6053);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5949 */
+      /* parser/parser_prod.nit:6054 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast TKwinit*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5949);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6054);
       }
-      /* ./parser//parser_prod.nit:5950 */
+      /* parser/parser_prod.nit:6055 */
       ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5952 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5952);
+      /* parser/parser_prod.nit:6057 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6057);
     }
-    /* ./parser//parser_prod.nit:5954 */
+    /* parser/parser_prod.nit:6059 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5956 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:6061 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5956);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6061);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5956 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5957 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6062 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5957);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6063 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6063);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5958 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:5959 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5959);
-          }
-          /* ./parser//parser_prod.nit:5960 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5960);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5961 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5961);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:5963 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5963);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:5965 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6064 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6064);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:6065 */
+      ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:6067 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6067);
     }
+    /* parser/parser_prod.nit:6069 */
+    goto label1;
   }
-  label2: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AInitExpr___visit_all[] = "parser_prod::AInitExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AInitExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5970;
+  fra.me.line = 6073;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5972 */
+  /* parser/parser_prod.nit:6075 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5972);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6075);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5973 */
+  /* parser/parser_prod.nit:6076 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 5973);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 6076);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5974 */
+  /* parser/parser_prod.nit:6077 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5974);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6077);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AInitExpr___visit_all_1));
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-  void OC_parser___parser_prod___AInitExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5975 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ABraExpr___empty_init[] = "parser_prod::ABraExpr::empty_init";
 void parser___parser_prod___ABraExpr___empty_init(val_t p0, int* init_table){
   int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -31610,53 +33177,71 @@ void parser___parser_prod___ABraExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos199]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5980;
+  fra.me.line = 6081;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos199] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraExpr___init_abraexpr[] = "parser_prod::ABraExpr::init_abraexpr";
 void parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos200]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5982;
+  fra.me.line = 6083;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___init_abraexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:5988 */
-  CALL_parser___parser_prod___ABraExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5989 */
+  /* parser/parser_prod.nit:6083 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6089 */
+  CALL_parser___parser_prod___ABraExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:6090 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5989);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6090);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5990 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6091 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5990);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6091);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6092 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6092);
+  }
+  ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6093 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6093);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExpr___init_abraexpr_1));
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExpr___init_abraexpr_2));
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExpr___init_abraexpr_1));
   stack_frame_head = fra.me.prev;
   init_table[itpos200] = 1;
   return;
@@ -31666,75 +33251,40 @@ void parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5991 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___init_abraexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5992 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5992);
-    }
-    /* ./parser//parser_prod.nit:5993 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5993);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5994 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
-  void OC_parser___parser_prod___ABraExpr___init_abraexpr_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:5996 */
+    /* parser/parser_prod.nit:6094 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___init_abraexpr;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5997 */
+    /* parser/parser_prod.nit:6095 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5997);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6095);
     }
-    /* ./parser//parser_prod.nit:5998 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:6096 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[4])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5998);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6096);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[4]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5999 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:6097 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ABraExpr___replace_child[] = "parser_prod::ABraExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -31745,10 +33295,11 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6003;
+  fra.me.line = 6101;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31756,11 +33307,11 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6005 */
+  /* parser/parser_prod.nit:6103 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6005);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6103);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31770,13 +33321,13 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6006 */
+    /* parser/parser_prod.nit:6104 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -31785,156 +33336,113 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6007 */
+      /* parser/parser_prod.nit:6105 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6007);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6105);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6008 */
+      /* parser/parser_prod.nit:6106 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6008);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6106);
       }
-      /* ./parser//parser_prod.nit:6009 */
+      /* parser/parser_prod.nit:6107 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6011 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6011);
+      /* parser/parser_prod.nit:6109 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6109);
     }
-    /* ./parser//parser_prod.nit:6013 */
+    /* parser/parser_prod.nit:6111 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6015 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:6113 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6015);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6113);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6015 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6016 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6114 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6016);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6115 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6115);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6017 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:6018 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6018);
-          }
-          /* ./parser//parser_prod.nit:6019 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6019);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6020 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6020);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:6022 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6022);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:6024 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6116 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6116);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:6117 */
+      ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:6119 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6119);
     }
+    /* parser/parser_prod.nit:6121 */
+    goto label1;
   }
-  label2: while(0);
-  /* ./parser//parser_prod.nit:6027 */
+  /* parser/parser_prod.nit:6123 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6027);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6123);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6027 */
+      /* parser/parser_prod.nit:6123 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6028 */
+      /* parser/parser_prod.nit:6124 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6028);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6124);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -31942,13 +33450,13 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6029 */
+        /* parser/parser_prod.nit:6125 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -31957,94 +33465,96 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:6030 */
+          /* parser/parser_prod.nit:6126 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6030);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6126);
           }
-          /* ./parser//parser_prod.nit:6031 */
+          /* parser/parser_prod.nit:6127 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6031);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6127);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6032 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:6128 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6032);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6128);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:6034 */
+          /* parser/parser_prod.nit:6130 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6034);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6130);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:6036 */
+        /* parser/parser_prod.nit:6132 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label3;
+      /* ../lib/standard/kernel.nit:355 */
+      goto label2;
     }
   }
-  label3: while(0);
+  label2: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraExpr___visit_all[] = "parser_prod::ABraExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ABraExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6041;
+  fra.me.line = 6137;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6043 */
+  /* parser/parser_prod.nit:6139 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6043);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6139);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6044 */
+  /* parser/parser_prod.nit:6140 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6044);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6140);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:6047 */
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6141 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6047);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6141);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExpr___visit_all_2));
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExpr___visit_all_1));
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -32058,36 +33568,18 @@ void parser___parser_prod___ABraExpr___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6045 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
-  void OC_parser___parser_prod___ABraExpr___visit_all_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6048 */
+    /* parser/parser_prod.nit:6142 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ABraAssignExpr___empty_init[] = "parser_prod::ABraAssignExpr::empty_init";
 void parser___parser_prod___ABraAssignExpr___empty_init(val_t p0, int* init_table){
   int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -32095,135 +33587,115 @@ void parser___parser_prod___ABraAssignExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos201]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6053;
+  fra.me.line = 6147;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos201] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraAssignExpr___init_abraassignexpr[] = "parser_prod::ABraAssignExpr::init_abraassignexpr";
 void parser___parser_prod___ABraAssignExpr___init_abraassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos202 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraAssignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos202]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6055;
+  fra.me.line = 6149;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___init_abraassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:6062 */
-  CALL_parser___parser_prod___ABraAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6063 */
+  /* parser/parser_prod.nit:6149 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6156 */
+  CALL_parser___parser_prod___ABraAssignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:6157 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6063);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6157);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6064 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6158 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6064);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6158);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6159 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6159);
+  }
+  ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6160 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6160);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraAssignExpr___init_abraassignexpr_1));
-  /* ./parser//parser_prod.nit:6070 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6161 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6070);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6161);
   }
-  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:6071 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6162 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6071);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6162);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6072 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6163 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6072);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6163);
   }
-  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:6073 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:6164 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6073);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6164);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
   init_table[itpos202] = 1;
   return;
 }
-  void OC_parser___parser_prod___ABraAssignExpr___init_abraassignexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:6065 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___init_abraassignexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6066 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6066);
-    }
-    /* ./parser//parser_prod.nit:6067 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6067);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6068 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ABraAssignExpr___replace_child[] = "parser_prod::ABraAssignExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6076;
+  fra.me.line = 6167;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32231,11 +33703,11 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6078 */
+  /* parser/parser_prod.nit:6169 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6078);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6169);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32245,13 +33717,13 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6079 */
+    /* parser/parser_prod.nit:6170 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -32260,130 +33732,82 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6080 */
+      /* parser/parser_prod.nit:6171 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6080);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6171);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6081 */
+      /* parser/parser_prod.nit:6172 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6081);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6172);
       }
-      /* ./parser//parser_prod.nit:6082 */
+      /* parser/parser_prod.nit:6173 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6084 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6084);
+      /* parser/parser_prod.nit:6175 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6175);
     }
-    /* ./parser//parser_prod.nit:6086 */
+    /* parser/parser_prod.nit:6177 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6088 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:6179 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6088);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6179);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6088 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6089 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6180 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6089);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6181 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6181);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6090 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:6091 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6091);
-          }
-          /* ./parser//parser_prod.nit:6092 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6092);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6093 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6093);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:6095 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6095);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:6097 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6182 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6182);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:6183 */
+      ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:6185 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6185);
     }
+    /* parser/parser_prod.nit:6187 */
+    goto label1;
   }
-  label2: while(0);
-  /* ./parser//parser_prod.nit:6100 */
+  /* parser/parser_prod.nit:6189 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6100);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6189);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32393,13 +33817,13 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6101 */
+    /* parser/parser_prod.nit:6190 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -32408,32 +33832,32 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6102 */
+      /* parser/parser_prod.nit:6191 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6102);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6191);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6103 */
+      /* parser/parser_prod.nit:6192 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6103);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6192);
       }
-      /* ./parser//parser_prod.nit:6104 */
+      /* parser/parser_prod.nit:6193 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6106 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6106);
+      /* parser/parser_prod.nit:6195 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6195);
     }
-    /* ./parser//parser_prod.nit:6108 */
+    /* parser/parser_prod.nit:6197 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6110 */
+  /* parser/parser_prod.nit:6199 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6110);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6199);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32443,13 +33867,13 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6111 */
+    /* parser/parser_prod.nit:6200 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -32458,101 +33882,84 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6112 */
+      /* parser/parser_prod.nit:6201 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6112);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6201);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6113 */
+      /* parser/parser_prod.nit:6202 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6113);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6202);
       }
-      /* ./parser//parser_prod.nit:6114 */
+      /* parser/parser_prod.nit:6203 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6116 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6116);
+      /* parser/parser_prod.nit:6205 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6205);
     }
-    /* ./parser//parser_prod.nit:6118 */
+    /* parser/parser_prod.nit:6207 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraAssignExpr___visit_all[] = "parser_prod::ABraAssignExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ABraAssignExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6122;
+  fra.me.line = 6211;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6124 */
+  /* parser/parser_prod.nit:6213 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6124);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6213);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6125 */
+  /* parser/parser_prod.nit:6214 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6125);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6214);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraAssignExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:6128 */
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6215 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6128);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6215);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6129 */
+  /* parser/parser_prod.nit:6216 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6129);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6216);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-  void OC_parser___parser_prod___ABraAssignExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6126 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ABraReassignExpr___empty_init[] = "parser_prod::ABraReassignExpr::empty_init";
 void parser___parser_prod___ABraReassignExpr___empty_init(val_t p0, int* init_table){
   int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -32560,135 +33967,115 @@ void parser___parser_prod___ABraReassignExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos203]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6133;
+  fra.me.line = 6220;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos203] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr[] = "parser_prod::ABraReassignExpr::init_abrareassignexpr";
 void parser___parser_prod___ABraReassignExpr___init_abrareassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraReassignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos204]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6135;
+  fra.me.line = 6222;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:6142 */
-  CALL_parser___parser_prod___ABraReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6143 */
+  /* parser/parser_prod.nit:6222 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6229 */
+  CALL_parser___parser_prod___ABraReassignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:6230 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6143);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6230);
   }
-  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6144 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6231 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6144);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6231);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6232 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6232);
+  }
+  ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6233 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6233);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr_1));
-  /* ./parser//parser_prod.nit:6150 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6234 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6150);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6234);
   }
-  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:6151 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6235 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6151);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6235);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6152 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6236 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6152);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6236);
   }
-  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:6153 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:6237 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6153);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6237);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
   init_table[itpos204] = 1;
   return;
 }
-  void OC_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:6145 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6146 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6146);
-    }
-    /* ./parser//parser_prod.nit:6147 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6147);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6148 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ABraReassignExpr___replace_child[] = "parser_prod::ABraReassignExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6156;
+  fra.me.line = 6240;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32696,11 +34083,11 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6158 */
+  /* parser/parser_prod.nit:6242 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6158);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6242);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32710,13 +34097,13 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6159 */
+    /* parser/parser_prod.nit:6243 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -32725,130 +34112,82 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6160 */
+      /* parser/parser_prod.nit:6244 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6160);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6244);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6161 */
+      /* parser/parser_prod.nit:6245 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6161);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6245);
       }
-      /* ./parser//parser_prod.nit:6162 */
+      /* parser/parser_prod.nit:6246 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6164 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6164);
+      /* parser/parser_prod.nit:6248 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6248);
     }
-    /* ./parser//parser_prod.nit:6166 */
+    /* parser/parser_prod.nit:6250 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6168 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:6252 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6168);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6252);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6168 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6169 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6253 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6169);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6254 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6254);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6170 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:6171 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6171);
-          }
-          /* ./parser//parser_prod.nit:6172 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6172);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6173 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6173);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:6175 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6175);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:6177 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6255 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6255);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:6256 */
+      ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:6258 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6258);
     }
+    /* parser/parser_prod.nit:6260 */
+    goto label1;
   }
-  label2: while(0);
-  /* ./parser//parser_prod.nit:6180 */
+  /* parser/parser_prod.nit:6262 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6180);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6262);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32858,13 +34197,13 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6181 */
+    /* parser/parser_prod.nit:6263 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -32873,32 +34212,32 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6182 */
+      /* parser/parser_prod.nit:6264 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6182);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6264);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6183 */
+      /* parser/parser_prod.nit:6265 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6183);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6265);
       }
-      /* ./parser//parser_prod.nit:6184 */
+      /* parser/parser_prod.nit:6266 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6186 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6186);
+      /* parser/parser_prod.nit:6268 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6268);
     }
-    /* ./parser//parser_prod.nit:6188 */
+    /* parser/parser_prod.nit:6270 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6190 */
+  /* parser/parser_prod.nit:6272 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6190);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6272);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32908,13 +34247,13 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6191 */
+    /* parser/parser_prod.nit:6273 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -32923,101 +34262,84 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6192 */
+      /* parser/parser_prod.nit:6274 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6192);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6274);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6193 */
+      /* parser/parser_prod.nit:6275 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6193);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6275);
       }
-      /* ./parser//parser_prod.nit:6194 */
+      /* parser/parser_prod.nit:6276 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6196 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6196);
+      /* parser/parser_prod.nit:6278 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6278);
     }
-    /* ./parser//parser_prod.nit:6198 */
+    /* parser/parser_prod.nit:6280 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABraReassignExpr___visit_all[] = "parser_prod::ABraReassignExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ABraReassignExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6202;
+  fra.me.line = 6284;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6204 */
+  /* parser/parser_prod.nit:6286 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6204);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6286);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6205 */
+  /* parser/parser_prod.nit:6287 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6205);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6287);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraReassignExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:6208 */
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6288 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6208);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6288);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6209 */
+  /* parser/parser_prod.nit:6289 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6209);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6289);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-  void OC_parser___parser_prod___ABraReassignExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6206 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___AClosureCallExpr___empty_init[] = "parser_prod::AClosureCallExpr::empty_init";
 void parser___parser_prod___AClosureCallExpr___empty_init(val_t p0, int* init_table){
   int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureCallExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -33025,53 +34347,71 @@ void parser___parser_prod___AClosureCallExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos205]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6213;
+  fra.me.line = 6293;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos205] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr[] = "parser_prod::AClosureCallExpr::init_aclosurecallexpr";
 void parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureCallExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos206]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6215;
+  fra.me.line = 6295;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:6221 */
-  CALL_parser___parser_prod___AClosureCallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6222 */
+  /* parser/parser_prod.nit:6295 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6301 */
+  CALL_parser___parser_prod___AClosureCallExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:6302 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6222);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6302);
   }
-  ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6223 */
+  ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6303 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6223);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6303);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr_1));
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr_2));
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6304 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6304);
+  }
+  ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6305 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6305);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr_1));
   stack_frame_head = fra.me.prev;
   init_table[itpos206] = 1;
   return;
@@ -33081,75 +34421,40 @@ void parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, v
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:6224 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6225 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6225);
-    }
-    /* ./parser//parser_prod.nit:6226 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6226);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6227 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
-  void OC_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:6229 */
+    /* parser/parser_prod.nit:6306 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6230 */
+    /* parser/parser_prod.nit:6307 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6230);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6307);
     }
-    /* ./parser//parser_prod.nit:6231 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:6308 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(closctx->REG[4])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6231);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6308);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(closctx->REG[4]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6232 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:6309 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AClosureCallExpr___replace_child[] = "parser_prod::AClosureCallExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -33160,10 +34465,11 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6236;
+  fra.me.line = 6313;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33171,11 +34477,11 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6238 */
+  /* parser/parser_prod.nit:6315 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6238);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6315);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33185,13 +34491,13 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6239 */
+    /* parser/parser_prod.nit:6316 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -33200,156 +34506,113 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6240 */
+      /* parser/parser_prod.nit:6317 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6240);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6317);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6241 */
+      /* parser/parser_prod.nit:6318 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6241);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6318);
       }
-      /* ./parser//parser_prod.nit:6242 */
+      /* parser/parser_prod.nit:6319 */
       ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6244 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6244);
+      /* parser/parser_prod.nit:6321 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6321);
     }
-    /* ./parser//parser_prod.nit:6246 */
+    /* parser/parser_prod.nit:6323 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6248 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:6325 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6248);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6325);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6248 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6249 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6326 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6249);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6327 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6327);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6250 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:6251 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6251);
-          }
-          /* ./parser//parser_prod.nit:6252 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6252);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6253 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6253);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:6255 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6255);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:6257 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6328 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6328);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:6329 */
+      ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:6331 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6331);
     }
+    /* parser/parser_prod.nit:6333 */
+    goto label1;
   }
-  label2: while(0);
-  /* ./parser//parser_prod.nit:6260 */
+  /* parser/parser_prod.nit:6335 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6260);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6335);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6260 */
+      /* parser/parser_prod.nit:6335 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6261 */
+      /* parser/parser_prod.nit:6336 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6261);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6336);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -33357,13 +34620,13 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6262 */
+        /* parser/parser_prod.nit:6337 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -33372,94 +34635,96 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:6263 */
+          /* parser/parser_prod.nit:6338 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6263);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6338);
           }
-          /* ./parser//parser_prod.nit:6264 */
+          /* parser/parser_prod.nit:6339 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6264);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6339);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6265 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:6340 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6265);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6340);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:6267 */
+          /* parser/parser_prod.nit:6342 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6267);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6342);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:6269 */
+        /* parser/parser_prod.nit:6344 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label3;
+      /* ../lib/standard/kernel.nit:355 */
+      goto label2;
     }
   }
-  label3: while(0);
+  label2: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AClosureCallExpr___visit_all[] = "parser_prod::AClosureCallExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AClosureCallExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6274;
+  fra.me.line = 6349;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6276 */
+  /* parser/parser_prod.nit:6351 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6276);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6351);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6277 */
+  /* parser/parser_prod.nit:6352 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6277);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6352);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureCallExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:6280 */
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6353 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6280);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6353);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureCallExpr___visit_all_2));
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureCallExpr___visit_all_1));
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -33473,36 +34738,18 @@ void parser___parser_prod___AClosureCallExpr___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6278 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
-  void OC_parser___parser_prod___AClosureCallExpr___visit_all_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6281 */
+    /* parser/parser_prod.nit:6354 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AVarExpr___empty_init[] = "parser_prod::AVarExpr::empty_init";
 void parser___parser_prod___AVarExpr___empty_init(val_t p0, int* init_table){
   int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -33510,51 +34757,58 @@ void parser___parser_prod___AVarExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos207]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6286;
+  fra.me.line = 6359;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos207] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarExpr___init_avarexpr[] = "parser_prod::AVarExpr::init_avarexpr";
 void parser___parser_prod___AVarExpr___init_avarexpr(val_t p0, val_t p1, int* init_table){
   int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos208]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6288;
+  fra.me.line = 6361;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___init_avarexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6292 */
-  CALL_parser___parser_prod___AVarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6293 */
+  /* parser/parser_prod.nit:6361 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6365 */
+  CALL_parser___parser_prod___AVarExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6366 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6293);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6366);
   }
-  ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6294 */
+  ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6367 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6294);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6367);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos208] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarExpr___replace_child[] = "parser_prod::AVarExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -33562,10 +34816,11 @@ void parser___parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6297;
+  fra.me.line = 6370;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33573,11 +34828,11 @@ void parser___parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6299 */
+  /* parser/parser_prod.nit:6372 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6299);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6372);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33587,13 +34842,13 @@ void parser___parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6300 */
+    /* parser/parser_prod.nit:6373 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -33602,56 +34857,59 @@ void parser___parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6301 */
+      /* parser/parser_prod.nit:6374 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6301);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6374);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6302 */
+      /* parser/parser_prod.nit:6375 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6302);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6375);
       }
-      /* ./parser//parser_prod.nit:6303 */
+      /* parser/parser_prod.nit:6376 */
       ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6305 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6305);
+      /* parser/parser_prod.nit:6378 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6378);
     }
-    /* ./parser//parser_prod.nit:6307 */
+    /* parser/parser_prod.nit:6380 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarExpr___visit_all[] = "parser_prod::AVarExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AVarExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6311;
+  fra.me.line = 6384;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6313 */
+  /* parser/parser_prod.nit:6386 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6313);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6386);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarAssignExpr___empty_init[] = "parser_prod::AVarAssignExpr::empty_init";
 void parser___parser_prod___AVarAssignExpr___empty_init(val_t p0, int* init_table){
   int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -33659,81 +34917,88 @@ void parser___parser_prod___AVarAssignExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos209]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6317;
+  fra.me.line = 6390;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos209] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarAssignExpr___init_avarassignexpr[] = "parser_prod::AVarAssignExpr::init_avarassignexpr";
 void parser___parser_prod___AVarAssignExpr___init_avarassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarAssignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos210]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6319;
+  fra.me.line = 6392;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___init_avarassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:6325 */
-  CALL_parser___parser_prod___AVarAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6326 */
+  /* parser/parser_prod.nit:6392 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6398 */
+  CALL_parser___parser_prod___AVarAssignExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:6399 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6326);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6399);
   }
-  ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6327 */
+  ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6400 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6327);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6400);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6328 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6401 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6328);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6401);
   }
-  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6329 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6402 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6329);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6402);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6330 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6403 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6330);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6403);
   }
-  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:6331 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6404 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6331);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6404);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos210] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarAssignExpr___replace_child[] = "parser_prod::AVarAssignExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -33741,10 +35006,11 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6334;
+  fra.me.line = 6407;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33752,11 +35018,11 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6336 */
+  /* parser/parser_prod.nit:6409 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6336);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6409);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33766,13 +35032,13 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6337 */
+    /* parser/parser_prod.nit:6410 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -33781,32 +35047,32 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6338 */
+      /* parser/parser_prod.nit:6411 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6338);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6411);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6339 */
+      /* parser/parser_prod.nit:6412 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6339);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6412);
       }
-      /* ./parser//parser_prod.nit:6340 */
+      /* parser/parser_prod.nit:6413 */
       ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6342 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6342);
+      /* parser/parser_prod.nit:6415 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6415);
     }
-    /* ./parser//parser_prod.nit:6344 */
+    /* parser/parser_prod.nit:6417 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6346 */
+  /* parser/parser_prod.nit:6419 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6346);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6419);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33816,13 +35082,13 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6347 */
+    /* parser/parser_prod.nit:6420 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -33831,32 +35097,32 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6348 */
+      /* parser/parser_prod.nit:6421 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6348);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6421);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6349 */
+      /* parser/parser_prod.nit:6422 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6349);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6422);
       }
-      /* ./parser//parser_prod.nit:6350 */
+      /* parser/parser_prod.nit:6423 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6352 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6352);
+      /* parser/parser_prod.nit:6425 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6425);
     }
-    /* ./parser//parser_prod.nit:6354 */
+    /* parser/parser_prod.nit:6427 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6356 */
+  /* parser/parser_prod.nit:6429 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6356);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6429);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33866,13 +35132,13 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6357 */
+    /* parser/parser_prod.nit:6430 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -33881,73 +35147,76 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6358 */
+      /* parser/parser_prod.nit:6431 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6358);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6431);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6359 */
+      /* parser/parser_prod.nit:6432 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6359);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6432);
       }
-      /* ./parser//parser_prod.nit:6360 */
+      /* parser/parser_prod.nit:6433 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6362 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6362);
+      /* parser/parser_prod.nit:6435 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6435);
     }
-    /* ./parser//parser_prod.nit:6364 */
+    /* parser/parser_prod.nit:6437 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarAssignExpr___visit_all[] = "parser_prod::AVarAssignExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AVarAssignExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6368;
+  fra.me.line = 6441;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6370 */
+  /* parser/parser_prod.nit:6443 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6370);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6443);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6371 */
+  /* parser/parser_prod.nit:6444 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6371);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6444);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6372 */
+  /* parser/parser_prod.nit:6445 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6372);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6445);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarReassignExpr___empty_init[] = "parser_prod::AVarReassignExpr::empty_init";
 void parser___parser_prod___AVarReassignExpr___empty_init(val_t p0, int* init_table){
   int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -33955,81 +35224,88 @@ void parser___parser_prod___AVarReassignExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos211]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6376;
+  fra.me.line = 6449;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos211] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarReassignExpr___init_avarreassignexpr[] = "parser_prod::AVarReassignExpr::init_avarreassignexpr";
 void parser___parser_prod___AVarReassignExpr___init_avarreassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarReassignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos212]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6378;
+  fra.me.line = 6451;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___init_avarreassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:6384 */
-  CALL_parser___parser_prod___AVarReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6385 */
+  /* parser/parser_prod.nit:6451 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6457 */
+  CALL_parser___parser_prod___AVarReassignExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:6458 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6385);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6458);
   }
-  ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6386 */
+  ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6459 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6386);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6459);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6387 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6460 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6387);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6460);
   }
-  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6388 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6461 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6388);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6461);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6389 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6462 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6389);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6462);
   }
-  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:6390 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6463 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6390);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6463);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos212] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarReassignExpr___replace_child[] = "parser_prod::AVarReassignExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -34037,10 +35313,11 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6393;
+  fra.me.line = 6466;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34048,11 +35325,11 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6395 */
+  /* parser/parser_prod.nit:6468 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6395);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6468);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34062,13 +35339,13 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6396 */
+    /* parser/parser_prod.nit:6469 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -34077,32 +35354,32 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6397 */
+      /* parser/parser_prod.nit:6470 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6397);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6470);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6398 */
+      /* parser/parser_prod.nit:6471 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6398);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6471);
       }
-      /* ./parser//parser_prod.nit:6399 */
+      /* parser/parser_prod.nit:6472 */
       ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6401 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6401);
+      /* parser/parser_prod.nit:6474 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6474);
     }
-    /* ./parser//parser_prod.nit:6403 */
+    /* parser/parser_prod.nit:6476 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6405 */
+  /* parser/parser_prod.nit:6478 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6405);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6478);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34112,13 +35389,13 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6406 */
+    /* parser/parser_prod.nit:6479 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -34127,32 +35404,32 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6407 */
+      /* parser/parser_prod.nit:6480 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6407);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6480);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6408 */
+      /* parser/parser_prod.nit:6481 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6408);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6481);
       }
-      /* ./parser//parser_prod.nit:6409 */
+      /* parser/parser_prod.nit:6482 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6411 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6411);
+      /* parser/parser_prod.nit:6484 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6484);
     }
-    /* ./parser//parser_prod.nit:6413 */
+    /* parser/parser_prod.nit:6486 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6415 */
+  /* parser/parser_prod.nit:6488 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6415);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6488);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34162,13 +35439,13 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6416 */
+    /* parser/parser_prod.nit:6489 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -34177,73 +35454,76 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6417 */
+      /* parser/parser_prod.nit:6490 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6417);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6490);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6418 */
+      /* parser/parser_prod.nit:6491 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6418);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6491);
       }
-      /* ./parser//parser_prod.nit:6419 */
+      /* parser/parser_prod.nit:6492 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6421 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6421);
+      /* parser/parser_prod.nit:6494 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6494);
     }
-    /* ./parser//parser_prod.nit:6423 */
+    /* parser/parser_prod.nit:6496 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AVarReassignExpr___visit_all[] = "parser_prod::AVarReassignExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AVarReassignExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6427;
+  fra.me.line = 6500;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6429 */
+  /* parser/parser_prod.nit:6502 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6429);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6502);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6430 */
+  /* parser/parser_prod.nit:6503 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6430);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6503);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6431 */
+  /* parser/parser_prod.nit:6504 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6431);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6504);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ARangeExpr___empty_init[] = "parser_prod::ARangeExpr::empty_init";
 void parser___parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table){
   int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ARangeExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -34251,66 +35531,73 @@ void parser___parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos213]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6435;
+  fra.me.line = 6508;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos213] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ARangeExpr___init_arangeexpr[] = "parser_prod::ARangeExpr::init_arangeexpr";
 void parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ARangeExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos214]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6437;
+  fra.me.line = 6510;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___init_arangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6442 */
-  CALL_parser___parser_prod___ARangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6443 */
+  /* parser/parser_prod.nit:6510 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6515 */
+  CALL_parser___parser_prod___ARangeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:6516 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6443);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6516);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6444 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6517 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6444);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6517);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6445 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6518 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6445);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6518);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6446 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6519 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6446);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6519);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos214] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ARangeExpr___replace_child[] = "parser_prod::ARangeExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -34318,10 +35605,11 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6449;
+  fra.me.line = 6522;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34329,11 +35617,11 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6451 */
+  /* parser/parser_prod.nit:6524 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6451);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6524);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34343,13 +35631,13 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6452 */
+    /* parser/parser_prod.nit:6525 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -34358,32 +35646,32 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6453 */
+      /* parser/parser_prod.nit:6526 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6453);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6526);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6454 */
+      /* parser/parser_prod.nit:6527 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6454);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6527);
       }
-      /* ./parser//parser_prod.nit:6455 */
+      /* parser/parser_prod.nit:6528 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6457 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6457);
+      /* parser/parser_prod.nit:6530 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6530);
     }
-    /* ./parser//parser_prod.nit:6459 */
+    /* parser/parser_prod.nit:6532 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6461 */
+  /* parser/parser_prod.nit:6534 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6461);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6534);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34393,13 +35681,13 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6462 */
+    /* parser/parser_prod.nit:6535 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -34408,65 +35696,68 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6463 */
+      /* parser/parser_prod.nit:6536 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6463);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6536);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6464 */
+      /* parser/parser_prod.nit:6537 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6464);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6537);
       }
-      /* ./parser//parser_prod.nit:6465 */
+      /* parser/parser_prod.nit:6538 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6467 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6467);
+      /* parser/parser_prod.nit:6540 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6540);
     }
-    /* ./parser//parser_prod.nit:6469 */
+    /* parser/parser_prod.nit:6542 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ARangeExpr___visit_all[] = "parser_prod::ARangeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ARangeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6473;
+  fra.me.line = 6546;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6475 */
+  /* parser/parser_prod.nit:6548 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6475);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6548);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6476 */
+  /* parser/parser_prod.nit:6549 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6476);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6549);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACrangeExpr___empty_init[] = "parser_prod::ACrangeExpr::empty_init";
 void parser___parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table){
   int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACrangeExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -34474,66 +35765,103 @@ void parser___parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos215]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6480;
+  fra.me.line = 6553;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos215] = 1;
   return;
 }
-void parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+static const char LOCATE_parser___parser_prod___ACrangeExpr___init_acrangeexpr[] = "parser_prod::ACrangeExpr::init_acrangeexpr";
+void parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACrangeExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos216]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6482;
+  fra.me.line = 6555;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___init_acrangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6487 */
-  CALL_parser___parser_prod___ACrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6488 */
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:6555 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6562 */
+  CALL_parser___parser_prod___ACrangeExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:6563 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6488);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6563);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6489 */
+  ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6564 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6489);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6564);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6490 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6565 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6490);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6565);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6491 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6566 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6491);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6566);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6567 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6567);
+  }
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6568 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6568);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6569 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6569);
+  }
+  ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:6570 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6570);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
   init_table[itpos216] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACrangeExpr___replace_child[] = "parser_prod::ACrangeExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -34541,10 +35869,11 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6494;
+  fra.me.line = 6573;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34552,11 +35881,61 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6496 */
+  /* parser/parser_prod.nit:6575 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6575);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6576 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6577 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6577);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6578 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6578);
+      }
+      /* parser/parser_prod.nit:6579 */
+      ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:6581 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6581);
+    }
+    /* parser/parser_prod.nit:6583 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:6585 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6496);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6585);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34566,13 +35945,13 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6497 */
+    /* parser/parser_prod.nit:6586 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -34581,32 +35960,32 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6498 */
+      /* parser/parser_prod.nit:6587 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6498);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6587);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6499 */
+      /* parser/parser_prod.nit:6588 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6499);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6588);
       }
-      /* ./parser//parser_prod.nit:6500 */
+      /* parser/parser_prod.nit:6589 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6502 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6502);
+      /* parser/parser_prod.nit:6591 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6591);
     }
-    /* ./parser//parser_prod.nit:6504 */
+    /* parser/parser_prod.nit:6593 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6506 */
+  /* parser/parser_prod.nit:6595 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6506);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6595);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34616,13 +35995,13 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6507 */
+    /* parser/parser_prod.nit:6596 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -34631,65 +36010,134 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6508 */
+      /* parser/parser_prod.nit:6597 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6508);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6597);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6509 */
+      /* parser/parser_prod.nit:6598 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6509);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6598);
       }
-      /* ./parser//parser_prod.nit:6510 */
+      /* parser/parser_prod.nit:6599 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6512 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6512);
+      /* parser/parser_prod.nit:6601 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6601);
     }
-    /* ./parser//parser_prod.nit:6514 */
+    /* parser/parser_prod.nit:6603 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:6605 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6605);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6606 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6607 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6607);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6608 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast TCbra*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6608);
+      }
+      /* parser/parser_prod.nit:6609 */
+      ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:6611 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6611);
+    }
+    /* parser/parser_prod.nit:6613 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACrangeExpr___visit_all[] = "parser_prod::ACrangeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ACrangeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6518;
+  fra.me.line = 6617;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6520 */
+  /* parser/parser_prod.nit:6619 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6619);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6620 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6520);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6620);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6521 */
+  /* parser/parser_prod.nit:6621 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6521);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6621);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6622 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6622);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrangeExpr___empty_init[] = "parser_prod::AOrangeExpr::empty_init";
 void parser___parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table){
   int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrangeExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -34697,66 +36145,103 @@ void parser___parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos217]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6525;
+  fra.me.line = 6626;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos217] = 1;
   return;
 }
-void parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+static const char LOCATE_parser___parser_prod___AOrangeExpr___init_aorangeexpr[] = "parser_prod::AOrangeExpr::init_aorangeexpr";
+void parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrangeExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos218]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6527;
+  fra.me.line = 6628;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___init_aorangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6532 */
-  CALL_parser___parser_prod___AOrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6533 */
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:6628 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6635 */
+  CALL_parser___parser_prod___AOrangeExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:6636 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6533);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6636);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6534 */
+  ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6637 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6534);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6637);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6535 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6638 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6535);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6638);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6536 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6639 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6536);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6639);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6640 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6640);
+  }
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6641 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6641);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:6642 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6642);
+  }
+  ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:6643 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6643);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
   init_table[itpos218] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrangeExpr___replace_child[] = "parser_prod::AOrangeExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -34764,10 +36249,11 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6539;
+  fra.me.line = 6646;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34775,11 +36261,61 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6541 */
+  /* parser/parser_prod.nit:6648 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6648);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6649 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6650 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6650);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6651 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6651);
+      }
+      /* parser/parser_prod.nit:6652 */
+      ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:6654 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6654);
+    }
+    /* parser/parser_prod.nit:6656 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:6658 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6541);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6658);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34789,13 +36325,13 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6542 */
+    /* parser/parser_prod.nit:6659 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -34804,32 +36340,32 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6543 */
+      /* parser/parser_prod.nit:6660 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6543);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6660);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6544 */
+      /* parser/parser_prod.nit:6661 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6544);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6661);
       }
-      /* ./parser//parser_prod.nit:6545 */
+      /* parser/parser_prod.nit:6662 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6547 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6547);
+      /* parser/parser_prod.nit:6664 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6664);
     }
-    /* ./parser//parser_prod.nit:6549 */
+    /* parser/parser_prod.nit:6666 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6551 */
+  /* parser/parser_prod.nit:6668 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6551);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6668);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34839,13 +36375,13 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6552 */
+    /* parser/parser_prod.nit:6669 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -34854,65 +36390,134 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6553 */
+      /* parser/parser_prod.nit:6670 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6553);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6670);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6554 */
+      /* parser/parser_prod.nit:6671 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6554);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6671);
       }
-      /* ./parser//parser_prod.nit:6555 */
+      /* parser/parser_prod.nit:6672 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6557 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6557);
+      /* parser/parser_prod.nit:6674 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6674);
     }
-    /* ./parser//parser_prod.nit:6559 */
+    /* parser/parser_prod.nit:6676 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:6678 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6678);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6679 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6680 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6680);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6681 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6681);
+      }
+      /* parser/parser_prod.nit:6682 */
+      ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:6684 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6684);
+    }
+    /* parser/parser_prod.nit:6686 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AOrangeExpr___visit_all[] = "parser_prod::AOrangeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AOrangeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6563;
+  fra.me.line = 6690;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6565 */
+  /* parser/parser_prod.nit:6692 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6692);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6693 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6565);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6693);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6566 */
+  /* parser/parser_prod.nit:6694 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6566);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6694);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6695 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6695);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AArrayExpr___empty_init[] = "parser_prod::AArrayExpr::empty_init";
 void parser___parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table){
   int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AArrayExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -34920,89 +36525,70 @@ void parser___parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos219]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6570;
+  fra.me.line = 6699;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos219] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AArrayExpr___init_aarrayexpr[] = "parser_prod::AArrayExpr::init_aarrayexpr";
 void parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, int* init_table){
   int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AArrayExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
   val_t tmp;
   if (init_table[itpos220]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6572;
+  fra.me.line = 6701;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___init_aarrayexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6576 */
-  CALL_parser___parser_prod___AArrayExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AArrayExpr___init_aarrayexpr_1));
+  /* parser/parser_prod.nit:6701 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6705 */
+  CALL_parser___parser_prod___AArrayExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6706 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6706);
+  }
+  ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6707 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6707);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos220] = 1;
   return;
 }
-  void OC_parser___parser_prod___AArrayExpr___init_aarrayexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-    val_t REGB0;
-    fun_t CREG[1];
-    val_t tmp;
-    /* ./parser//parser_prod.nit:6577 */
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___init_aarrayexpr;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.REG[1] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6578 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6578);
-    }
-    /* ./parser//parser_prod.nit:6579 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(closctx->REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6579);
-    }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(closctx->REG[0]);
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6580 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___AArrayExpr___replace_child[] = "parser_prod::AArrayExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6584;
+  fra.me.line = 6710;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35010,153 +36596,88 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6586 */
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
+  /* parser/parser_prod.nit:6712 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6586);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6712);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
-  while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6586 */
-      REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6587 */
-      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-      if (UNTAG_Bool(REGB3)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6713 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6587);
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
-          REGB3 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-          REGB3 = REGB4;
-        }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6714 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6714);
       }
-      if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6588 */
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB4;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:6589 */
-          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6589);
-          }
-          /* ./parser//parser_prod.nit:6590 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6590);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6591 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6591);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* ./parser//parser_prod.nit:6593 */
-          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6593);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
-        }
-        /* ./parser//parser_prod.nit:6595 */
-        goto label1;
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6715 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6715);
       }
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
-      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
-      REGB0 = REGB2;
+      /* parser/parser_prod.nit:6716 */
+      ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
-      goto label2;
+      /* parser/parser_prod.nit:6718 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6718);
     }
+    /* parser/parser_prod.nit:6720 */
+    goto label1;
   }
-  label2: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AArrayExpr___visit_all[] = "parser_prod::AArrayExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AArrayExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6600;
+  fra.me.line = 6724;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6602 */
+  /* parser/parser_prod.nit:6726 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6602);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6726);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AArrayExpr___visit_all_1));
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-  void OC_parser___parser_prod___AArrayExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me;} fra;
-    fun_t CREG[1];
-    val_t tmp;
-    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-    fra.me.file = LOCATE_parser___parser_prod;
-    fra.me.line = 0;
-    fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___visit_all;
-    fra.me.has_broke = 0;
-    fra.me.REG_size = 1;
-    fra.me.REG[0] = NIT_NULL;
-    fra.me.closure_ctx = closctx_param;
-    fra.me.closure_funs = CREG;
-    fra.me.REG[0] = p0;
-    CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6603 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    stack_frame_head = fra.me.prev;
-    return;
-  }
+static const char LOCATE_parser___parser_prod___ASelfExpr___empty_init[] = "parser_prod::ASelfExpr::empty_init";
 void parser___parser_prod___ASelfExpr___empty_init(val_t p0, int* init_table){
   int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASelfExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -35164,51 +36685,58 @@ void parser___parser_prod___ASelfExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos221]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6608;
+  fra.me.line = 6730;
   fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos221] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASelfExpr___init_aselfexpr[] = "parser_prod::ASelfExpr::init_aselfexpr";
 void parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1, int* init_table){
   int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASelfExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos222]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6610;
+  fra.me.line = 6732;
   fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___init_aselfexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6614 */
-  CALL_parser___parser_prod___ASelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6615 */
+  /* parser/parser_prod.nit:6732 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6736 */
+  CALL_parser___parser_prod___ASelfExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6737 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6615);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6737);
   }
-  ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6616 */
+  ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6738 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6616);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6738);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos222] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASelfExpr___replace_child[] = "parser_prod::ASelfExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -35216,10 +36744,11 @@ void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6619;
+  fra.me.line = 6741;
   fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35227,14 +36756,14 @@ void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6621 */
+  /* parser/parser_prod.nit:6743 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -35242,13 +36771,13 @@ void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6622 */
+    /* parser/parser_prod.nit:6744 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -35257,50 +36786,53 @@ void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6623 */
+      /* parser/parser_prod.nit:6745 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6623);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6745);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6624 */
+      /* parser/parser_prod.nit:6746 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwself, ID_parser___parser_nodes___TKwself)) /*cast TKwself*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6624);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6746);
       }
-      /* ./parser//parser_prod.nit:6625 */
+      /* parser/parser_prod.nit:6747 */
       ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6627 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6627);
+      /* parser/parser_prod.nit:6749 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6749);
     }
-    /* ./parser//parser_prod.nit:6629 */
+    /* parser/parser_prod.nit:6751 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASelfExpr___visit_all[] = "parser_prod::ASelfExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASelfExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6633;
+  fra.me.line = 6755;
   fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6635 */
+  /* parser/parser_prod.nit:6757 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AImplicitSelfExpr___empty_init[] = "parser_prod::AImplicitSelfExpr::empty_init";
 void parser___parser_prod___AImplicitSelfExpr___empty_init(val_t p0, int* init_table){
   int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AImplicitSelfExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -35308,16 +36840,18 @@ void parser___parser_prod___AImplicitSelfExpr___empty_init(val_t p0, int* init_t
   if (init_table[itpos223]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6639;
+  fra.me.line = 6761;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos223] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr[] = "parser_prod::AImplicitSelfExpr::init_aimplicitselfexpr";
 void parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(val_t p0, int* init_table){
   int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AImplicitSelfExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -35325,27 +36859,30 @@ void parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(val_t p0,
   if (init_table[itpos224]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6641;
+  fra.me.line = 6763;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:6643 */
+  /* parser/parser_prod.nit:6765 */
   CALL_parser___parser_prod___AImplicitSelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos224] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AImplicitSelfExpr___replace_child[] = "parser_prod::AImplicitSelfExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AImplicitSelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6646;
+  fra.me.line = 6768;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35355,15 +36892,17 @@ void parser___parser_prod___AImplicitSelfExpr___replace_child(val_t p0, val_t p1
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AImplicitSelfExpr___visit_all[] = "parser_prod::AImplicitSelfExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AImplicitSelfExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6650;
+  fra.me.line = 6772;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
@@ -35371,6 +36910,7 @@ void parser___parser_prod___AImplicitSelfExpr___visit_all(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATrueExpr___empty_init[] = "parser_prod::ATrueExpr::empty_init";
 void parser___parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table){
   int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATrueExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -35378,51 +36918,58 @@ void parser___parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos225]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6655;
+  fra.me.line = 6777;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos225] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATrueExpr___init_atrueexpr[] = "parser_prod::ATrueExpr::init_atrueexpr";
 void parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, int* init_table){
   int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATrueExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos226]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6657;
+  fra.me.line = 6779;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___init_atrueexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6661 */
-  CALL_parser___parser_prod___ATrueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6662 */
+  /* parser/parser_prod.nit:6779 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6783 */
+  CALL_parser___parser_prod___ATrueExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6784 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6662);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6784);
   }
-  ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6663 */
+  ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6785 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6663);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6785);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos226] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATrueExpr___replace_child[] = "parser_prod::ATrueExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -35430,10 +36977,11 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6666;
+  fra.me.line = 6788;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35441,11 +36989,11 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6668 */
+  /* parser/parser_prod.nit:6790 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 6668);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 6790);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35455,13 +37003,13 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6669 */
+    /* parser/parser_prod.nit:6791 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -35470,56 +37018,59 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6670 */
+      /* parser/parser_prod.nit:6792 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6670);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6792);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6671 */
+      /* parser/parser_prod.nit:6793 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwtrue, ID_parser___parser_nodes___TKwtrue)) /*cast TKwtrue*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6671);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6793);
       }
-      /* ./parser//parser_prod.nit:6672 */
+      /* parser/parser_prod.nit:6794 */
       ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6674 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6674);
+      /* parser/parser_prod.nit:6796 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6796);
     }
-    /* ./parser//parser_prod.nit:6676 */
+    /* parser/parser_prod.nit:6798 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ATrueExpr___visit_all[] = "parser_prod::ATrueExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ATrueExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6680;
+  fra.me.line = 6802;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6682 */
+  /* parser/parser_prod.nit:6804 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 6682);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 6804);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFalseExpr___empty_init[] = "parser_prod::AFalseExpr::empty_init";
 void parser___parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table){
   int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFalseExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -35527,51 +37078,58 @@ void parser___parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos227]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6686;
+  fra.me.line = 6808;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos227] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFalseExpr___init_afalseexpr[] = "parser_prod::AFalseExpr::init_afalseexpr";
 void parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, int* init_table){
   int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFalseExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos228]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6688;
+  fra.me.line = 6810;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___init_afalseexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6692 */
-  CALL_parser___parser_prod___AFalseExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6693 */
+  /* parser/parser_prod.nit:6810 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6814 */
+  CALL_parser___parser_prod___AFalseExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6815 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6693);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6815);
   }
-  ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6694 */
+  ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6816 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6694);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6816);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos228] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFalseExpr___replace_child[] = "parser_prod::AFalseExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -35579,10 +37137,11 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6697;
+  fra.me.line = 6819;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35590,11 +37149,11 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6699 */
+  /* parser/parser_prod.nit:6821 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 6699);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 6821);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35604,13 +37163,13 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6700 */
+    /* parser/parser_prod.nit:6822 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -35619,56 +37178,59 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6701 */
+      /* parser/parser_prod.nit:6823 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6701);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6823);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6702 */
+      /* parser/parser_prod.nit:6824 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwfalse, ID_parser___parser_nodes___TKwfalse)) /*cast TKwfalse*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6702);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6824);
       }
-      /* ./parser//parser_prod.nit:6703 */
+      /* parser/parser_prod.nit:6825 */
       ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6705 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6705);
+      /* parser/parser_prod.nit:6827 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6827);
     }
-    /* ./parser//parser_prod.nit:6707 */
+    /* parser/parser_prod.nit:6829 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFalseExpr___visit_all[] = "parser_prod::AFalseExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AFalseExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6711;
+  fra.me.line = 6833;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6713 */
+  /* parser/parser_prod.nit:6835 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 6713);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 6835);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANullExpr___empty_init[] = "parser_prod::ANullExpr::empty_init";
 void parser___parser_prod___ANullExpr___empty_init(val_t p0, int* init_table){
   int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANullExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -35676,51 +37238,58 @@ void parser___parser_prod___ANullExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos229]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6717;
+  fra.me.line = 6839;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos229] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANullExpr___init_anullexpr[] = "parser_prod::ANullExpr::init_anullexpr";
 void parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, int* init_table){
   int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANullExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos230]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6719;
+  fra.me.line = 6841;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___init_anullexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6723 */
-  CALL_parser___parser_prod___ANullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6724 */
+  /* parser/parser_prod.nit:6841 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6845 */
+  CALL_parser___parser_prod___ANullExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6846 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6724);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6846);
   }
-  ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6725 */
+  ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6847 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6725);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6847);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos230] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANullExpr___replace_child[] = "parser_prod::ANullExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -35728,10 +37297,11 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6728;
+  fra.me.line = 6850;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35739,11 +37309,11 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6730 */
+  /* parser/parser_prod.nit:6852 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 6730);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 6852);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35753,13 +37323,13 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6731 */
+    /* parser/parser_prod.nit:6853 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -35768,56 +37338,59 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6732 */
+      /* parser/parser_prod.nit:6854 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6732);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6854);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6733 */
+      /* parser/parser_prod.nit:6855 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast TKwnull*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6733);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6855);
       }
-      /* ./parser//parser_prod.nit:6734 */
+      /* parser/parser_prod.nit:6856 */
       ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6736 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6736);
+      /* parser/parser_prod.nit:6858 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6858);
     }
-    /* ./parser//parser_prod.nit:6738 */
+    /* parser/parser_prod.nit:6860 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ANullExpr___visit_all[] = "parser_prod::ANullExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ANullExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6742;
+  fra.me.line = 6864;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6744 */
+  /* parser/parser_prod.nit:6866 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 6744);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 6866);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIntExpr___empty_init[] = "parser_prod::AIntExpr::empty_init";
 void parser___parser_prod___AIntExpr___empty_init(val_t p0, int* init_table){
   int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -35825,51 +37398,58 @@ void parser___parser_prod___AIntExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos231]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6748;
+  fra.me.line = 6870;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos231] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIntExpr___init_aintexpr[] = "parser_prod::AIntExpr::init_aintexpr";
 void parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1, int* init_table){
   int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos232]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6750;
+  fra.me.line = 6872;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___init_aintexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6754 */
-  CALL_parser___parser_prod___AIntExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6755 */
+  /* parser/parser_prod.nit:6872 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6876 */
+  CALL_parser___parser_prod___AIntExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6877 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6755);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6877);
   }
-  ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6756 */
+  ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6878 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6756);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6878);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos232] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIntExpr___replace_child[] = "parser_prod::AIntExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -35877,10 +37457,11 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6759;
+  fra.me.line = 6881;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35888,11 +37469,11 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6761 */
+  /* parser/parser_prod.nit:6883 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 6761);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 6883);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35902,13 +37483,13 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6762 */
+    /* parser/parser_prod.nit:6884 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -35917,56 +37498,59 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6763 */
+      /* parser/parser_prod.nit:6885 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6763);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6885);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6764 */
+      /* parser/parser_prod.nit:6886 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TNumber, ID_parser___parser_nodes___TNumber)) /*cast TNumber*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6764);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6886);
       }
-      /* ./parser//parser_prod.nit:6765 */
+      /* parser/parser_prod.nit:6887 */
       ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6767 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6767);
+      /* parser/parser_prod.nit:6889 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6889);
     }
-    /* ./parser//parser_prod.nit:6769 */
+    /* parser/parser_prod.nit:6891 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AIntExpr___visit_all[] = "parser_prod::AIntExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AIntExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6773;
+  fra.me.line = 6895;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6775 */
+  /* parser/parser_prod.nit:6897 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 6775);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 6897);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFloatExpr___empty_init[] = "parser_prod::AFloatExpr::empty_init";
 void parser___parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table){
   int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFloatExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -35974,51 +37558,58 @@ void parser___parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos233]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6779;
+  fra.me.line = 6901;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos233] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFloatExpr___init_afloatexpr[] = "parser_prod::AFloatExpr::init_afloatexpr";
 void parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, int* init_table){
   int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFloatExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos234]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6781;
+  fra.me.line = 6903;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___init_afloatexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6785 */
-  CALL_parser___parser_prod___AFloatExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6786 */
+  /* parser/parser_prod.nit:6903 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6907 */
+  CALL_parser___parser_prod___AFloatExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6908 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6786);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6908);
   }
-  ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6787 */
+  ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6909 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6787);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6909);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos234] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFloatExpr___replace_child[] = "parser_prod::AFloatExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -36026,10 +37617,11 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6790;
+  fra.me.line = 6912;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36037,11 +37629,11 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6792 */
+  /* parser/parser_prod.nit:6914 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 6792);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 6914);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36051,13 +37643,13 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6793 */
+    /* parser/parser_prod.nit:6915 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -36066,56 +37658,59 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6794 */
+      /* parser/parser_prod.nit:6916 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6794);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6916);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6795 */
+      /* parser/parser_prod.nit:6917 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TFloat, ID_parser___parser_nodes___TFloat)) /*cast TFloat*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6795);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6917);
       }
-      /* ./parser//parser_prod.nit:6796 */
+      /* parser/parser_prod.nit:6918 */
       ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6798 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6798);
+      /* parser/parser_prod.nit:6920 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6920);
     }
-    /* ./parser//parser_prod.nit:6800 */
+    /* parser/parser_prod.nit:6922 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AFloatExpr___visit_all[] = "parser_prod::AFloatExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AFloatExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6804;
+  fra.me.line = 6926;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6806 */
+  /* parser/parser_prod.nit:6928 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 6806);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 6928);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACharExpr___empty_init[] = "parser_prod::ACharExpr::empty_init";
 void parser___parser_prod___ACharExpr___empty_init(val_t p0, int* init_table){
   int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACharExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -36123,51 +37718,58 @@ void parser___parser_prod___ACharExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos235]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6810;
+  fra.me.line = 6932;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos235] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACharExpr___init_acharexpr[] = "parser_prod::ACharExpr::init_acharexpr";
 void parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, int* init_table){
   int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACharExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos236]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6812;
+  fra.me.line = 6934;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___init_acharexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6816 */
-  CALL_parser___parser_prod___ACharExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6817 */
+  /* parser/parser_prod.nit:6934 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6938 */
+  CALL_parser___parser_prod___ACharExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6939 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6817);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6939);
   }
-  ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6818 */
+  ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6940 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6818);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6940);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos236] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACharExpr___replace_child[] = "parser_prod::ACharExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -36175,10 +37777,11 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6821;
+  fra.me.line = 6943;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36186,11 +37789,11 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6823 */
+  /* parser/parser_prod.nit:6945 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 6823);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 6945);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36200,13 +37803,13 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6824 */
+    /* parser/parser_prod.nit:6946 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -36215,56 +37818,59 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6825 */
+      /* parser/parser_prod.nit:6947 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6825);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6947);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6826 */
+      /* parser/parser_prod.nit:6948 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TChar, ID_parser___parser_nodes___TChar)) /*cast TChar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6826);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6948);
       }
-      /* ./parser//parser_prod.nit:6827 */
+      /* parser/parser_prod.nit:6949 */
       ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6829 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6829);
+      /* parser/parser_prod.nit:6951 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6951);
     }
-    /* ./parser//parser_prod.nit:6831 */
+    /* parser/parser_prod.nit:6953 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ACharExpr___visit_all[] = "parser_prod::ACharExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ACharExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6835;
+  fra.me.line = 6957;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6837 */
+  /* parser/parser_prod.nit:6959 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 6837);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 6959);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStringExpr___empty_init[] = "parser_prod::AStringExpr::empty_init";
 void parser___parser_prod___AStringExpr___empty_init(val_t p0, int* init_table){
   int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStringExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -36272,51 +37878,58 @@ void parser___parser_prod___AStringExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos237]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6841;
+  fra.me.line = 6963;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos237] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStringExpr___init_astringexpr[] = "parser_prod::AStringExpr::init_astringexpr";
 void parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, int* init_table){
   int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStringExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos238]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6843;
+  fra.me.line = 6965;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___init_astringexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6847 */
-  CALL_parser___parser_prod___AStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6848 */
+  /* parser/parser_prod.nit:6965 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6969 */
+  CALL_parser___parser_prod___AStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:6970 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6848);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6970);
   }
-  ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6849 */
+  ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6971 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6849);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6971);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos238] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStringExpr___replace_child[] = "parser_prod::AStringExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -36324,10 +37937,11 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6852;
+  fra.me.line = 6974;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36335,11 +37949,11 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6854 */
+  /* parser/parser_prod.nit:6976 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6854);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6976);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36349,13 +37963,13 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6855 */
+    /* parser/parser_prod.nit:6977 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -36364,56 +37978,59 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6856 */
+      /* parser/parser_prod.nit:6978 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6856);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6978);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6857 */
+      /* parser/parser_prod.nit:6979 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6857);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6979);
       }
-      /* ./parser//parser_prod.nit:6858 */
+      /* parser/parser_prod.nit:6980 */
       ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6860 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6860);
+      /* parser/parser_prod.nit:6982 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6982);
     }
-    /* ./parser//parser_prod.nit:6862 */
+    /* parser/parser_prod.nit:6984 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStringExpr___visit_all[] = "parser_prod::AStringExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStringExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6866;
+  fra.me.line = 6988;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6868 */
+  /* parser/parser_prod.nit:6990 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6868);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6990);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStartStringExpr___empty_init[] = "parser_prod::AStartStringExpr::empty_init";
 void parser___parser_prod___AStartStringExpr___empty_init(val_t p0, int* init_table){
   int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStartStringExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -36421,51 +38038,58 @@ void parser___parser_prod___AStartStringExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos239]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6872;
+  fra.me.line = 6994;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos239] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStartStringExpr___init_astartstringexpr[] = "parser_prod::AStartStringExpr::init_astartstringexpr";
 void parser___parser_prod___AStartStringExpr___init_astartstringexpr(val_t p0, val_t p1, int* init_table){
   int itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStartStringExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos240]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6874;
+  fra.me.line = 6996;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___init_astartstringexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6878 */
-  CALL_parser___parser_prod___AStartStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6879 */
+  /* parser/parser_prod.nit:6996 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7000 */
+  CALL_parser___parser_prod___AStartStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:7001 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6879);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7001);
   }
-  ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6880 */
+  ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7002 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6880);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7002);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos240] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStartStringExpr___replace_child[] = "parser_prod::AStartStringExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -36473,10 +38097,11 @@ void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6883;
+  fra.me.line = 7005;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36484,11 +38109,11 @@ void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6885 */
+  /* parser/parser_prod.nit:7007 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6885);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7007);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36498,13 +38123,13 @@ void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6886 */
+    /* parser/parser_prod.nit:7008 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -36513,56 +38138,59 @@ void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6887 */
+      /* parser/parser_prod.nit:7009 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6887);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7009);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6888 */
+      /* parser/parser_prod.nit:7010 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TStartString, ID_parser___parser_nodes___TStartString)) /*cast TStartString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6888);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7010);
       }
-      /* ./parser//parser_prod.nit:6889 */
+      /* parser/parser_prod.nit:7011 */
       ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6891 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6891);
+      /* parser/parser_prod.nit:7013 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7013);
     }
-    /* ./parser//parser_prod.nit:6893 */
+    /* parser/parser_prod.nit:7015 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AStartStringExpr___visit_all[] = "parser_prod::AStartStringExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStartStringExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6897;
+  fra.me.line = 7019;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6899 */
+  /* parser/parser_prod.nit:7021 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6899);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7021);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMidStringExpr___empty_init[] = "parser_prod::AMidStringExpr::empty_init";
 void parser___parser_prod___AMidStringExpr___empty_init(val_t p0, int* init_table){
   int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMidStringExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -36570,51 +38198,58 @@ void parser___parser_prod___AMidStringExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos241]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6903;
+  fra.me.line = 7025;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos241] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMidStringExpr___init_amidstringexpr[] = "parser_prod::AMidStringExpr::init_amidstringexpr";
 void parser___parser_prod___AMidStringExpr___init_amidstringexpr(val_t p0, val_t p1, int* init_table){
   int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMidStringExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos242]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6905;
+  fra.me.line = 7027;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___init_amidstringexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6909 */
-  CALL_parser___parser_prod___AMidStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6910 */
+  /* parser/parser_prod.nit:7027 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7031 */
+  CALL_parser___parser_prod___AMidStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:7032 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6910);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7032);
   }
-  ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6911 */
+  ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7033 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6911);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7033);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos242] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMidStringExpr___replace_child[] = "parser_prod::AMidStringExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -36622,10 +38257,11 @@ void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6914;
+  fra.me.line = 7036;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36633,11 +38269,11 @@ void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6916 */
+  /* parser/parser_prod.nit:7038 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6916);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7038);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36647,13 +38283,13 @@ void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6917 */
+    /* parser/parser_prod.nit:7039 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -36662,56 +38298,59 @@ void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6918 */
+      /* parser/parser_prod.nit:7040 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6918);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7040);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6919 */
+      /* parser/parser_prod.nit:7041 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TMidString, ID_parser___parser_nodes___TMidString)) /*cast TMidString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6919);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7041);
       }
-      /* ./parser//parser_prod.nit:6920 */
+      /* parser/parser_prod.nit:7042 */
       ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6922 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6922);
+      /* parser/parser_prod.nit:7044 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7044);
     }
-    /* ./parser//parser_prod.nit:6924 */
+    /* parser/parser_prod.nit:7046 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMidStringExpr___visit_all[] = "parser_prod::AMidStringExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AMidStringExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6928;
+  fra.me.line = 7050;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6930 */
+  /* parser/parser_prod.nit:7052 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6930);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7052);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEndStringExpr___empty_init[] = "parser_prod::AEndStringExpr::empty_init";
 void parser___parser_prod___AEndStringExpr___empty_init(val_t p0, int* init_table){
   int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEndStringExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -36719,51 +38358,58 @@ void parser___parser_prod___AEndStringExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos243]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6934;
+  fra.me.line = 7056;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos243] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEndStringExpr___init_aendstringexpr[] = "parser_prod::AEndStringExpr::init_aendstringexpr";
 void parser___parser_prod___AEndStringExpr___init_aendstringexpr(val_t p0, val_t p1, int* init_table){
   int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEndStringExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos244]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6936;
+  fra.me.line = 7058;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___init_aendstringexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6940 */
-  CALL_parser___parser_prod___AEndStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6941 */
+  /* parser/parser_prod.nit:7058 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7062 */
+  CALL_parser___parser_prod___AEndStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:7063 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6941);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7063);
   }
-  ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6942 */
+  ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7064 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6942);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7064);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos244] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEndStringExpr___replace_child[] = "parser_prod::AEndStringExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -36771,10 +38417,11 @@ void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6945;
+  fra.me.line = 7067;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36782,11 +38429,11 @@ void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6947 */
+  /* parser/parser_prod.nit:7069 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6947);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7069);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36796,13 +38443,13 @@ void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6948 */
+    /* parser/parser_prod.nit:7070 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -36811,56 +38458,59 @@ void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:6949 */
+      /* parser/parser_prod.nit:7071 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6949);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7071);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6950 */
+      /* parser/parser_prod.nit:7072 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TEndString, ID_parser___parser_nodes___TEndString)) /*cast TEndString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6950);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7072);
       }
-      /* ./parser//parser_prod.nit:6951 */
+      /* parser/parser_prod.nit:7073 */
       ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6953 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6953);
+      /* parser/parser_prod.nit:7075 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7075);
     }
-    /* ./parser//parser_prod.nit:6955 */
+    /* parser/parser_prod.nit:7077 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AEndStringExpr___visit_all[] = "parser_prod::AEndStringExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AEndStringExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6959;
+  fra.me.line = 7081;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6961 */
+  /* parser/parser_prod.nit:7083 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6961);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7083);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperstringExpr___empty_init[] = "parser_prod::ASuperstringExpr::empty_init";
 void parser___parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_table){
   int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperstringExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -36868,16 +38518,18 @@ void parser___parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos245]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6965;
+  fra.me.line = 7087;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos245] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr[] = "parser_prod::ASuperstringExpr::init_asuperstringexpr";
 void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1, int* init_table){
   int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperstringExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -36885,15 +38537,16 @@ void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, v
   if (init_table[itpos246]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6967;
+  fra.me.line = 7089;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6971 */
+  /* parser/parser_prod.nit:7093 */
   CALL_parser___parser_prod___ASuperstringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_1));
   stack_frame_head = fra.me.prev;
@@ -36905,38 +38558,40 @@ void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, v
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:6972 */
+    /* parser/parser_prod.nit:7094 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6973 */
+    /* parser/parser_prod.nit:7095 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6973);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7095);
     }
-    /* ./parser//parser_prod.nit:6974 */
+    /* parser/parser_prod.nit:7096 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6974);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7096);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6975 */
+    /* parser/parser_prod.nit:7097 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ASuperstringExpr___replace_child[] = "parser_prod::ASuperstringExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -36947,10 +38602,11 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6979;
+  fra.me.line = 7101;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36958,37 +38614,42 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6981 */
+  /* parser/parser_prod.nit:7103 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6981);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7103);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6981 */
+      /* parser/parser_prod.nit:7103 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6982 */
+      /* parser/parser_prod.nit:7104 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6982);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7104);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -36996,13 +38657,13 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6983 */
+        /* parser/parser_prod.nit:7105 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -37011,47 +38672,47 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:6984 */
+          /* parser/parser_prod.nit:7106 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6984);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7106);
           }
-          /* ./parser//parser_prod.nit:6985 */
+          /* parser/parser_prod.nit:7107 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6985);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7107);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6986 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:7108 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6986);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7108);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:6988 */
+          /* parser/parser_prod.nit:7110 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6988);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7110);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:6990 */
+        /* parser/parser_prod.nit:7112 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
@@ -37060,25 +38721,27 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperstringExpr___visit_all[] = "parser_prod::ASuperstringExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6995;
+  fra.me.line = 7117;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6997 */
+  /* parser/parser_prod.nit:7119 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6997);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7119);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASuperstringExpr___visit_all_1));
@@ -37095,16 +38758,18 @@ void parser___parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6998 */
+    /* parser/parser_prod.nit:7120 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AParExpr___empty_init[] = "parser_prod::AParExpr::empty_init";
 void parser___parser_prod___AParExpr___empty_init(val_t p0, int* init_table){
   int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParExpr].i;
   struct {struct stack_frame_t me;} fra;
@@ -37112,241 +38777,100 @@ void parser___parser_prod___AParExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos247]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7003;
+  fra.me.line = 7125;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
   init_table[itpos247] = 1;
   return;
 }
-void parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, int* init_table){
+static const char LOCATE_parser___parser_prod___AParExpr___init_aparexpr[] = "parser_prod::AParExpr::init_aparexpr";
+void parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos248]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7005;
+  fra.me.line = 7127;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___init_aparexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7009 */
-  CALL_parser___parser_prod___AParExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7010 */
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7010);
-  }
-  ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7011 */
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7011);
-  }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos248] = 1;
-  return;
-}
-void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7014;
-  fra.me.meth = LOCATE_parser___parser_prod___AParExpr___replace_child;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7016 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7016);
-  }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB0 = REGB1;
-  }
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7017 */
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
-        REGB0 = REGB1;
-      } else {
-        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB0 = REGB1;
-      }
-    }
-    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-    if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7018 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7018);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7019 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7019);
-      }
-      /* ./parser//parser_prod.nit:7020 */
-      ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:7022 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7022);
-    }
-    /* ./parser//parser_prod.nit:7024 */
-    goto label1;
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___parser_prod___AParExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7028;
-  fra.me.meth = LOCATE_parser___parser_prod___AParExpr___visit_all;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7030 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7030);
-  }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___parser_prod___AAsCastExpr___empty_init(val_t p0, int* init_table){
-  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsCastExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos249]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7034;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___empty_init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos249] = 1;
-  return;
-}
-void parser___parser_prod___AAsCastExpr___init_aascastexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos250 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsCastExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos250]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7036;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___init_aascastexpr;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7042 */
-  CALL_parser___parser_prod___AAsCastExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7043 */
+  /* parser/parser_prod.nit:7127 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7133 */
+  CALL_parser___parser_prod___AParExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:7134 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7043);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7134);
   }
-  ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7044 */
+  ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7135 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7044);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7135);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7045 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:7136 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7045);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7136);
   }
-  ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7046 */
+  ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7137 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7046);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7137);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7047 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:7138 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7047);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7138);
   }
-  ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7048 */
+  ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:7139 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7048);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7139);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos250] = 1;
+  init_table[itpos248] = 1;
   return;
 }
-void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___AParExpr___replace_child[] = "parser_prod::AParExpr::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7051;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___replace_child;
+  fra.me.line = 7142;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -37354,13 +38878,13 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7053 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7144 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7053);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7144);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37368,13 +38892,13 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7054 */
+    /* parser/parser_prod.nit:7145 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -37383,34 +38907,34 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7055 */
+      /* parser/parser_prod.nit:7146 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7055);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7146);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7056 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+      /* parser/parser_prod.nit:7147 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7056);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7147);
       }
-      /* ./parser//parser_prod.nit:7057 */
-      ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7148 */
+      ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7059 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7059);
+      /* parser/parser_prod.nit:7150 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7150);
     }
-    /* ./parser//parser_prod.nit:7061 */
+    /* parser/parser_prod.nit:7152 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7063 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7154 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7063);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7154);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37418,13 +38942,13 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7064 */
+    /* parser/parser_prod.nit:7155 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -37433,34 +38957,34 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7065 */
+      /* parser/parser_prod.nit:7156 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7065);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7156);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7066 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
+      /* parser/parser_prod.nit:7157 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7066);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7157);
       }
-      /* ./parser//parser_prod.nit:7067 */
-      ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7158 */
+      ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7069 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7069);
+      /* parser/parser_prod.nit:7160 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7160);
     }
-    /* ./parser//parser_prod.nit:7071 */
+    /* parser/parser_prod.nit:7162 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7073 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7164 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7073);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7164);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37468,13 +38992,13 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7074 */
+    /* parser/parser_prod.nit:7165 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -37483,170 +39007,663 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7075 */
+      /* parser/parser_prod.nit:7166 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7075);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7166);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7076 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+      /* parser/parser_prod.nit:7167 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7076);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7167);
       }
-      /* ./parser//parser_prod.nit:7077 */
-      ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7168 */
+      ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7079 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7079);
+      /* parser/parser_prod.nit:7170 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7170);
     }
-    /* ./parser//parser_prod.nit:7081 */
+    /* parser/parser_prod.nit:7172 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AAsCastExpr___visit_all(val_t p0, val_t p1){
+static const char LOCATE_parser___parser_prod___AParExpr___visit_all[] = "parser_prod::AParExpr::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AParExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7085;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___visit_all;
+  fra.me.line = 7176;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7087 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7178 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7087);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7178);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7088 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7179 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7088);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7179);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7089 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7180 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7089);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7180);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AAsNotnullExpr___empty_init(val_t p0, int* init_table){
-  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNotnullExpr].i;
+static const char LOCATE_parser___parser_prod___AAsCastExpr___empty_init[] = "parser_prod::AAsCastExpr::empty_init";
+void parser___parser_prod___AAsCastExpr___empty_init(val_t p0, int* init_table){
+  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsCastExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos251]) return;
+  if (init_table[itpos249]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7093;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___empty_init;
+  fra.me.line = 7184;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos251] = 1;
+  init_table[itpos249] = 1;
   return;
 }
-void parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNotnullExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___parser_prod___AAsCastExpr___init_aascastexpr[] = "parser_prod::AAsCastExpr::init_aascastexpr";
+void parser___parser_prod___AAsCastExpr___init_aascastexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+  int itpos250 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsCastExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos252]) return;
+  if (init_table[itpos250]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7095;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr;
+  fra.me.line = 7186;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___init_aascastexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:7102 */
-  CALL_parser___parser_prod___AAsNotnullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7103 */
+  fra.me.REG[5] = p5;
+  /* parser/parser_prod.nit:7186 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7194 */
+  CALL_parser___parser_prod___AAsCastExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:7195 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7103);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7195);
   }
-  ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7104 */
+  ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7196 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7104);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7196);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7105 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7197 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7105);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7197);
   }
-  ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7106 */
+  ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7198 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7106);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7198);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7107 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7199 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7107);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7199);
   }
-  ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7108 */
+  ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[6]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:7200 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7108);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7200);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7109 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7201 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7109);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7201);
   }
-  ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:7110 */
+  ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:7202 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7110);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7202);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7203 */
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7203);
+  }
+  ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:7204 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7204);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos250] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAsCastExpr___replace_child[] = "parser_prod::AAsCastExpr::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7207;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7209 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7209);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7210 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7211 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7211);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7212 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7212);
+      }
+      /* parser/parser_prod.nit:7213 */
+      ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7215 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7215);
+    }
+    /* parser/parser_prod.nit:7217 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7219 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7219);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7220 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7221 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7221);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7222 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7222);
+      }
+      /* parser/parser_prod.nit:7223 */
+      ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7225 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7225);
+    }
+    /* parser/parser_prod.nit:7227 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7229 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7229);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7230 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7231 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7231);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7232 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7232);
+      }
+      /* parser/parser_prod.nit:7233 */
+      ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7235 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7235);
+    }
+    /* parser/parser_prod.nit:7237 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7239 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7239);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7240 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7241 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7241);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7242 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7242);
+      }
+      /* parser/parser_prod.nit:7243 */
+      ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7245 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7245);
+    }
+    /* parser/parser_prod.nit:7247 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7249 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7249);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7250 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7251 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7251);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7252 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7252);
+      }
+      /* parser/parser_prod.nit:7253 */
+      ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7255 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7255);
+    }
+    /* parser/parser_prod.nit:7257 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAsCastExpr___visit_all[] = "parser_prod::AAsCastExpr::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AAsCastExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7261;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7263 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7263);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7264 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7264);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7265 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7265);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7266 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7266);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7267 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7267);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAsNotnullExpr___empty_init[] = "parser_prod::AAsNotnullExpr::empty_init";
+void parser___parser_prod___AAsNotnullExpr___empty_init(val_t p0, int* init_table){
+  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNotnullExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos251]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7271;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos251] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr[] = "parser_prod::AAsNotnullExpr::init_aasnotnullexpr";
+void parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+  int itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNotnullExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos252]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7273;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* parser/parser_prod.nit:7273 */
+  fra.me.REG[7] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7282 */
+  CALL_parser___parser_prod___AAsNotnullExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
+  /* parser/parser_prod.nit:7283 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7283);
+  }
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[7]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7284 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7284);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+  /* parser/parser_prod.nit:7285 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7285);
+  }
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[7]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7286 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7286);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+  /* parser/parser_prod.nit:7287 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7287);
+  }
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[7]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:7288 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7288);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:7289 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7289);
+  }
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[7]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:7290 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7290);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:7291 */
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7291);
+  }
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[7]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:7292 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7292);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+  /* parser/parser_prod.nit:7293 */
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7293);
+  }
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[7]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:7294 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7294);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
   init_table[itpos252] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AAsNotnullExpr___replace_child[] = "parser_prod::AAsNotnullExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -37654,10 +39671,11 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7113;
+  fra.me.line = 7297;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -37665,11 +39683,11 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7115 */
+  /* parser/parser_prod.nit:7299 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7115);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7299);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37679,13 +39697,13 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7116 */
+    /* parser/parser_prod.nit:7300 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -37694,32 +39712,32 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7117 */
+      /* parser/parser_prod.nit:7301 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7117);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7301);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7118 */
+      /* parser/parser_prod.nit:7302 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7118);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7302);
       }
-      /* ./parser//parser_prod.nit:7119 */
+      /* parser/parser_prod.nit:7303 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7121 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7121);
+      /* parser/parser_prod.nit:7305 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7305);
     }
-    /* ./parser//parser_prod.nit:7123 */
+    /* parser/parser_prod.nit:7307 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7125 */
+  /* parser/parser_prod.nit:7309 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7125);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7309);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37729,13 +39747,13 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7126 */
+    /* parser/parser_prod.nit:7310 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -37744,32 +39762,82 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7127 */
+      /* parser/parser_prod.nit:7311 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7127);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7311);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7128 */
+      /* parser/parser_prod.nit:7312 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7128);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7312);
       }
-      /* ./parser//parser_prod.nit:7129 */
+      /* parser/parser_prod.nit:7313 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7131 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7131);
+      /* parser/parser_prod.nit:7315 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7315);
+    }
+    /* parser/parser_prod.nit:7317 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7319 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7319);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7320 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7321 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7321);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7322 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7322);
+      }
+      /* parser/parser_prod.nit:7323 */
+      ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7325 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7325);
     }
-    /* ./parser//parser_prod.nit:7133 */
+    /* parser/parser_prod.nit:7327 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7135 */
+  /* parser/parser_prod.nit:7329 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7135);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7329);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37779,13 +39847,13 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7136 */
+    /* parser/parser_prod.nit:7330 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -37794,32 +39862,32 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7137 */
+      /* parser/parser_prod.nit:7331 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7137);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7331);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7138 */
+      /* parser/parser_prod.nit:7332 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast TKwnot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7138);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7332);
       }
-      /* ./parser//parser_prod.nit:7139 */
+      /* parser/parser_prod.nit:7333 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7141 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7141);
+      /* parser/parser_prod.nit:7335 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7335);
     }
-    /* ./parser//parser_prod.nit:7143 */
+    /* parser/parser_prod.nit:7337 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7145 */
+  /* parser/parser_prod.nit:7339 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7145);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7339);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37829,13 +39897,1422 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7146 */
+    /* parser/parser_prod.nit:7340 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7341 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7341);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7342 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast TKwnull*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7342);
+      }
+      /* parser/parser_prod.nit:7343 */
+      ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7345 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7345);
+    }
+    /* parser/parser_prod.nit:7347 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7349 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7349);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7350 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7351 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7351);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7352 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7352);
+      }
+      /* parser/parser_prod.nit:7353 */
+      ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7355 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7355);
+    }
+    /* parser/parser_prod.nit:7357 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAsNotnullExpr___visit_all[] = "parser_prod::AAsNotnullExpr::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AAsNotnullExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7361;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7363 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7363);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7364 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7364);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7365 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7365);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7366 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7366);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7367 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7367);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7368 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7368);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AIssetAttrExpr___empty_init[] = "parser_prod::AIssetAttrExpr::empty_init";
+void parser___parser_prod___AIssetAttrExpr___empty_init(val_t p0, int* init_table){
+  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIssetAttrExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos253]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7372;
+  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos253] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr[] = "parser_prod::AIssetAttrExpr::init_aissetattrexpr";
+void parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIssetAttrExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos254]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7374;
+  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:7374 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7380 */
+  CALL_parser___parser_prod___AIssetAttrExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:7381 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7381);
+  }
+  ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7382 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7382);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:7383 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7383);
+  }
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7384 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7384);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:7385 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7385);
+  }
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:7386 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7386);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos254] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AIssetAttrExpr___replace_child[] = "parser_prod::AIssetAttrExpr::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7389;
+  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7391 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 7391);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7392 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7393 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7393);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7394 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast TKwisset*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7394);
+      }
+      /* parser/parser_prod.nit:7395 */
+      ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7397 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7397);
+    }
+    /* parser/parser_prod.nit:7399 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7401 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7401);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7402 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7403 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7403);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7404 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7404);
+      }
+      /* parser/parser_prod.nit:7405 */
+      ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7407 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7407);
+    }
+    /* parser/parser_prod.nit:7409 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7411 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7411);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7412 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7413 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7413);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7414 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7414);
+      }
+      /* parser/parser_prod.nit:7415 */
+      ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7417 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7417);
+    }
+    /* parser/parser_prod.nit:7419 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AIssetAttrExpr___visit_all[] = "parser_prod::AIssetAttrExpr::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AIssetAttrExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7423;
+  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7425 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 7425);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7426 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7426);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7427 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7427);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ADebugTypeExpr___empty_init[] = "parser_prod::ADebugTypeExpr::empty_init";
+void parser___parser_prod___ADebugTypeExpr___empty_init(val_t p0, int* init_table){
+  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADebugTypeExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos255]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7431;
+  fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos255] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr[] = "parser_prod::ADebugTypeExpr::init_adebugtypeexpr";
+void parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos256 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADebugTypeExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos256]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7433;
+  fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:7433 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7440 */
+  CALL_parser___parser_prod___ADebugTypeExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:7441 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7441);
+  }
+  ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7442 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7442);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7443 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7443);
+  }
+  ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7444 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7444);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7445 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7445);
+  }
+  ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:7446 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7446);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7447 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7447);
+  }
+  ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:7448 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7448);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos256] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ADebugTypeExpr___replace_child[] = "parser_prod::ADebugTypeExpr::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7451;
+  fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7453 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_prod, 7453);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7454 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7455 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7455);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7456 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdebug, ID_parser___parser_nodes___TKwdebug)) /*cast TKwdebug*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7456);
+      }
+      /* parser/parser_prod.nit:7457 */
+      ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7459 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7459);
+    }
+    /* parser/parser_prod.nit:7461 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7463 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 7463);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7464 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7465 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7465);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7466 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast TKwtype*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7466);
+      }
+      /* parser/parser_prod.nit:7467 */
+      ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7469 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7469);
+    }
+    /* parser/parser_prod.nit:7471 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7473 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7473);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7474 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7475 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7475);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7476 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7476);
+      }
+      /* parser/parser_prod.nit:7477 */
+      ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7479 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7479);
+    }
+    /* parser/parser_prod.nit:7481 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7483 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7483);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7484 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7485 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7485);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7486 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7486);
+      }
+      /* parser/parser_prod.nit:7487 */
+      ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7489 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7489);
+    }
+    /* parser/parser_prod.nit:7491 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ADebugTypeExpr___visit_all[] = "parser_prod::ADebugTypeExpr::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___ADebugTypeExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7495;
+  fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7497 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_prod, 7497);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7498 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 7498);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7499 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7499);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7500 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7500);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AListExprs___empty_init[] = "parser_prod::AListExprs::empty_init";
+void parser___parser_prod___AListExprs___empty_init(val_t p0, int* init_table){
+  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AListExprs].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos257]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7504;
+  fra.me.meth = LOCATE_parser___parser_prod___AListExprs___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos257] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AListExprs___init_alistexprs[] = "parser_prod::AListExprs::init_alistexprs";
+void parser___parser_prod___AListExprs___init_alistexprs(val_t p0, val_t p1, int* init_table){
+  int itpos258 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AListExprs].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  if (init_table[itpos258]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7506;
+  fra.me.meth = LOCATE_parser___parser_prod___AListExprs___init_alistexprs;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7510 */
+  CALL_parser___parser_prod___AListExprs___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AListExprs___init_alistexprs_1));
+  stack_frame_head = fra.me.prev;
+  init_table[itpos258] = 1;
+  return;
+}
+  void OC_parser___parser_prod___AListExprs___init_alistexprs_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* parser/parser_prod.nit:7511 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AListExprs___init_alistexprs;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:7512 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7512);
+    }
+    /* parser/parser_prod.nit:7513 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7513);
+    }
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[0]);
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:7514 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___AListExprs___replace_child[] = "parser_prod::AListExprs::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AListExprs___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7518;
+  fra.me.meth = LOCATE_parser___parser_prod___AListExprs___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7520 */
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7520);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ../lib/standard/kernel.nit:355 */
+  while(1) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ../lib/standard/kernel.nit:355 */
+    if (UNTAG_Bool(REGB2)) {
+      /* parser/parser_prod.nit:7520 */
+      REGB2 = REGB0;
+      /* parser/parser_prod.nit:7521 */
+      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7521);
+      }
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(0);
+          REGB3 = REGB4;
+        } else {
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
+        }
+      }
+      if (UNTAG_Bool(REGB3)) {
+        /* parser/parser_prod.nit:7522 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(0);
+            REGB3 = REGB4;
+          } else {
+            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
+          }
+        }
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* parser/parser_prod.nit:7523 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7523);
+          }
+          /* parser/parser_prod.nit:7524 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7524);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:7525 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7525);
+          }
+          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          /* parser/parser_prod.nit:7527 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7527);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+        }
+        /* parser/parser_prod.nit:7529 */
+        goto label1;
+      }
+      /* ../lib/standard/kernel.nit:357 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/kernel.nit:357 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/kernel.nit:355 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AListExprs___visit_all[] = "parser_prod::AListExprs::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AListExprs___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7534;
+  fra.me.meth = LOCATE_parser___parser_prod___AListExprs___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7536 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7536);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AListExprs___visit_all_1));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser___parser_prod___AListExprs___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AListExprs___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:7537 */
+    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___AParExprs___empty_init[] = "parser_prod::AParExprs::empty_init";
+void parser___parser_prod___AParExprs___empty_init(val_t p0, int* init_table){
+  int itpos259 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParExprs].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos259]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7542;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExprs___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos259] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AParExprs___init_aparexprs[] = "parser_prod::AParExprs::init_aparexprs";
+void parser___parser_prod___AParExprs___init_aparexprs(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos260 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParExprs].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos260]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7544;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExprs___init_aparexprs;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:7544 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7550 */
+  CALL_parser___parser_prod___AParExprs___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:7551 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7551);
+  }
+  ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7552 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7552);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AParExprs___init_aparexprs_1));
+  /* parser/parser_prod.nit:7558 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7558);
+  }
+  ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:7559 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7559);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos260] = 1;
+  return;
+}
+  void OC_parser___parser_prod___AParExprs___init_aparexprs_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* parser/parser_prod.nit:7553 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AParExprs___init_aparexprs;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:7554 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7554);
+    }
+    /* parser/parser_prod.nit:7555 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[4])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7555);
+    }
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[4]);
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:7556 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___AParExprs___replace_child[] = "parser_prod::AParExprs::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 7562;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExprs___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7564 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7564);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7565 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7566 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7566);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7567 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7567);
+      }
+      /* parser/parser_prod.nit:7568 */
+      ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7570 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7570);
+    }
+    /* parser/parser_prod.nit:7572 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7574 */
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7574);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ../lib/standard/kernel.nit:355 */
+  while(1) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ../lib/standard/kernel.nit:355 */
+    if (UNTAG_Bool(REGB2)) {
+      /* parser/parser_prod.nit:7574 */
+      REGB2 = REGB0;
+      /* parser/parser_prod.nit:7575 */
+      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7575);
+      }
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(0);
+          REGB3 = REGB4;
+        } else {
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
+        }
+      }
+      if (UNTAG_Bool(REGB3)) {
+        /* parser/parser_prod.nit:7576 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(0);
+            REGB3 = REGB4;
+          } else {
+            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
+          }
+        }
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* parser/parser_prod.nit:7577 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7577);
+          }
+          /* parser/parser_prod.nit:7578 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7578);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:7579 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7579);
+          }
+          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          /* parser/parser_prod.nit:7581 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7581);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+        }
+        /* parser/parser_prod.nit:7583 */
+        goto label1;
+      }
+      /* ../lib/standard/kernel.nit:357 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/kernel.nit:357 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/kernel.nit:355 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  /* parser/parser_prod.nit:7586 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7586);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7587 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -37844,174 +41321,227 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7147 */
+      /* parser/parser_prod.nit:7588 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7147);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7588);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7148 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast TKwnull*/;
+      /* parser/parser_prod.nit:7589 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7148);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7589);
       }
-      /* ./parser//parser_prod.nit:7149 */
-      ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7590 */
+      ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7151 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7151);
+      /* parser/parser_prod.nit:7592 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7592);
     }
-    /* ./parser//parser_prod.nit:7153 */
+    /* parser/parser_prod.nit:7594 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AAsNotnullExpr___visit_all(val_t p0, val_t p1){
+static const char LOCATE_parser___parser_prod___AParExprs___visit_all[] = "parser_prod::AParExprs::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AParExprs___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7157;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___visit_all;
+  fra.me.line = 7598;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExprs___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7159 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7600 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7159);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7600);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7160 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7601 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7160);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7601);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7161 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AParExprs___visit_all_1));
+  /* parser/parser_prod.nit:7604 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7161);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7604);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7162 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7162);
-  }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AIssetAttrExpr___empty_init(val_t p0, int* init_table){
-  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIssetAttrExpr].i;
+  void OC_parser___parser_prod___AParExprs___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AParExprs___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:7602 */
+    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___ABraExprs___empty_init[] = "parser_prod::ABraExprs::empty_init";
+void parser___parser_prod___ABraExprs___empty_init(val_t p0, int* init_table){
+  int itpos261 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraExprs].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos253]) return;
+  if (init_table[itpos261]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7166;
-  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___empty_init;
+  fra.me.line = 7608;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos253] = 1;
+  init_table[itpos261] = 1;
   return;
 }
-void parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIssetAttrExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___parser_prod___ABraExprs___init_abraexprs[] = "parser_prod::ABraExprs::init_abraexprs";
+void parser___parser_prod___ABraExprs___init_abraexprs(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos262 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraExprs].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos254]) return;
+  if (init_table[itpos262]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7168;
-  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr;
+  fra.me.line = 7610;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___init_abraexprs;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7174 */
-  CALL_parser___parser_prod___AIssetAttrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7175 */
+  /* parser/parser_prod.nit:7610 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7616 */
+  CALL_parser___parser_prod___ABraExprs___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:7617 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7175);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7617);
   }
-  ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7176 */
+  ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7618 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7176);
-  }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7177 */
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7177);
-  }
-  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7178 */
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7178);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7618);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7179 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExprs___init_abraexprs_1));
+  /* parser/parser_prod.nit:7624 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7179);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7624);
   }
-  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7180 */
+  ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:7625 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7180);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7625);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos254] = 1;
+  init_table[itpos262] = 1;
   return;
 }
-void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  void OC_parser___parser_prod___ABraExprs___init_abraexprs_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* parser/parser_prod.nit:7619 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___init_abraexprs;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:7620 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7620);
+    }
+    /* parser/parser_prod.nit:7621 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[4])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7621);
+    }
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[4]);
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:7622 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___ABraExprs___replace_child[] = "parser_prod::ABraExprs::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7183;
-  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___replace_child;
+  fra.me.line = 7628;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38019,13 +41549,13 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7185 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7630 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 7185);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 7630);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38033,13 +41563,13 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7186 */
+    /* parser/parser_prod.nit:7631 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -38048,84 +41578,137 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7187 */
+      /* parser/parser_prod.nit:7632 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7187);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7632);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7188 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast TKwisset*/;
+      /* parser/parser_prod.nit:7633 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7188);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7633);
       }
-      /* ./parser//parser_prod.nit:7189 */
-      ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7634 */
+      ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7191 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7191);
+      /* parser/parser_prod.nit:7636 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7636);
     }
-    /* ./parser//parser_prod.nit:7193 */
+    /* parser/parser_prod.nit:7638 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7195 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
+  /* parser/parser_prod.nit:7640 */
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7195);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7640);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB0 = REGB1;
-  }
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7196 */
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ../lib/standard/kernel.nit:355 */
+  while(1) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
     } else {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
-        REGB0 = REGB1;
-      } else {
-        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB0 = REGB1;
-      }
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
-    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-    if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7197 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7197);
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ../lib/standard/kernel.nit:355 */
+    if (UNTAG_Bool(REGB2)) {
+      /* parser/parser_prod.nit:7640 */
+      REGB2 = REGB0;
+      /* parser/parser_prod.nit:7641 */
+      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7641);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7198 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
-      if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7198);
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(0);
+          REGB3 = REGB4;
+        } else {
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
+        }
       }
-      /* ./parser//parser_prod.nit:7199 */
-      ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      if (UNTAG_Bool(REGB3)) {
+        /* parser/parser_prod.nit:7642 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(0);
+            REGB3 = REGB4;
+          } else {
+            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
+          }
+        }
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* parser/parser_prod.nit:7643 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7643);
+          }
+          /* parser/parser_prod.nit:7644 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7644);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:7645 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7645);
+          }
+          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          /* parser/parser_prod.nit:7647 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7647);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+        }
+        /* parser/parser_prod.nit:7649 */
+        goto label1;
+      }
+      /* ../lib/standard/kernel.nit:357 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/kernel.nit:357 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7201 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7201);
+      /* ../lib/standard/kernel.nit:355 */
+      goto label2;
     }
-    /* ./parser//parser_prod.nit:7203 */
-    goto label1;
   }
-  /* ./parser//parser_prod.nit:7205 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  label2: while(0);
+  /* parser/parser_prod.nit:7652 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7205);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 7652);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38133,13 +41716,13 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7206 */
+    /* parser/parser_prod.nit:7653 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -38148,125 +41731,156 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7207 */
+      /* parser/parser_prod.nit:7654 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7207);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7654);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7208 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
+      /* parser/parser_prod.nit:7655 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast TCbra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7208);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7655);
       }
-      /* ./parser//parser_prod.nit:7209 */
-      ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7656 */
+      ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7211 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7211);
+      /* parser/parser_prod.nit:7658 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7658);
     }
-    /* ./parser//parser_prod.nit:7213 */
+    /* parser/parser_prod.nit:7660 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AIssetAttrExpr___visit_all(val_t p0, val_t p1){
+static const char LOCATE_parser___parser_prod___ABraExprs___visit_all[] = "parser_prod::ABraExprs::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___ABraExprs___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7217;
-  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___visit_all;
+  fra.me.line = 7664;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7219 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7666 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 7219);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 7666);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7220 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7667 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7220);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7667);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7221 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExprs___visit_all_1));
+  /* parser/parser_prod.nit:7670 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7221);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 7670);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+  void OC_parser___parser_prod___ABraExprs___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:7668 */
+    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___APlusAssignOp___empty_init[] = "parser_prod::APlusAssignOp::empty_init";
 void parser___parser_prod___APlusAssignOp___empty_init(val_t p0, int* init_table){
-  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusAssignOp].i;
+  int itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusAssignOp].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos255]) return;
+  if (init_table[itpos263]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7225;
+  fra.me.line = 7674;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos255] = 1;
+  init_table[itpos263] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusAssignOp___init_aplusassignop[] = "parser_prod::APlusAssignOp::init_aplusassignop";
 void parser___parser_prod___APlusAssignOp___init_aplusassignop(val_t p0, val_t p1, int* init_table){
-  int itpos256 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusAssignOp].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  int itpos264 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusAssignOp].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos256]) return;
+  if (init_table[itpos264]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7227;
+  fra.me.line = 7676;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___init_aplusassignop;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7231 */
-  CALL_parser___parser_prod___APlusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7232 */
+  /* parser/parser_prod.nit:7676 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7680 */
+  CALL_parser___parser_prod___APlusAssignOp___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:7681 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7232);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7681);
   }
-  ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7233 */
+  ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7682 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7233);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7682);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos256] = 1;
+  init_table[itpos264] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusAssignOp___replace_child[] = "parser_prod::APlusAssignOp::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -38274,10 +41888,11 @@ void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7236;
+  fra.me.line = 7685;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38285,11 +41900,11 @@ void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7238 */
+  /* parser/parser_prod.nit:7687 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 7238);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 7687);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38299,13 +41914,13 @@ void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7239 */
+    /* parser/parser_prod.nit:7688 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -38314,108 +41929,118 @@ void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7240 */
+      /* parser/parser_prod.nit:7689 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7240);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7689);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7241 */
+      /* parser/parser_prod.nit:7690 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TPluseq, ID_parser___parser_nodes___TPluseq)) /*cast TPluseq*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7241);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7690);
       }
-      /* ./parser//parser_prod.nit:7242 */
+      /* parser/parser_prod.nit:7691 */
       ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7244 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7244);
+      /* parser/parser_prod.nit:7693 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7693);
     }
-    /* ./parser//parser_prod.nit:7246 */
+    /* parser/parser_prod.nit:7695 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___APlusAssignOp___visit_all[] = "parser_prod::APlusAssignOp::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___APlusAssignOp___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7250;
+  fra.me.line = 7699;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7252 */
+  /* parser/parser_prod.nit:7701 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 7252);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 7701);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusAssignOp___empty_init[] = "parser_prod::AMinusAssignOp::empty_init";
 void parser___parser_prod___AMinusAssignOp___empty_init(val_t p0, int* init_table){
-  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusAssignOp].i;
+  int itpos265 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusAssignOp].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos257]) return;
+  if (init_table[itpos265]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7256;
+  fra.me.line = 7705;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos257] = 1;
+  init_table[itpos265] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusAssignOp___init_aminusassignop[] = "parser_prod::AMinusAssignOp::init_aminusassignop";
 void parser___parser_prod___AMinusAssignOp___init_aminusassignop(val_t p0, val_t p1, int* init_table){
-  int itpos258 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusAssignOp].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusAssignOp].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos258]) return;
+  if (init_table[itpos266]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7258;
+  fra.me.line = 7707;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___init_aminusassignop;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7262 */
-  CALL_parser___parser_prod___AMinusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7263 */
+  /* parser/parser_prod.nit:7707 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7711 */
+  CALL_parser___parser_prod___AMinusAssignOp___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:7712 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7263);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7712);
   }
-  ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7264 */
+  ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7713 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7264);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7713);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos258] = 1;
+  init_table[itpos266] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusAssignOp___replace_child[] = "parser_prod::AMinusAssignOp::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -38423,10 +42048,11 @@ void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7267;
+  fra.me.line = 7716;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38434,11 +42060,11 @@ void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7269 */
+  /* parser/parser_prod.nit:7718 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 7269);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 7718);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38448,13 +42074,13 @@ void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7270 */
+    /* parser/parser_prod.nit:7719 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -38463,86 +42089,92 @@ void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7271 */
+      /* parser/parser_prod.nit:7720 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7271);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7720);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7272 */
+      /* parser/parser_prod.nit:7721 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TMinuseq, ID_parser___parser_nodes___TMinuseq)) /*cast TMinuseq*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7272);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7721);
       }
-      /* ./parser//parser_prod.nit:7273 */
+      /* parser/parser_prod.nit:7722 */
       ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7275 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7275);
+      /* parser/parser_prod.nit:7724 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7724);
     }
-    /* ./parser//parser_prod.nit:7277 */
+    /* parser/parser_prod.nit:7726 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AMinusAssignOp___visit_all[] = "parser_prod::AMinusAssignOp::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AMinusAssignOp___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7281;
+  fra.me.line = 7730;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7283 */
+  /* parser/parser_prod.nit:7732 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 7283);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 7732);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AClosureDef___empty_init[] = "parser_prod::AClosureDef::empty_init";
 void parser___parser_prod___AClosureDef___empty_init(val_t p0, int* init_table){
-  int itpos259 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDef].i;
+  int itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos259]) return;
+  if (init_table[itpos267]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7287;
+  fra.me.line = 7736;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos259] = 1;
+  init_table[itpos267] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AClosureDef___init_aclosuredef[] = "parser_prod::AClosureDef::init_aclosuredef";
 void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
-  int itpos260 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  int itpos268 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos260]) return;
+  if (init_table[itpos268]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7289;
+  fra.me.line = 7738;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___init_aclosuredef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38550,6 +42182,7 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -38557,44 +42190,46 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:7298 */
-  CALL_parser___parser_prod___AClosureDef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7299 */
+  /* parser/parser_prod.nit:7738 */
+  fra.me.REG[7] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7747 */
+  CALL_parser___parser_prod___AClosureDef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
+  /* parser/parser_prod.nit:7748 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7299);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7748);
   }
-  ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7300 */
+  ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[7]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7749 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7300);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7749);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7301 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+  /* parser/parser_prod.nit:7750 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7301);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7750);
   }
-  ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7302 */
+  ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[7]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7751 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7302);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7751);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureDef___init_aclosuredef_1));
-  /* ./parser//parser_prod.nit:7308 */
-  ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:7309 */
+  /* parser/parser_prod.nit:7757 */
+  ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[7]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:7758 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
@@ -38603,22 +42238,22 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7310 */
+    /* parser/parser_prod.nit:7759 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7310);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7759);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
   }
-  /* ./parser//parser_prod.nit:7312 */
-  ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:7313 */
+  /* parser/parser_prod.nit:7761 */
+  ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[7]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:7762 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
@@ -38627,22 +42262,22 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7314 */
+    /* parser/parser_prod.nit:7763 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7314);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7763);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
   }
-  /* ./parser//parser_prod.nit:7316 */
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:7317 */
+  /* parser/parser_prod.nit:7765 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[7]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:7766 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
@@ -38651,15 +42286,15 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7318 */
+    /* parser/parser_prod.nit:7767 */
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7318);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7767);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos260] = 1;
+  init_table[itpos268] = 1;
   return;
 }
   void OC_parser___parser_prod___AClosureDef___init_aclosuredef_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -38667,38 +42302,40 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:7303 */
+    /* parser/parser_prod.nit:7752 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___init_aclosuredef;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:7304 */
+    /* parser/parser_prod.nit:7753 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7304);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7753);
     }
-    /* ./parser//parser_prod.nit:7305 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:7754 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(closctx->REG[7])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7305);
+      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7754);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AClosureDef____n_ids(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AClosureDef____n_ids(closctx->REG[7]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:7306 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:7755 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[7]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AClosureDef___replace_child[] = "parser_prod::AClosureDef::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -38709,10 +42346,11 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7322;
+  fra.me.line = 7771;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38720,11 +42358,11 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7324 */
+  /* parser/parser_prod.nit:7773 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 7324);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 7773);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38734,13 +42372,13 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7325 */
+    /* parser/parser_prod.nit:7774 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -38749,32 +42387,32 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7326 */
+      /* parser/parser_prod.nit:7775 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7326);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7775);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7327 */
+      /* parser/parser_prod.nit:7776 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast TBang*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7327);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7776);
       }
-      /* ./parser//parser_prod.nit:7328 */
+      /* parser/parser_prod.nit:7777 */
       ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7330 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7330);
+      /* parser/parser_prod.nit:7779 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7779);
     }
-    /* ./parser//parser_prod.nit:7332 */
+    /* parser/parser_prod.nit:7781 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7334 */
+  /* parser/parser_prod.nit:7783 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7334);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7783);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38784,13 +42422,13 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7335 */
+    /* parser/parser_prod.nit:7784 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -38799,58 +42437,63 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7336 */
+      /* parser/parser_prod.nit:7785 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7336);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7785);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7337 */
+      /* parser/parser_prod.nit:7786 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast AClosureId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7337);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7786);
       }
-      /* ./parser//parser_prod.nit:7338 */
+      /* parser/parser_prod.nit:7787 */
       ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7340 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7340);
+      /* parser/parser_prod.nit:7789 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7789);
     }
-    /* ./parser//parser_prod.nit:7342 */
+    /* parser/parser_prod.nit:7791 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7344 */
+  /* parser/parser_prod.nit:7793 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7344);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7793);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:7344 */
+      /* parser/parser_prod.nit:7793 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:7345 */
+      /* parser/parser_prod.nit:7794 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7345);
+        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7794);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -38858,13 +42501,13 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:7346 */
+        /* parser/parser_prod.nit:7795 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -38873,59 +42516,59 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:7347 */
+          /* parser/parser_prod.nit:7796 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7347);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7796);
           }
-          /* ./parser//parser_prod.nit:7348 */
+          /* parser/parser_prod.nit:7797 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7348);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7797);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:7349 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:7798 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7349);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7798);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:7351 */
+          /* parser/parser_prod.nit:7800 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7351);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7800);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:7353 */
+        /* parser/parser_prod.nit:7802 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:7356 */
+  /* parser/parser_prod.nit:7805 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -38933,13 +42576,13 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7357 */
+    /* parser/parser_prod.nit:7806 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -38948,35 +42591,35 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7358 */
+      /* parser/parser_prod.nit:7807 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7358);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7807);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7359 */
+      /* parser/parser_prod.nit:7808 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7359);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7808);
       }
-      /* ./parser//parser_prod.nit:7360 */
+      /* parser/parser_prod.nit:7809 */
       ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7362 */
+      /* parser/parser_prod.nit:7811 */
       ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7364 */
+    /* parser/parser_prod.nit:7813 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7366 */
+  /* parser/parser_prod.nit:7815 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -38984,13 +42627,13 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7367 */
+    /* parser/parser_prod.nit:7816 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -38999,35 +42642,35 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7368 */
+      /* parser/parser_prod.nit:7817 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7368);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7817);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7369 */
+      /* parser/parser_prod.nit:7818 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7369);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7818);
       }
-      /* ./parser//parser_prod.nit:7370 */
+      /* parser/parser_prod.nit:7819 */
       ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7372 */
+      /* parser/parser_prod.nit:7821 */
       ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7374 */
+    /* parser/parser_prod.nit:7823 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7376 */
+  /* parser/parser_prod.nit:7825 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -39035,13 +42678,13 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7377 */
+    /* parser/parser_prod.nit:7826 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -39050,145 +42693,150 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7378 */
+      /* parser/parser_prod.nit:7827 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7378);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7827);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7379 */
+      /* parser/parser_prod.nit:7828 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7379);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7828);
       }
-      /* ./parser//parser_prod.nit:7380 */
+      /* parser/parser_prod.nit:7829 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7382 */
+      /* parser/parser_prod.nit:7831 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7384 */
+    /* parser/parser_prod.nit:7833 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AClosureDef___visit_all[] = "parser_prod::AClosureDef::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7388;
+  fra.me.line = 7837;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7390 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7837 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7839 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 7390);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 7839);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7391 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7840 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7391);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7840);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7392 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7841 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7392);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7841);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureDef___visit_all_1));
-  /* ./parser//parser_prod.nit:7395 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureDef___visit_all_1));
+  /* parser/parser_prod.nit:7844 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7396 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
+    /* parser/parser_prod.nit:7845 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7396);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7845);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:7398 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:7847 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7399 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:7848 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7399);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7848);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:7401 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:7850 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7402 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
+    /* parser/parser_prod.nit:7851 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7402);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7851);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -39203,68 +42851,77 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:7393 */
+    /* parser/parser_prod.nit:7842 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ASimpleClosureId___empty_init[] = "parser_prod::ASimpleClosureId::empty_init";
 void parser___parser_prod___ASimpleClosureId___empty_init(val_t p0, int* init_table){
-  int itpos261 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASimpleClosureId].i;
+  int itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASimpleClosureId].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos261]) return;
+  if (init_table[itpos269]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7407;
+  fra.me.line = 7856;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos261] = 1;
+  init_table[itpos269] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASimpleClosureId___init_asimpleclosureid[] = "parser_prod::ASimpleClosureId::init_asimpleclosureid";
 void parser___parser_prod___ASimpleClosureId___init_asimpleclosureid(val_t p0, val_t p1, int* init_table){
-  int itpos262 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASimpleClosureId].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  int itpos270 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASimpleClosureId].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos262]) return;
+  if (init_table[itpos270]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7409;
+  fra.me.line = 7858;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___init_asimpleclosureid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7413 */
-  CALL_parser___parser_prod___ASimpleClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7414 */
+  /* parser/parser_prod.nit:7858 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7862 */
+  CALL_parser___parser_prod___ASimpleClosureId___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:7863 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7414);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7863);
   }
-  ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7415 */
+  ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7864 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7415);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7864);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos262] = 1;
+  init_table[itpos270] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASimpleClosureId___replace_child[] = "parser_prod::ASimpleClosureId::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -39272,10 +42929,11 @@ void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7418;
+  fra.me.line = 7867;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39283,11 +42941,11 @@ void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7420 */
+  /* parser/parser_prod.nit:7869 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7420);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7869);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39297,13 +42955,13 @@ void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7421 */
+    /* parser/parser_prod.nit:7870 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -39312,108 +42970,118 @@ void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7422 */
+      /* parser/parser_prod.nit:7871 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7422);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7871);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7423 */
+      /* parser/parser_prod.nit:7872 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7423);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7872);
       }
-      /* ./parser//parser_prod.nit:7424 */
+      /* parser/parser_prod.nit:7873 */
       ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7426 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7426);
+      /* parser/parser_prod.nit:7875 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7875);
     }
-    /* ./parser//parser_prod.nit:7428 */
+    /* parser/parser_prod.nit:7877 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASimpleClosureId___visit_all[] = "parser_prod::ASimpleClosureId::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASimpleClosureId___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7432;
+  fra.me.line = 7881;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7434 */
+  /* parser/parser_prod.nit:7883 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7434);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7883);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABreakClosureId___empty_init[] = "parser_prod::ABreakClosureId::empty_init";
 void parser___parser_prod___ABreakClosureId___empty_init(val_t p0, int* init_table){
-  int itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABreakClosureId].i;
+  int itpos271 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABreakClosureId].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos263]) return;
+  if (init_table[itpos271]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7438;
+  fra.me.line = 7887;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos263] = 1;
+  init_table[itpos271] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABreakClosureId___init_abreakclosureid[] = "parser_prod::ABreakClosureId::init_abreakclosureid";
 void parser___parser_prod___ABreakClosureId___init_abreakclosureid(val_t p0, val_t p1, int* init_table){
-  int itpos264 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABreakClosureId].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  int itpos272 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABreakClosureId].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos264]) return;
+  if (init_table[itpos272]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7440;
+  fra.me.line = 7889;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___init_abreakclosureid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7444 */
-  CALL_parser___parser_prod___ABreakClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7445 */
+  /* parser/parser_prod.nit:7889 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7893 */
+  CALL_parser___parser_prod___ABreakClosureId___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:7894 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7445);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7894);
   }
-  ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7446 */
+  ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7895 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7446);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7895);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos264] = 1;
+  init_table[itpos272] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABreakClosureId___replace_child[] = "parser_prod::ABreakClosureId::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -39421,10 +43089,11 @@ void parser___parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7449;
+  fra.me.line = 7898;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39432,11 +43101,11 @@ void parser___parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7451 */
+  /* parser/parser_prod.nit:7900 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 7451);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 7900);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39446,13 +43115,13 @@ void parser___parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7452 */
+    /* parser/parser_prod.nit:7901 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -39461,105 +43130,114 @@ void parser___parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7453 */
+      /* parser/parser_prod.nit:7902 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7453);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7902);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7454 */
+      /* parser/parser_prod.nit:7903 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7454);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7903);
       }
-      /* ./parser//parser_prod.nit:7455 */
+      /* parser/parser_prod.nit:7904 */
       ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7457 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7457);
+      /* parser/parser_prod.nit:7906 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7906);
     }
-    /* ./parser//parser_prod.nit:7459 */
+    /* parser/parser_prod.nit:7908 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ABreakClosureId___visit_all[] = "parser_prod::ABreakClosureId::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ABreakClosureId___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7463;
+  fra.me.line = 7912;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7465 */
+  /* parser/parser_prod.nit:7914 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 7465);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 7914);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AModuleName___empty_init[] = "parser_prod::AModuleName::empty_init";
 void parser___parser_prod___AModuleName___empty_init(val_t p0, int* init_table){
-  int itpos265 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuleName].i;
+  int itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuleName].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos265]) return;
+  if (init_table[itpos273]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7469;
+  fra.me.line = 7918;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos265] = 1;
+  init_table[itpos273] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AModuleName___init_amodulename[] = "parser_prod::AModuleName::init_amodulename";
 void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuleName].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  int itpos274 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuleName].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos266]) return;
+  if (init_table[itpos274]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7471;
+  fra.me.line = 7920;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___init_amodulename;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7477 */
-  CALL_parser___parser_prod___AModuleName___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7478 */
-  ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7479 */
+  /* parser/parser_prod.nit:7920 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7926 */
+  CALL_parser___parser_prod___AModuleName___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:7927 */
+  ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7928 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
@@ -39568,29 +43246,29 @@ void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7480 */
+    /* parser/parser_prod.nit:7929 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7480);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7929);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModuleName___init_amodulename_1));
-  /* ./parser//parser_prod.nit:7487 */
+  /* parser/parser_prod.nit:7936 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7487);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7936);
   }
-  ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7488 */
+  ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:7937 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7488);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7937);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos266] = 1;
+  init_table[itpos274] = 1;
   return;
 }
   void OC_parser___parser_prod___AModuleName___init_amodulename_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -39598,38 +43276,40 @@ void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, v
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:7482 */
+    /* parser/parser_prod.nit:7931 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AModuleName___init_amodulename;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:7483 */
+    /* parser/parser_prod.nit:7932 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7483);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7932);
     }
-    /* ./parser//parser_prod.nit:7484 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:7933 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(closctx->REG[4])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7484);
+      nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7933);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AModuleName____n_path(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AModuleName____n_path(closctx->REG[4]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:7485 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:7934 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AModuleName___replace_child[] = "parser_prod::AModuleName::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -39640,10 +43320,11 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7491;
+  fra.me.line = 7940;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39651,14 +43332,14 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7493 */
+  /* parser/parser_prod.nit:7942 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -39666,13 +43347,13 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7494 */
+    /* parser/parser_prod.nit:7943 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -39681,58 +43362,63 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7495 */
+      /* parser/parser_prod.nit:7944 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7495);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7944);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7496 */
+      /* parser/parser_prod.nit:7945 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7496);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7945);
       }
-      /* ./parser//parser_prod.nit:7497 */
+      /* parser/parser_prod.nit:7946 */
       ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7499 */
+      /* parser/parser_prod.nit:7948 */
       ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7501 */
+    /* parser/parser_prod.nit:7950 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7503 */
+  /* parser/parser_prod.nit:7952 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7503);
+    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7952);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:7503 */
+      /* parser/parser_prod.nit:7952 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:7504 */
+      /* parser/parser_prod.nit:7953 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7504);
+        nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7953);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -39740,13 +43426,13 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:7505 */
+        /* parser/parser_prod.nit:7954 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -39755,56 +43441,56 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:7506 */
+          /* parser/parser_prod.nit:7955 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7506);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7955);
           }
-          /* ./parser//parser_prod.nit:7507 */
+          /* parser/parser_prod.nit:7956 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7507);
+            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7956);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:7508 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:7957 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7508);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7957);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:7510 */
+          /* parser/parser_prod.nit:7959 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7510);
+            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7959);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:7512 */
+        /* parser/parser_prod.nit:7961 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:7515 */
+  /* parser/parser_prod.nit:7964 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7515);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7964);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39814,13 +43500,13 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7516 */
+    /* parser/parser_prod.nit:7965 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -39829,88 +43515,93 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7517 */
+      /* parser/parser_prod.nit:7966 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7517);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7966);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7518 */
+      /* parser/parser_prod.nit:7967 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7518);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7967);
       }
-      /* ./parser//parser_prod.nit:7519 */
+      /* parser/parser_prod.nit:7968 */
       ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7521 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7521);
+      /* parser/parser_prod.nit:7970 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7970);
     }
-    /* ./parser//parser_prod.nit:7523 */
+    /* parser/parser_prod.nit:7972 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AModuleName___visit_all[] = "parser_prod::AModuleName::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AModuleName___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7527;
+  fra.me.line = 7976;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7529 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:7976 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7978 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7530 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
+    /* parser/parser_prod.nit:7979 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7530);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7979);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:7532 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7981 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7532);
+    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7981);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModuleName___visit_all_1));
-  /* ./parser//parser_prod.nit:7535 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModuleName___visit_all_1));
+  /* parser/parser_prod.nit:7984 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7535);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7984);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -39924,69 +43615,77 @@ void parser___parser_prod___AModuleName___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AModuleName___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:7533 */
+    /* parser/parser_prod.nit:7982 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AExternCalls___empty_init[] = "parser_prod::AExternCalls::empty_init";
 void parser___parser_prod___AExternCalls___empty_init(val_t p0, int* init_table){
-  int itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCalls].i;
+  int itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCalls].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos267]) return;
+  if (init_table[itpos275]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7539;
+  fra.me.line = 7988;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos267] = 1;
+  init_table[itpos275] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternCalls___init_aexterncalls[] = "parser_prod::AExternCalls::init_aexterncalls";
 void parser___parser_prod___AExternCalls___init_aexterncalls(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos268 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCalls].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  int itpos276 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCalls].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos268]) return;
+  if (init_table[itpos276]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7541;
+  fra.me.line = 7990;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___init_aexterncalls;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7546 */
-  CALL_parser___parser_prod___AExternCalls___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7547 */
+  /* parser/parser_prod.nit:7990 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7995 */
+  CALL_parser___parser_prod___AExternCalls___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:7996 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7547);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7996);
   }
-  ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7548 */
+  ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7997 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7548);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7997);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AExternCalls___init_aexterncalls_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos268] = 1;
+  init_table[itpos276] = 1;
   return;
 }
   void OC_parser___parser_prod___AExternCalls___init_aexterncalls_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -39994,38 +43693,40 @@ void parser___parser_prod___AExternCalls___init_aexterncalls(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:7549 */
+    /* parser/parser_prod.nit:7998 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___init_aexterncalls;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:7550 */
+    /* parser/parser_prod.nit:7999 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast AExternCall*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7550);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7999);
     }
-    /* ./parser//parser_prod.nit:7551 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(closctx->REG[0])!=NIT_NULL);
+    /* parser/parser_prod.nit:8000 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(closctx->REG[3])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 7551);
+      nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8000);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(closctx->REG[0]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(closctx->REG[3]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:7552 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:8001 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[3]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AExternCalls___replace_child[] = "parser_prod::AExternCalls::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -40036,10 +43737,11 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7556;
+  fra.me.line = 8005;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40047,11 +43749,11 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7558 */
+  /* parser/parser_prod.nit:8007 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 7558);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 8007);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40061,13 +43763,13 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7559 */
+    /* parser/parser_prod.nit:8008 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -40076,58 +43778,63 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7560 */
+      /* parser/parser_prod.nit:8009 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7560);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8009);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7561 */
+      /* parser/parser_prod.nit:8010 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast TKwimport*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7561);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8010);
       }
-      /* ./parser//parser_prod.nit:7562 */
+      /* parser/parser_prod.nit:8011 */
       ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7564 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7564);
+      /* parser/parser_prod.nit:8013 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8013);
     }
-    /* ./parser//parser_prod.nit:7566 */
+    /* parser/parser_prod.nit:8015 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7568 */
+  /* parser/parser_prod.nit:8017 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 7568);
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8017);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:7568 */
+      /* parser/parser_prod.nit:8017 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:7569 */
+      /* parser/parser_prod.nit:8018 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 7569);
+        nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8018);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -40135,13 +43842,13 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:7570 */
+        /* parser/parser_prod.nit:8019 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -40150,47 +43857,47 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:7571 */
+          /* parser/parser_prod.nit:8020 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast AExternCall*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7571);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8020);
           }
-          /* ./parser//parser_prod.nit:7572 */
+          /* parser/parser_prod.nit:8021 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 7572);
+            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8021);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:7573 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:8022 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7573);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8022);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:7575 */
+          /* parser/parser_prod.nit:8024 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 7575);
+            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8024);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:7577 */
+        /* parser/parser_prod.nit:8026 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
@@ -40199,34 +43906,36 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternCalls___visit_all[] = "parser_prod::AExternCalls::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AExternCalls___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7582;
+  fra.me.line = 8031;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7584 */
+  /* parser/parser_prod.nit:8033 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 7584);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 8033);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7585 */
+  /* parser/parser_prod.nit:8034 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 7585);
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8034);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AExternCalls___visit_all_1));
@@ -40243,61 +43952,68 @@ void parser___parser_prod___AExternCalls___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:7586 */
+    /* parser/parser_prod.nit:8035 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AExternCall___empty_init[] = "parser_prod::AExternCall::empty_init";
 void parser___parser_prod___AExternCall___empty_init(val_t p0, int* init_table){
-  int itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCall].i;
+  int itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos269]) return;
+  if (init_table[itpos277]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7591;
+  fra.me.line = 8040;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos269] = 1;
+  init_table[itpos277] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternCall___init_aexterncall[] = "parser_prod::AExternCall::init_aexterncall";
 void parser___parser_prod___AExternCall___init_aexterncall(val_t p0, int* init_table){
-  int itpos270 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCall].i;
+  int itpos278 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos270]) return;
+  if (init_table[itpos278]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7593;
+  fra.me.line = 8042;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:7595 */
+  /* parser/parser_prod.nit:8044 */
   CALL_parser___parser_prod___AExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
-  init_table[itpos270] = 1;
+  init_table[itpos278] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternCall___replace_child[] = "parser_prod::AExternCall::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AExternCall___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7598;
+  fra.me.line = 8047;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40307,15 +44023,17 @@ void parser___parser_prod___AExternCall___replace_child(val_t p0, val_t p1, val_
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AExternCall___visit_all[] = "parser_prod::AExternCall::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AExternCall___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7602;
+  fra.me.line = 8051;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
@@ -40323,58 +44041,66 @@ void parser___parser_prod___AExternCall___visit_all(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperExternCall___empty_init[] = "parser_prod::ASuperExternCall::empty_init";
 void parser___parser_prod___ASuperExternCall___empty_init(val_t p0, int* init_table){
-  int itpos271 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExternCall].i;
+  int itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos271]) return;
+  if (init_table[itpos279]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7607;
+  fra.me.line = 8056;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos271] = 1;
+  init_table[itpos279] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperExternCall___init_asuperexterncall[] = "parser_prod::ASuperExternCall::init_asuperexterncall";
 void parser___parser_prod___ASuperExternCall___init_asuperexterncall(val_t p0, val_t p1, int* init_table){
-  int itpos272 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExternCall].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  int itpos280 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExternCall].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos272]) return;
+  if (init_table[itpos280]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7609;
+  fra.me.line = 8058;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___init_asuperexterncall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7613 */
-  CALL_parser___parser_prod___ASuperExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7614 */
+  /* parser/parser_prod.nit:8058 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8062 */
+  CALL_parser___parser_prod___ASuperExternCall___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:8063 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7614);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8063);
   }
-  ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7615 */
+  ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8064 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7615);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8064);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos272] = 1;
+  init_table[itpos280] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ASuperExternCall___replace_child[] = "parser_prod::ASuperExternCall::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -40382,10 +44108,11 @@ void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7618;
+  fra.me.line = 8067;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40393,13 +44120,476 @@ void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7620 */
+  /* parser/parser_prod.nit:8069 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 7620);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 8069);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:8070 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:8071 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8071);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8072 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8072);
+      }
+      /* parser/parser_prod.nit:8073 */
+      ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:8075 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8075);
+    }
+    /* parser/parser_prod.nit:8077 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ASuperExternCall___visit_all[] = "parser_prod::ASuperExternCall::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___ASuperExternCall___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 8081;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:8083 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 8083);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ALocalPropExternCall___empty_init[] = "parser_prod::ALocalPropExternCall::empty_init";
+void parser___parser_prod___ALocalPropExternCall___empty_init(val_t p0, int* init_table){
+  int itpos281 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALocalPropExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos281]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 8087;
+  fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos281] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall[] = "parser_prod::ALocalPropExternCall::init_alocalpropexterncall";
+void parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(val_t p0, val_t p1, int* init_table){
+  int itpos282 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALocalPropExternCall].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos282]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 8089;
+  fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:8089 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8093 */
+  CALL_parser___parser_prod___ALocalPropExternCall___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:8094 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8094);
+  }
+  ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8095 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8095);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos282] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ALocalPropExternCall___replace_child[] = "parser_prod::ALocalPropExternCall::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 8098;
+  fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:8100 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8100);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:8101 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:8102 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8102);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8103 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8103);
+      }
+      /* parser/parser_prod.nit:8104 */
+      ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:8106 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8106);
+    }
+    /* parser/parser_prod.nit:8108 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ALocalPropExternCall___visit_all[] = "parser_prod::ALocalPropExternCall::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___ALocalPropExternCall___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 8112;
+  fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:8114 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8114);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AFullPropExternCall___empty_init[] = "parser_prod::AFullPropExternCall::empty_init";
+void parser___parser_prod___AFullPropExternCall___empty_init(val_t p0, int* init_table){
+  int itpos283 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFullPropExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos283]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 8118;
+  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos283] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall[] = "parser_prod::AFullPropExternCall::init_afullpropexterncall";
+void parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos284 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFullPropExternCall].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos284]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 8120;
+  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:8120 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8126 */
+  CALL_parser___parser_prod___AFullPropExternCall___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:8127 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8127);
+  }
+  ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8128 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8128);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8129 */
+  ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:8130 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:8131 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8131);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  }
+  /* parser/parser_prod.nit:8133 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8133);
+  }
+  ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:8134 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8134);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos284] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AFullPropExternCall___replace_child[] = "parser_prod::AFullPropExternCall::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 8137;
+  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:8139 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8139);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:8140 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:8141 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8141);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8142 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8142);
+      }
+      /* parser/parser_prod.nit:8143 */
+      ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:8145 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8145);
+    }
+    /* parser/parser_prod.nit:8147 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:8149 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:8150 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:8151 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8151);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8152 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8152);
+      }
+      /* parser/parser_prod.nit:8153 */
+      ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:8155 */
+      ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:8157 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:8159 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8159);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40407,13 +44597,13 @@ void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7621 */
+    /* parser/parser_prod.nit:8160 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -40422,119 +44612,168 @@ void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7622 */
+      /* parser/parser_prod.nit:8161 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7622);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8161);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7623 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
+      /* parser/parser_prod.nit:8162 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7623);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8162);
       }
-      /* ./parser//parser_prod.nit:7624 */
-      ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8163 */
+      ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7626 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7626);
+      /* parser/parser_prod.nit:8165 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8165);
     }
-    /* ./parser//parser_prod.nit:7628 */
+    /* parser/parser_prod.nit:8167 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___ASuperExternCall___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+static const char LOCATE_parser___parser_prod___AFullPropExternCall___visit_all[] = "parser_prod::AFullPropExternCall::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AFullPropExternCall___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7632;
-  fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___visit_all;
+  fra.me.line = 8171;
+  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7634 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8171 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8173 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 7634);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8173);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8174 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:8175 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8175);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:8177 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8177);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___ALocalPropExternCall___empty_init(val_t p0, int* init_table){
-  int itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALocalPropExternCall].i;
+static const char LOCATE_parser___parser_prod___AInitPropExternCall___empty_init[] = "parser_prod::AInitPropExternCall::empty_init";
+void parser___parser_prod___AInitPropExternCall___empty_init(val_t p0, int* init_table){
+  int itpos285 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInitPropExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos273]) return;
+  if (init_table[itpos285]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7638;
-  fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___empty_init;
+  fra.me.line = 8181;
+  fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos273] = 1;
+  init_table[itpos285] = 1;
   return;
 }
-void parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(val_t p0, val_t p1, int* init_table){
-  int itpos274 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALocalPropExternCall].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+static const char LOCATE_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall[] = "parser_prod::AInitPropExternCall::init_ainitpropexterncall";
+void parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(val_t p0, val_t p1, int* init_table){
+  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInitPropExternCall].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos274]) return;
+  if (init_table[itpos286]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7640;
-  fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall;
+  fra.me.line = 8183;
+  fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7644 */
-  CALL_parser___parser_prod___ALocalPropExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7645 */
+  /* parser/parser_prod.nit:8183 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8187 */
+  CALL_parser___parser_prod___AInitPropExternCall___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:8188 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7645);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8188);
   }
-  ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7646 */
+  ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8189 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7646);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8189);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos274] = 1;
+  init_table[itpos286] = 1;
   return;
 }
-void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___AInitPropExternCall___replace_child[] = "parser_prod::AInitPropExternCall::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7649;
-  fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___replace_child;
+  fra.me.line = 8192;
+  fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40542,13 +44781,13 @@ void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7651 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8194 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 7651);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8194);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40556,13 +44795,13 @@ void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7652 */
+    /* parser/parser_prod.nit:8195 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -40571,161 +44810,160 @@ void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7653 */
+      /* parser/parser_prod.nit:8196 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7653);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8196);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7654 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
+      /* parser/parser_prod.nit:8197 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7654);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8197);
       }
-      /* ./parser//parser_prod.nit:7655 */
-      ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8198 */
+      ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7657 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7657);
+      /* parser/parser_prod.nit:8200 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8200);
     }
-    /* ./parser//parser_prod.nit:7659 */
+    /* parser/parser_prod.nit:8202 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___ALocalPropExternCall___visit_all(val_t p0, val_t p1){
+static const char LOCATE_parser___parser_prod___AInitPropExternCall___visit_all[] = "parser_prod::AInitPropExternCall::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AInitPropExternCall___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7663;
-  fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___visit_all;
+  fra.me.line = 8206;
+  fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7665 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8208 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 7665);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8208);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AFullPropExternCall___empty_init(val_t p0, int* init_table){
-  int itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFullPropExternCall].i;
+static const char LOCATE_parser___parser_prod___ACastAsExternCall___empty_init[] = "parser_prod::ACastAsExternCall::empty_init";
+void parser___parser_prod___ACastAsExternCall___empty_init(val_t p0, int* init_table){
+  int itpos287 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACastAsExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos275]) return;
+  if (init_table[itpos287]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7669;
-  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___empty_init;
+  fra.me.line = 8212;
+  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos275] = 1;
+  init_table[itpos287] = 1;
   return;
 }
-void parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos276 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFullPropExternCall].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___parser_prod___ACastAsExternCall___init_acastasexterncall[] = "parser_prod::ACastAsExternCall::init_acastasexterncall";
+void parser___parser_prod___ACastAsExternCall___init_acastasexterncall(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos288 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACastAsExternCall].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos276]) return;
+  if (init_table[itpos288]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7671;
-  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall;
+  fra.me.line = 8214;
+  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___init_acastasexterncall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7677 */
-  CALL_parser___parser_prod___AFullPropExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7678 */
+  /* parser/parser_prod.nit:8214 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8220 */
+  CALL_parser___parser_prod___ACastAsExternCall___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:8221 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7678);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8221);
   }
-  ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7679 */
+  ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8222 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7679);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8222);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7680 */
-  ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7681 */
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8223 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8223);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:8224 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7682 */
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7682);
-    }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8224);
   }
-  /* ./parser//parser_prod.nit:7684 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8225 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7684);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8225);
   }
-  ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7685 */
+  ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:8226 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7685);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8226);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos276] = 1;
+  init_table[itpos288] = 1;
   return;
 }
-void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___ACastAsExternCall___replace_child[] = "parser_prod::ACastAsExternCall::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7688;
-  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___replace_child;
+  fra.me.line = 8229;
+  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40733,13 +44971,13 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7690 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8231 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 7690);
+    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 8231);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40747,13 +44985,13 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7691 */
+    /* parser/parser_prod.nit:8232 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -40762,49 +45000,48 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7692 */
+      /* parser/parser_prod.nit:8233 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7692);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8233);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7693 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
+      /* parser/parser_prod.nit:8234 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7693);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8234);
       }
-      /* ./parser//parser_prod.nit:7694 */
-      ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8235 */
+      ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7696 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7696);
+      /* parser/parser_prod.nit:8237 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8237);
     }
-    /* ./parser//parser_prod.nit:7698 */
+    /* parser/parser_prod.nit:8239 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7700 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* parser/parser_prod.nit:8241 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8241);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7701 */
+    /* parser/parser_prod.nit:8242 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -40813,34 +45050,34 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7702 */
+      /* parser/parser_prod.nit:8243 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7702);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8243);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7703 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
+      /* parser/parser_prod.nit:8244 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7703);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8244);
       }
-      /* ./parser//parser_prod.nit:7704 */
-      ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8245 */
+      ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7706 */
-      ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = NIT_NULL;
+      /* parser/parser_prod.nit:8247 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8247);
     }
-    /* ./parser//parser_prod.nit:7708 */
+    /* parser/parser_prod.nit:8249 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7710 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8251 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 7710);
+    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 8251);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40848,13 +45085,13 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7711 */
+    /* parser/parser_prod.nit:8252 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -40863,154 +45100,177 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7712 */
+      /* parser/parser_prod.nit:8253 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7712);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8253);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7713 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
+      /* parser/parser_prod.nit:8254 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7713);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8254);
       }
-      /* ./parser//parser_prod.nit:7714 */
-      ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8255 */
+      ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7716 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7716);
+      /* parser/parser_prod.nit:8257 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8257);
     }
-    /* ./parser//parser_prod.nit:7718 */
+    /* parser/parser_prod.nit:8259 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AFullPropExternCall___visit_all(val_t p0, val_t p1){
+static const char LOCATE_parser___parser_prod___ACastAsExternCall___visit_all[] = "parser_prod::ACastAsExternCall::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___ACastAsExternCall___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7722;
-  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___visit_all;
+  fra.me.line = 8263;
+  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7724 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8265 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 7724);
+    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 8265);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7725 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:8266 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7726 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7726);
-    }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8266);
   }
-  /* ./parser//parser_prod.nit:7728 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8267 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 7728);
+    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 8267);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AInitPropExternCall___empty_init(val_t p0, int* init_table){
-  int itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInitPropExternCall].i;
+static const char LOCATE_parser___parser_prod___AAsNullableExternCall___empty_init[] = "parser_prod::AAsNullableExternCall::empty_init";
+void parser___parser_prod___AAsNullableExternCall___empty_init(val_t p0, int* init_table){
+  int itpos289 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNullableExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos277]) return;
+  if (init_table[itpos289]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7732;
-  fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___empty_init;
+  fra.me.line = 8271;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos277] = 1;
+  init_table[itpos289] = 1;
   return;
 }
-void parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(val_t p0, val_t p1, int* init_table){
-  int itpos278 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInitPropExternCall].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+static const char LOCATE_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall[] = "parser_prod::AAsNullableExternCall::init_aasnullableexterncall";
+void parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos290 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNullableExternCall].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos278]) return;
+  if (init_table[itpos290]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7734;
-  fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall;
+  fra.me.line = 8273;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7738 */
-  CALL_parser___parser_prod___AInitPropExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7739 */
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:8273 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8279 */
+  CALL_parser___parser_prod___AAsNullableExternCall___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:8280 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7739);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8280);
   }
-  ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7740 */
+  ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8281 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7740);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8281);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8282 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8282);
+  }
+  ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:8283 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8283);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8284 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8284);
+  }
+  ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:8285 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8285);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos278] = 1;
+  init_table[itpos290] = 1;
   return;
 }
-void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___AAsNullableExternCall___replace_child[] = "parser_prod::AAsNullableExternCall::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7743;
-  fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___replace_child;
+  fra.me.line = 8288;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -41018,13 +45278,13 @@ void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7745 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8290 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 7745);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8290);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41032,13 +45292,13 @@ void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7746 */
+    /* parser/parser_prod.nit:8291 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -41047,149 +45307,292 @@ void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7747 */
+      /* parser/parser_prod.nit:8292 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7747);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8292);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7748 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
+      /* parser/parser_prod.nit:8293 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7748);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8293);
       }
-      /* ./parser//parser_prod.nit:7749 */
-      ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8294 */
+      ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:8296 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8296);
+    }
+    /* parser/parser_prod.nit:8298 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:8300 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8300);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:8301 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:8302 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8302);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8303 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8303);
+      }
+      /* parser/parser_prod.nit:8304 */
+      ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:8306 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8306);
+    }
+    /* parser/parser_prod.nit:8308 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:8310 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8310);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:8311 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:8312 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8312);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8313 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8313);
+      }
+      /* parser/parser_prod.nit:8314 */
+      ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7751 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7751);
+      /* parser/parser_prod.nit:8316 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8316);
     }
-    /* ./parser//parser_prod.nit:7753 */
+    /* parser/parser_prod.nit:8318 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AInitPropExternCall___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+static const char LOCATE_parser___parser_prod___AAsNullableExternCall___visit_all[] = "parser_prod::AAsNullableExternCall::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AAsNullableExternCall___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7757;
-  fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___visit_all;
+  fra.me.line = 8322;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7759 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8324 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 7759);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8324);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8325 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8325);
+  }
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8326 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8326);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___ACastAsExternCall___empty_init(val_t p0, int* init_table){
-  int itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACastAsExternCall].i;
+static const char LOCATE_parser___parser_prod___AAsNotNullableExternCall___empty_init[] = "parser_prod::AAsNotNullableExternCall::empty_init";
+void parser___parser_prod___AAsNotNullableExternCall___empty_init(val_t p0, int* init_table){
+  int itpos291 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNotNullableExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos279]) return;
+  if (init_table[itpos291]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7763;
-  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___empty_init;
+  fra.me.line = 8330;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos279] = 1;
+  init_table[itpos291] = 1;
   return;
 }
-void parser___parser_prod___ACastAsExternCall___init_acastasexterncall(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos280 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACastAsExternCall].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall[] = "parser_prod::AAsNotNullableExternCall::init_aasnotnullableexterncall";
+void parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos292 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNotNullableExternCall].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos280]) return;
+  if (init_table[itpos292]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7765;
-  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___init_acastasexterncall;
+  fra.me.line = 8332;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7771 */
-  CALL_parser___parser_prod___ACastAsExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7772 */
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:8332 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8339 */
+  CALL_parser___parser_prod___AAsNotNullableExternCall___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:8340 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7772);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8340);
   }
-  ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7773 */
+  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8341 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7773);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8341);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7774 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:8342 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7774);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8342);
   }
-  ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7775 */
+  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:8343 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7775);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8343);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7776 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:8344 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7776);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8344);
   }
-  ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7777 */
+  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:8345 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7777);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8345);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:8346 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8346);
+  }
+  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:8347 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8347);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos280] = 1;
+  init_table[itpos292] = 1;
   return;
 }
-void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___AAsNotNullableExternCall___replace_child[] = "parser_prod::AAsNotNullableExternCall::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7780;
-  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___replace_child;
+  fra.me.line = 8350;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -41197,13 +45600,13 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7782 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8352 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 7782);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8352);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41211,13 +45614,13 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7783 */
+    /* parser/parser_prod.nit:8353 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -41226,34 +45629,34 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7784 */
+      /* parser/parser_prod.nit:8354 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7784);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8354);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7785 */
+      /* parser/parser_prod.nit:8355 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7785);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8355);
       }
-      /* ./parser//parser_prod.nit:7786 */
-      ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8356 */
+      ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7788 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7788);
+      /* parser/parser_prod.nit:8358 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8358);
     }
-    /* ./parser//parser_prod.nit:7790 */
+    /* parser/parser_prod.nit:8360 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7792 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8362 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7792);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8362);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41261,13 +45664,13 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7793 */
+    /* parser/parser_prod.nit:8363 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -41276,34 +45679,34 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7794 */
+      /* parser/parser_prod.nit:8364 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7794);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8364);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7795 */
+      /* parser/parser_prod.nit:8365 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7795);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8365);
       }
-      /* ./parser//parser_prod.nit:7796 */
-      ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8366 */
+      ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7798 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7798);
+      /* parser/parser_prod.nit:8368 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8368);
     }
-    /* ./parser//parser_prod.nit:7800 */
+    /* parser/parser_prod.nit:8370 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7802 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8372 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 7802);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 8372);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41311,13 +45714,13 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7803 */
+    /* parser/parser_prod.nit:8373 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -41326,102 +45729,166 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7804 */
+      /* parser/parser_prod.nit:8374 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7804);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8374);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7805 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+      /* parser/parser_prod.nit:8375 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast TKwnot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7805);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8375);
       }
-      /* ./parser//parser_prod.nit:7806 */
-      ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8376 */
+      ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:8378 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8378);
+    }
+    /* parser/parser_prod.nit:8380 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:8382 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8382);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:8383 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:8384 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8384);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8385 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8385);
+      }
+      /* parser/parser_prod.nit:8386 */
+      ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7808 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7808);
+      /* parser/parser_prod.nit:8388 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8388);
     }
-    /* ./parser//parser_prod.nit:7810 */
+    /* parser/parser_prod.nit:8390 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___ACastAsExternCall___visit_all(val_t p0, val_t p1){
+static const char LOCATE_parser___parser_prod___AAsNotNullableExternCall___visit_all[] = "parser_prod::AAsNotNullableExternCall::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AAsNotNullableExternCall___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7814;
-  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___visit_all;
+  fra.me.line = 8394;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7816 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8396 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 7816);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8396);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7817 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8397 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7817);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8397);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7818 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8398 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 7818);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 8398);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8399 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8399);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AAsNullableExternCall___empty_init(val_t p0, int* init_table){
-  int itpos281 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNullableExternCall].i;
+static const char LOCATE_parser___parser_prod___AInLanguage___empty_init[] = "parser_prod::AInLanguage::empty_init";
+void parser___parser_prod___AInLanguage___empty_init(val_t p0, int* init_table){
+  int itpos293 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInLanguage].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos281]) return;
+  if (init_table[itpos293]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7822;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___empty_init;
+  fra.me.line = 8403;
+  fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos281] = 1;
+  init_table[itpos293] = 1;
   return;
 }
-void parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos282 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNullableExternCall].i;
+static const char LOCATE_parser___parser_prod___AInLanguage___init_ainlanguage[] = "parser_prod::AInLanguage::init_ainlanguage";
+void parser___parser_prod___AInLanguage___init_ainlanguage(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos294 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInLanguage].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos282]) return;
+  if (init_table[itpos294]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7824;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall;
+  fra.me.line = 8405;
+  fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___init_ainlanguage;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -41429,63 +45896,53 @@ void parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7830 */
-  CALL_parser___parser_prod___AAsNullableExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7831 */
+  /* parser/parser_prod.nit:8405 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8410 */
+  CALL_parser___parser_prod___AInLanguage___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:8411 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7831);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8411);
   }
-  ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7832 */
+  ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8412 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7832);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8412);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7833 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8413 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7833);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8413);
   }
-  ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7834 */
+  ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:8414 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7834);
-  }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7835 */
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7835);
-  }
-  ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7836 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7836);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8414);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos282] = 1;
+  init_table[itpos294] = 1;
   return;
 }
-void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___AInLanguage___replace_child[] = "parser_prod::AInLanguage::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7839;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___replace_child;
+  fra.me.line = 8417;
+  fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -41493,63 +45950,13 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7841 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7841);
-  }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB0 = REGB1;
-  }
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7842 */
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
-        REGB0 = REGB1;
-      } else {
-        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB0 = REGB1;
-      }
-    }
-    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-    if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7843 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7843);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7844 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7844);
-      }
-      /* ./parser//parser_prod.nit:7845 */
-      ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:7847 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7847);
-    }
-    /* ./parser//parser_prod.nit:7849 */
-    goto label1;
-  }
-  /* ./parser//parser_prod.nit:7851 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8419 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7851);
+    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_prod, 8419);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41557,13 +45964,13 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7852 */
+    /* parser/parser_prod.nit:8420 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -41572,34 +45979,34 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7853 */
+      /* parser/parser_prod.nit:8421 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7853);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8421);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7854 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
+      /* parser/parser_prod.nit:8422 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwin, ID_parser___parser_nodes___TKwin)) /*cast TKwin*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7854);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8422);
       }
-      /* ./parser//parser_prod.nit:7855 */
-      ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8423 */
+      ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7857 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7857);
+      /* parser/parser_prod.nit:8425 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8425);
     }
-    /* ./parser//parser_prod.nit:7859 */
+    /* parser/parser_prod.nit:8427 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7861 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8429 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 7861);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 8429);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41607,13 +46014,13 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7862 */
+    /* parser/parser_prod.nit:8430 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -41622,181 +46029,166 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7863 */
+      /* parser/parser_prod.nit:8431 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7863);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8431);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7864 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
+      /* parser/parser_prod.nit:8432 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7864);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8432);
       }
-      /* ./parser//parser_prod.nit:7865 */
-      ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8433 */
+      ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7867 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7867);
+      /* parser/parser_prod.nit:8435 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8435);
     }
-    /* ./parser//parser_prod.nit:7869 */
+    /* parser/parser_prod.nit:8437 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AAsNullableExternCall___visit_all(val_t p0, val_t p1){
+static const char LOCATE_parser___parser_prod___AInLanguage___visit_all[] = "parser_prod::AInLanguage::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AInLanguage___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7873;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___visit_all;
+  fra.me.line = 8441;
+  fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7875 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8443 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7875);
+    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_prod, 8443);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7876 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8444 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7876);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 8444);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7877 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 7877);
-  }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AAsNotNullableExternCall___empty_init(val_t p0, int* init_table){
-  int itpos283 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNotNullableExternCall].i;
+static const char LOCATE_parser___parser_prod___AExternCodeBlock___empty_init[] = "parser_prod::AExternCodeBlock::empty_init";
+void parser___parser_prod___AExternCodeBlock___empty_init(val_t p0, int* init_table){
+  int itpos295 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCodeBlock].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos283]) return;
+  if (init_table[itpos295]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7881;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___empty_init;
+  fra.me.line = 8448;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos283] = 1;
+  init_table[itpos295] = 1;
   return;
 }
-void parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos284 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNotNullableExternCall].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock[] = "parser_prod::AExternCodeBlock::init_aexterncodeblock";
+void parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos296 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCodeBlock].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos284]) return;
+  if (init_table[itpos296]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7883;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall;
+  fra.me.line = 8450;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:7890 */
-  CALL_parser___parser_prod___AAsNotNullableExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7891 */
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* parser/parser_prod.nit:8450 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8455 */
+  CALL_parser___parser_prod___AExternCodeBlock___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:8456 */
+  ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8457 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7891);
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7892 */
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7892);
+    /* parser/parser_prod.nit:8458 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8458);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7893 */
+  /* parser/parser_prod.nit:8460 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7893);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8460);
   }
-  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7894 */
+  ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:8461 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7894);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8461);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7895 */
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7895);
-  }
-  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7896 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7896);
-  }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7897 */
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7897);
-  }
-  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:7898 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7898);
-  }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos284] = 1;
+  init_table[itpos296] = 1;
   return;
 }
-void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___AExternCodeBlock___replace_child[] = "parser_prod::AExternCodeBlock::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7901;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___replace_child;
+  fra.me.line = 8464;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -41804,127 +46196,28 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7903 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7903);
-  }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB0 = REGB1;
-  }
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7904 */
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
-        REGB0 = REGB1;
-      } else {
-        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB0 = REGB1;
-      }
-    }
-    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-    if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7905 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7905);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7906 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7906);
-      }
-      /* ./parser//parser_prod.nit:7907 */
-      ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:7909 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7909);
-    }
-    /* ./parser//parser_prod.nit:7911 */
-    goto label1;
-  }
-  /* ./parser//parser_prod.nit:7913 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7913);
-  }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  /* parser/parser_prod.nit:8466 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB0 = REGB1;
-  }
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7914 */
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
-        REGB0 = REGB1;
-      } else {
-        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB0 = REGB1;
-      }
-    }
-    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-    if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7915 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7915);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7916 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7916);
-      }
-      /* ./parser//parser_prod.nit:7917 */
-      ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
     } else {
-      /* ./parser//parser_prod.nit:7919 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7919);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
     }
-    /* ./parser//parser_prod.nit:7921 */
-    goto label1;
-  }
-  /* ./parser//parser_prod.nit:7923 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7923);
-  }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7924 */
+    /* parser/parser_prod.nit:8467 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -41933,34 +46226,34 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7925 */
+      /* parser/parser_prod.nit:8468 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7925);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8468);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7926 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast TKwnot*/;
+      /* parser/parser_prod.nit:8469 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AInLanguage, ID_parser___parser_nodes___AInLanguage)) /*cast AInLanguage*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7926);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8469);
       }
-      /* ./parser//parser_prod.nit:7927 */
-      ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8470 */
+      ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7929 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7929);
+      /* parser/parser_prod.nit:8472 */
+      ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7931 */
+    /* parser/parser_prod.nit:8474 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7933 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8476 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 7933);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_prod, 8476);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41968,13 +46261,13 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7934 */
+    /* parser/parser_prod.nit:8477 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -41983,129 +46276,140 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7935 */
+      /* parser/parser_prod.nit:8478 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7935);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8478);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7936 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
+      /* parser/parser_prod.nit:8479 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TExternCodeSegment, ID_parser___parser_nodes___TExternCodeSegment)) /*cast TExternCodeSegment*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7936);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8479);
       }
-      /* ./parser//parser_prod.nit:7937 */
-      ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:8480 */
+      ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7939 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7939);
+      /* parser/parser_prod.nit:8482 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8482);
     }
-    /* ./parser//parser_prod.nit:7941 */
+    /* parser/parser_prod.nit:8484 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___parser_prod___AAsNotNullableExternCall___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+static const char LOCATE_parser___parser_prod___AExternCodeBlock___visit_all[] = "parser_prod::AExternCodeBlock::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AExternCodeBlock___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7945;
-  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___visit_all;
+  fra.me.line = 8488;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7947 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8488 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8490 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7947);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7948 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7948);
+    /* parser/parser_prod.nit:8491 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AInLanguage, ID_parser___parser_nodes___AInLanguage)) /*cast AInLanguage*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8491);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7949 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8493 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7949);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_prod, 8493);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7950 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 7950);
-  }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AQualified___empty_init[] = "parser_prod::AQualified::empty_init";
 void parser___parser_prod___AQualified___empty_init(val_t p0, int* init_table){
-  int itpos285 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AQualified].i;
+  int itpos297 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AQualified].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos285]) return;
+  if (init_table[itpos297]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7954;
+  fra.me.line = 8497;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos285] = 1;
+  init_table[itpos297] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___AQualified___init_aqualified[] = "parser_prod::AQualified::init_aqualified";
 void parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AQualified].i;
+  int itpos298 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AQualified].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos286]) return;
+  if (init_table[itpos298]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7956;
+  fra.me.line = 8499;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___init_aqualified;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7961 */
+  /* parser/parser_prod.nit:8504 */
   CALL_parser___parser_prod___AQualified___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AQualified___init_aqualified_1));
-  /* ./parser//parser_prod.nit:7967 */
+  /* parser/parser_prod.nit:8510 */
   ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7968 */
+  /* parser/parser_prod.nit:8511 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -42114,15 +46418,15 @@ void parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7969 */
+    /* parser/parser_prod.nit:8512 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7969);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8512);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos286] = 1;
+  init_table[itpos298] = 1;
   return;
 }
   void OC_parser___parser_prod___AQualified___init_aqualified_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -42130,38 +46434,40 @@ void parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:7962 */
+    /* parser/parser_prod.nit:8505 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___AQualified___init_aqualified;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:7963 */
+    /* parser/parser_prod.nit:8506 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7963);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8506);
     }
-    /* ./parser//parser_prod.nit:7964 */
+    /* parser/parser_prod.nit:8507 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7964);
+      nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8507);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AQualified____n_id(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:7965 */
+    /* parser/parser_prod.nit:8508 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___AQualified___replace_child[] = "parser_prod::AQualified::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -42172,10 +46478,11 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7973;
+  fra.me.line = 8516;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -42183,37 +46490,42 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7975 */
+  /* parser/parser_prod.nit:8518 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7975);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8518);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:7975 */
+      /* parser/parser_prod.nit:8518 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:7976 */
+      /* parser/parser_prod.nit:8519 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7976);
+        nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8519);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -42221,13 +46533,13 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:7977 */
+        /* parser/parser_prod.nit:8520 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -42236,59 +46548,59 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:7978 */
+          /* parser/parser_prod.nit:8521 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7978);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8521);
           }
-          /* ./parser//parser_prod.nit:7979 */
+          /* parser/parser_prod.nit:8522 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7979);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8522);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:7980 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:8523 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7980);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8523);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:7982 */
+          /* parser/parser_prod.nit:8525 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7982);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8525);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:7984 */
+        /* parser/parser_prod.nit:8527 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:7987 */
+  /* parser/parser_prod.nit:8530 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -42296,13 +46608,13 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7988 */
+    /* parser/parser_prod.nit:8531 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -42311,79 +46623,84 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7989 */
+      /* parser/parser_prod.nit:8532 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7989);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8532);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7990 */
+      /* parser/parser_prod.nit:8533 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7990);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8533);
       }
-      /* ./parser//parser_prod.nit:7991 */
+      /* parser/parser_prod.nit:8534 */
       ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7993 */
+      /* parser/parser_prod.nit:8536 */
       ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7995 */
+    /* parser/parser_prod.nit:8538 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___AQualified___visit_all[] = "parser_prod::AQualified::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AQualified___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7999;
+  fra.me.line = 8542;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8001 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8542 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8544 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8001);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8544);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AQualified___visit_all_1));
-  /* ./parser//parser_prod.nit:8004 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AQualified___visit_all_1));
+  /* parser/parser_prod.nit:8547 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:8005 */
-    fra.me.REG[0] = ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
+    /* parser/parser_prod.nit:8548 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8005);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8548);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -42398,53 +46715,58 @@ void parser___parser_prod___AQualified___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___AQualified___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:8002 */
+    /* parser/parser_prod.nit:8545 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ADoc___empty_init[] = "parser_prod::ADoc::empty_init";
 void parser___parser_prod___ADoc___empty_init(val_t p0, int* init_table){
-  int itpos287 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoc].i;
+  int itpos299 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoc].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos287]) return;
+  if (init_table[itpos299]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8010;
+  fra.me.line = 8553;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos287] = 1;
+  init_table[itpos299] = 1;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADoc___init_adoc[] = "parser_prod::ADoc::init_adoc";
 void parser___parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table){
-  int itpos288 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoc].i;
+  int itpos300 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoc].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos288]) return;
+  if (init_table[itpos300]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8012;
+  fra.me.line = 8555;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___init_adoc;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8016 */
+  /* parser/parser_prod.nit:8559 */
   CALL_parser___parser_prod___ADoc___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ADoc___init_adoc_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos288] = 1;
+  init_table[itpos300] = 1;
   return;
 }
   void OC_parser___parser_prod___ADoc___init_adoc_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -42452,38 +46774,40 @@ void parser___parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:8017 */
+    /* parser/parser_prod.nit:8560 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
     fra.me.meth = LOCATE_parser___parser_prod___ADoc___init_adoc;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:8018 */
+    /* parser/parser_prod.nit:8561 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TComment, ID_parser___parser_nodes___TComment)) /*cast TComment*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8018);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8561);
     }
-    /* ./parser//parser_prod.nit:8019 */
+    /* parser/parser_prod.nit:8562 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8019);
+      nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8562);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ADoc____n_comment(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:8020 */
+    /* parser/parser_prod.nit:8563 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_parser___parser_prod___ADoc___replace_child[] = "parser_prod::ADoc::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -42494,10 +46818,11 @@ void parser___parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8024;
+  fra.me.line = 8567;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -42505,37 +46830,42 @@ void parser___parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:8026 */
+  /* parser/parser_prod.nit:8569 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8026);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8569);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./../lib/standard//kernel.nit:335 */
+  /* ../lib/standard/kernel.nit:355 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:215 */
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//kernel.nit:335 */
+    /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:8026 */
+      /* parser/parser_prod.nit:8569 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:8027 */
+      /* parser/parser_prod.nit:8570 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8027);
+        nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8570);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
       if (UNTAG_Bool(REGB3)) {
       } else {
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(false);
+          REGB4 = TAG_Bool(0);
           REGB3 = REGB4;
         } else {
           REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -42543,13 +46873,13 @@ void parser___parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:8028 */
+        /* parser/parser_prod.nit:8571 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
           REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(false);
+            REGB4 = TAG_Bool(0);
             REGB3 = REGB4;
           } else {
             REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -42558,47 +46888,47 @@ void parser___parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser_prod.nit:8029 */
+          /* parser/parser_prod.nit:8572 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TComment, ID_parser___parser_nodes___TComment)) /*cast TComment*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8029);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8572);
           }
-          /* ./parser//parser_prod.nit:8030 */
+          /* parser/parser_prod.nit:8573 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8030);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8573);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:8031 */
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:8574 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8031);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8574);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:8033 */
+          /* parser/parser_prod.nit:8576 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8033);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8576);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:8035 */
+        /* parser/parser_prod.nit:8578 */
         goto label1;
       }
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB2 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ./../lib/standard//kernel.nit:337 */
+      /* ../lib/standard/kernel.nit:357 */
       REGB0 = REGB2;
     } else {
-      /* ./../lib/standard//kernel.nit:335 */
+      /* ../lib/standard/kernel.nit:355 */
       goto label2;
     }
   }
@@ -42607,25 +46937,27 @@ void parser___parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___ADoc___visit_all[] = "parser_prod::ADoc::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ADoc___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8040;
+  fra.me.line = 8583;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8042 */
+  /* parser/parser_prod.nit:8585 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8042);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8585);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ADoc___visit_all_1));
@@ -42642,41 +46974,18 @@ void parser___parser_prod___ADoc___visit_all(val_t p0, val_t p1){
     fra.me.meth = LOCATE_parser___parser_prod___ADoc___visit_all;
     fra.me.has_broke = 0;
     fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:8043 */
+    /* parser/parser_prod.nit:8586 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
-void parser___parser_prod___Start___init(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos289 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___Start].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t tmp;
-  if (init_table[itpos289]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8049;
-  fra.me.meth = LOCATE_parser___parser_prod___Start___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:8053 */
-  ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8054 */
-  ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[0]) = fra.me.REG[2];
-  stack_frame_head = fra.me.prev;
-  init_table[itpos289] = 1;
-  return;
-}
+static const char LOCATE_parser___parser_prod___Start___replace_child[] = "parser_prod::Start::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -42684,10 +46993,11 @@ void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8057;
+  fra.me.line = 8592;
   fra.me.meth = LOCATE_parser___parser_prod___Start___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -42695,14 +47005,14 @@ void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:8059 */
+  /* parser/parser_prod.nit:8594 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
       REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
@@ -42710,13 +47020,13 @@ void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:8060 */
+    /* parser/parser_prod.nit:8595 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(false);
+        REGB1 = TAG_Bool(0);
         REGB0 = REGB1;
       } else {
         REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
@@ -42725,79 +47035,84 @@ void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
     }
     if (UNTAG_Bool(REGB0)) {
     } else {
-      /* ./parser//parser_prod.nit:8062 */
+      /* parser/parser_prod.nit:8597 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8062);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8597);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:8063 */
+      /* parser/parser_prod.nit:8598 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AModule, ID_parser___parser_nodes___AModule)) /*cast AModule*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8063);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8598);
       }
-      /* ./parser//parser_prod.nit:8064 */
+      /* parser/parser_prod.nit:8599 */
       ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[2];
     }
-    /* ./parser//parser_prod.nit:8066 */
+    /* parser/parser_prod.nit:8601 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-    /* ./parser//parser_prod.nit:8067 */
+    /* parser/parser_prod.nit:8602 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_prod___Start___visit_all[] = "parser_prod::Start::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___Start___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8071;
+  fra.me.line = 8606;
   fra.me.meth = LOCATE_parser___parser_prod___Start___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8073 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* parser/parser_prod.nit:8606 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8608 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[2]);
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
+      REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:8074 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AModule, ID_parser___parser_nodes___AModule)) /*cast AModule*/;
+    /* parser/parser_prod.nit:8609 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModule, ID_parser___parser_nodes___AModule)) /*cast AModule*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8074);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8609);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* ./parser//parser_prod.nit:8076 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:8611 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser___parser_prod, 8076);
+    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser___parser_prod, 8611);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }