c_src : Regenerated c_src to prevent use of String contructors
[nit.git] / c_src / parser___parser_prod._sep.c
index bc6df2d..e009596 100644 (file)
 /* 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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 10;
-  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 */
-  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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 10;
-  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 */
-  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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 13;
-  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 */
-  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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 19;
-  fra.me.meth = LOCATE_parser___parser_prod___ANode___replace_child;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
-  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;
-  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 = 22;
-  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 */
-  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(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: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)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 26);
-    }
-    CALL_parser___parser_prod___ANode___replace_child(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1]);
-  }
-  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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 30;
-  fra.me.meth = LOCATE_parser___parser_prod___ANode___visit_all;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
-  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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 36;
-  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;
-  fra.me.REG[1] = 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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 37;
-  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;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = 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;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 41;
-  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 */
-  fra.me.REG[2] = fra.me.REG[0];
-  fra.me.REG[3] = fra.me.REG[1];
-  /* 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 */
-  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 */
-  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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 51;
-  fra.me.meth = LOCATE_parser___parser_prod___Visitor___visit;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
-  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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 55;
-  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 */
-  fra.me.REG[2] = ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]);
-  /* 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 */
-  CALL_parser___parser_prod___Visitor___visit(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* 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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 66;
-  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 */
-  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;
-  val_t tmp;
-  if (init_table[itpos0]) return;
-  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___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;
+  int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModule].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos1]) return;
+  if (init_table[itpos0]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 71;
+  fra.me.line = 10;
   fra.me.meth = LOCATE_parser___parser_prod___AModule___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -302,20 +16,20 @@ void parser___parser_prod___AModule___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1] = 1;
+  init_table[itpos0] = 1;
   return;
 }
 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;
+  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModule].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[itpos2]) return;
+  if (init_table[itpos1]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 73;
+  fra.me.line = 12;
   fra.me.meth = LOCATE_parser___parser_prod___AModule___init_amodule;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -330,11 +44,11 @@ void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2,
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:80 */
+  /* parser/parser_prod.nit:19 */
   CALL_parser___parser_prod___AModule___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:81 */
+  /* parser/parser_prod.nit:20 */
   ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:82 */
+  /* parser/parser_prod.nit:21 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -349,18 +63,18 @@ 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:83 */
+    /* parser/parser_prod.nit:22 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 83);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 22);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos1] = 1;
   return;
 }
   void OC_parser___parser_prod___AModule___init_amodule_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -368,7 +82,7 @@ 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:85 */
+    /* parser/parser_prod.nit:24 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -382,22 +96,22 @@ void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:86 */
+    /* parser/parser_prod.nit:25 */
     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, 86);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 25);
     }
-    /* parser/parser_prod.nit:87 */
+    /* parser/parser_prod.nit:26 */
     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, 87);
+      nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 26);
     }
     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:88 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:27 */
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -406,7 +120,7 @@ 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:90 */
+    /* parser/parser_prod.nit:29 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -420,22 +134,22 @@ void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:91 */
+    /* parser/parser_prod.nit:30 */
     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);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 30);
     }
-    /* parser/parser_prod.nit:92 */
+    /* parser/parser_prod.nit:31 */
     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);
+      nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 31);
     }
     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]);
+    /* parser/parser_prod.nit:32 */
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -444,7 +158,7 @@ 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:95 */
+    /* parser/parser_prod.nit:34 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -458,26 +172,26 @@ void parser___parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:96 */
+    /* parser/parser_prod.nit:35 */
     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, 96);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 35);
     }
-    /* parser/parser_prod.nit:97 */
+    /* parser/parser_prod.nit:36 */
     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, 97);
+      nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 36);
     }
     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:98 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:37 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AModule___replace_child[] = "parser_prod::AModule::(parser_nodes::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;
@@ -488,7 +202,7 @@ 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 = 102;
+  fra.me.line = 41;
   fra.me.meth = LOCATE_parser___parser_prod___AModule___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -500,7 +214,7 @@ 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:104 */
+  /* parser/parser_prod.nit:43 */
   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)) {
@@ -515,7 +229,7 @@ void parser___parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:105 */
+    /* parser/parser_prod.nit:44 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -530,71 +244,65 @@ 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:106 */
+      /* parser/parser_prod.nit:45 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 106);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 45);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:107 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:46 */
       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, 107);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 46);
       }
-      /* parser/parser_prod.nit:108 */
+      /* parser/parser_prod.nit:47 */
       ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:110 */
+      /* parser/parser_prod.nit:49 */
       ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:112 */
+    /* parser/parser_prod.nit:51 */
     goto label1;
   }
-  /* parser/parser_prod.nit:114 */
+  /* parser/parser_prod.nit:53 */
   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, 114);
+    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 53);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:114 */
+      /* parser/parser_prod.nit:53 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:115 */
+      /* parser/parser_prod.nit:54 */
       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, 54);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_imports(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:116 */
+        /* parser/parser_prod.nit:55 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -609,95 +317,89 @@ 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:117 */
+          /* parser/parser_prod.nit:56 */
           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, 117);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 56);
           }
-          /* parser/parser_prod.nit:118 */
+          /* parser/parser_prod.nit:57 */
           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, 118);
+            nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 57);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_imports(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:119 */
+          /* parser/parser_prod.nit:58 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 119);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 58);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:121 */
+          /* parser/parser_prod.nit:60 */
           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, 121);
+            nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 60);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_imports(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:123 */
+        /* parser/parser_prod.nit:62 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:126 */
+  /* parser/parser_prod.nit:65 */
   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);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 65);
   }
   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 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:126 */
+      /* parser/parser_prod.nit:65 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:127 */
+      /* parser/parser_prod.nit:66 */
       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);
+        nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 66);
       }
       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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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 */
+        /* parser/parser_prod.nit:67 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -712,95 +414,89 @@ 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:129 */
+          /* parser/parser_prod.nit:68 */
           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);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 68);
           }
-          /* parser/parser_prod.nit:130 */
+          /* parser/parser_prod.nit:69 */
           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);
+            nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 69);
           }
           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 */
+          /* parser/parser_prod.nit:70 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 131);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 70);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:133 */
+          /* parser/parser_prod.nit:72 */
           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);
+            nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 72);
           }
           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 */
+        /* parser/parser_prod.nit:74 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label3;
     }
   }
   label3: while(0);
-  /* parser/parser_prod.nit:138 */
+  /* parser/parser_prod.nit:77 */
   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, 138);
+    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 77);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:138 */
+      /* parser/parser_prod.nit:77 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:139 */
+      /* parser/parser_prod.nit:78 */
       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, 139);
+        nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 78);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_classdefs(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:140 */
+        /* parser/parser_prod.nit:79 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -815,47 +511,47 @@ 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:141 */
+          /* parser/parser_prod.nit:80 */
           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, 141);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 80);
           }
-          /* parser/parser_prod.nit:142 */
+          /* parser/parser_prod.nit:81 */
           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, 142);
+            nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 81);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_classdefs(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:143 */
+          /* parser/parser_prod.nit:82 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 143);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 82);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:145 */
+          /* parser/parser_prod.nit:84 */
           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, 145);
+            nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 84);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModule____n_classdefs(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:147 */
+        /* parser/parser_prod.nit:86 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label4;
     }
   }
@@ -864,7 +560,51 @@ void parser___parser_prod___AModule___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___AModule___visit_all[] = "parser_prod::AModule::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AModule___n_moduledecl__eq[] = "parser_prod::AModule::(parser_nodes::AModule::n_moduledecl=)";
+void parser___parser_prod___AModule___n_moduledecl__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 91;
+  fra.me.meth = LOCATE_parser___parser_prod___AModule___n_moduledecl__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:93 */
+  ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:94 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:95 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 95);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AModule___visit_all[] = "parser_prod::AModule::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -872,7 +612,7 @@ void parser___parser_prod___AModule___visit_all(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 = 152;
+  fra.me.line = 100;
   fra.me.meth = LOCATE_parser___parser_prod___AModule___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -883,9 +623,9 @@ void parser___parser_prod___AModule___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:152 */
+  /* parser/parser_prod.nit:100 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:154 */
+  /* parser/parser_prod.nit:102 */
   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)) {
@@ -901,36 +641,36 @@ void parser___parser_prod___AModule___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:155 */
+    /* parser/parser_prod.nit:103 */
     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, 155);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 103);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:157 */
+  /* parser/parser_prod.nit:105 */
   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);
+    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_prod, 105);
   }
   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 */
+  /* parser/parser_prod.nit:108 */
   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_extern_code_blocks", LOCATE_parser___parser_prod, 160);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_prod, 108);
   }
   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 */
+  /* parser/parser_prod.nit:111 */
   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, 163);
+    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_prod, 111);
   }
   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));
@@ -953,8 +693,8 @@ void parser___parser_prod___AModule___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:158 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:106 */
+    CALL_parser___parser_nodes___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -974,8 +714,8 @@ void parser___parser_prod___AModule___visit_all(val_t p0, val_t p1){
     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]);
+    /* parser/parser_prod.nit:109 */
+    CALL_parser___parser_nodes___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -995,20 +735,20 @@ void parser___parser_prod___AModule___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:164 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:112 */
+    CALL_parser___parser_nodes___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;
+  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuledecl].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos3]) return;
+  if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 169;
+  fra.me.line = 117;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -1016,20 +756,20 @@ void parser___parser_prod___AModuledecl___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos3] = 1;
+  init_table[itpos2] = 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, val_t p4, int* init_table){
-  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuledecl].i;
+  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuledecl].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos4]) return;
+  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 = 171;
+  fra.me.line = 119;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___init_amoduledecl;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -1045,13 +785,13 @@ void parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, v
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:171 */
+  /* parser/parser_prod.nit:119 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:178 */
+  /* parser/parser_prod.nit:126 */
   CALL_parser___parser_prod___AModuledecl___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:179 */
+  /* parser/parser_prod.nit:127 */
   ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:180 */
+  /* parser/parser_prod.nit:128 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -1066,42 +806,42 @@ 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:181 */
+    /* parser/parser_prod.nit:129 */
     REGB0 = TAG_Bool(fra.me.REG[1]==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, 129);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:183 */
+  /* parser/parser_prod.nit:131 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 183);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 131);
   }
   ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:184 */
+  /* parser/parser_prod.nit:132 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 184);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 132);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:185 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:133 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 185);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 133);
   }
   ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:186 */
+  /* parser/parser_prod.nit:134 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 186);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 134);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:187 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:135 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:188 */
+  /* parser/parser_prod.nit:136 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -1116,18 +856,18 @@ 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:189 */
+    /* parser/parser_prod.nit:137 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 189);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 137);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos4] = 1;
+  init_table[itpos3] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AModuledecl___replace_child[] = "parser_prod::AModuledecl::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AModuledecl___replace_child[] = "parser_prod::AModuledecl::(parser_nodes::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;
@@ -1135,7 +875,7 @@ 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 = 193;
+  fra.me.line = 141;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1147,7 +887,7 @@ 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:195 */
+  /* parser/parser_prod.nit:143 */
   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)) {
@@ -1162,7 +902,7 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:196 */
+    /* parser/parser_prod.nit:144 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1177,32 +917,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:197 */
+      /* parser/parser_prod.nit:145 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 197);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 145);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:198 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:146 */
       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, 198);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 146);
       }
-      /* parser/parser_prod.nit:199 */
+      /* parser/parser_prod.nit:147 */
       ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:201 */
+      /* parser/parser_prod.nit:149 */
       ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:203 */
+    /* parser/parser_prod.nit:151 */
     goto label1;
   }
-  /* parser/parser_prod.nit:205 */
+  /* parser/parser_prod.nit:153 */
   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, 205);
+    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 153);
   }
   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]));
@@ -1212,7 +952,7 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:206 */
+    /* parser/parser_prod.nit:154 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1227,32 +967,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:207 */
+      /* parser/parser_prod.nit:155 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 207);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 155);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:208 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:156 */
       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, 208);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 156);
       }
-      /* parser/parser_prod.nit:209 */
+      /* parser/parser_prod.nit:157 */
       ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:211 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 211);
+      /* parser/parser_prod.nit:159 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 159);
     }
-    /* parser/parser_prod.nit:213 */
+    /* parser/parser_prod.nit:161 */
     goto label1;
   }
-  /* parser/parser_prod.nit:215 */
+  /* parser/parser_prod.nit:163 */
   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, 215);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 163);
   }
   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]));
@@ -1262,7 +1002,7 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:216 */
+    /* parser/parser_prod.nit:164 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1277,28 +1017,28 @@ 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:217 */
+      /* parser/parser_prod.nit:165 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 217);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 165);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:218 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:166 */
       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, 218);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 166);
       }
-      /* parser/parser_prod.nit:219 */
+      /* parser/parser_prod.nit:167 */
       ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:221 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 221);
+      /* parser/parser_prod.nit:169 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 169);
     }
-    /* parser/parser_prod.nit:223 */
+    /* parser/parser_prod.nit:171 */
     goto label1;
   }
-  /* parser/parser_prod.nit:225 */
+  /* parser/parser_prod.nit:173 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -1313,7 +1053,7 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:226 */
+    /* parser/parser_prod.nit:174 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1328,32 +1068,164 @@ 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:227 */
+      /* parser/parser_prod.nit:175 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 227);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 175);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:228 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:176 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 228);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 176);
       }
-      /* parser/parser_prod.nit:229 */
+      /* parser/parser_prod.nit:177 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:231 */
+      /* parser/parser_prod.nit:179 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:233 */
+    /* parser/parser_prod.nit:181 */
     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)";
+static const char LOCATE_parser___parser_prod___AModuledecl___n_doc__eq[] = "parser_prod::AModuledecl::(parser_nodes::AModuledecl::n_doc=)";
+void parser___parser_prod___AModuledecl___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 185;
+  fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___n_doc__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:187 */
+  ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:188 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:189 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 189);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AModuledecl___n_kwmodule__eq[] = "parser_prod::AModuledecl::(parser_nodes::AModuledecl::n_kwmodule=)";
+void parser___parser_prod___AModuledecl___n_kwmodule__eq(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 = 192;
+  fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___n_kwmodule__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:194 */
+  ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:195 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AModuledecl___n_name__eq[] = "parser_prod::AModuledecl::(parser_nodes::AModuledecl::n_name=)";
+void parser___parser_prod___AModuledecl___n_name__eq(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 = 197;
+  fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___n_name__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:199 */
+  ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:200 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AModuledecl___n_annotations__eq[] = "parser_prod::AModuledecl::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AModuledecl___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 202;
+  fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___n_annotations__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:204 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:205 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:206 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 206);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AModuledecl___visit_all[] = "parser_prod::AModuledecl::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -1361,7 +1233,7 @@ void parser___parser_prod___AModuledecl___visit_all(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 = 237;
+  fra.me.line = 211;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1372,9 +1244,9 @@ void parser___parser_prod___AModuledecl___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:237 */
+  /* parser/parser_prod.nit:211 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:239 */
+  /* parser/parser_prod.nit:213 */
   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)) {
@@ -1390,32 +1262,32 @@ void parser___parser_prod___AModuledecl___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:240 */
+    /* parser/parser_prod.nit:214 */
     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, 240);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 214);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:242 */
+  /* parser/parser_prod.nit:216 */
   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, 242);
+    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 216);
   }
   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:243 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:217 */
   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, 243);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 217);
   }
   fra.me.REG[3] = 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[3]);
-  /* parser/parser_prod.nit:244 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:218 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -1431,27 +1303,27 @@ void parser___parser_prod___AModuledecl___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:245 */
+    /* parser/parser_prod.nit:219 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 245);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 219);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdImport].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos5]) return;
+  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 = 250;
+  fra.me.line = 224;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -1459,20 +1331,20 @@ void parser___parser_prod___AStdImport___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos5] = 1;
+  init_table[itpos4] = 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, val_t p4, int* init_table){
-  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdImport].i;
+  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdImport].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos6]) return;
+  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 = 252;
+  fra.me.line = 226;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___init_astdimport;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -1488,52 +1360,52 @@ void parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:252 */
+  /* parser/parser_prod.nit:226 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:259 */
+  /* parser/parser_prod.nit:233 */
   CALL_parser___parser_prod___AStdImport___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:260 */
+  /* parser/parser_prod.nit:234 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 260);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 234);
   }
   ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:261 */
+  /* parser/parser_prod.nit:235 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 261);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 235);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:262 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:236 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 262);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 236);
   }
   ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:263 */
+  /* parser/parser_prod.nit:237 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 263);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 237);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:264 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:238 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 264);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 238);
   }
   ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:265 */
+  /* parser/parser_prod.nit:239 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 265);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 239);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:266 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:240 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:267 */
+  /* parser/parser_prod.nit:241 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -1548,18 +1420,18 @@ void parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:268 */
+    /* parser/parser_prod.nit:242 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 268);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 242);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos6] = 1;
+  init_table[itpos5] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AStdImport___replace_child[] = "parser_prod::AStdImport::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AStdImport___replace_child[] = "parser_prod::AStdImport::(parser_nodes::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;
@@ -1567,7 +1439,7 @@ 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 = 272;
+  fra.me.line = 246;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1579,11 +1451,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:274 */
+  /* parser/parser_prod.nit:248 */
   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, 274);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 248);
   }
   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]));
@@ -1593,7 +1465,7 @@ 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:275 */
+    /* parser/parser_prod.nit:249 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1608,32 +1480,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:276 */
+      /* parser/parser_prod.nit:250 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 276);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 250);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:277 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:251 */
       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, 277);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 251);
       }
-      /* parser/parser_prod.nit:278 */
+      /* parser/parser_prod.nit:252 */
       ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:280 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 280);
+      /* parser/parser_prod.nit:254 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 254);
     }
-    /* parser/parser_prod.nit:282 */
+    /* parser/parser_prod.nit:256 */
     goto label1;
   }
-  /* parser/parser_prod.nit:284 */
+  /* parser/parser_prod.nit:258 */
   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, 284);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 258);
   }
   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]));
@@ -1643,7 +1515,7 @@ 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:285 */
+    /* parser/parser_prod.nit:259 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1658,32 +1530,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:286 */
+      /* parser/parser_prod.nit:260 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 286);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 260);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:287 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:261 */
       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, 287);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 261);
       }
-      /* parser/parser_prod.nit:288 */
+      /* parser/parser_prod.nit:262 */
       ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:290 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 290);
+      /* parser/parser_prod.nit:264 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 264);
     }
-    /* parser/parser_prod.nit:292 */
+    /* parser/parser_prod.nit:266 */
     goto label1;
   }
-  /* parser/parser_prod.nit:294 */
+  /* parser/parser_prod.nit:268 */
   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, 294);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 268);
   }
   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]));
@@ -1693,7 +1565,7 @@ 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:295 */
+    /* parser/parser_prod.nit:269 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1708,28 +1580,28 @@ 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:296 */
+      /* parser/parser_prod.nit:270 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 296);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 270);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:297 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:271 */
       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, 297);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 271);
       }
-      /* parser/parser_prod.nit:298 */
+      /* parser/parser_prod.nit:272 */
       ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:300 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 300);
+      /* parser/parser_prod.nit:274 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 274);
     }
-    /* parser/parser_prod.nit:302 */
+    /* parser/parser_prod.nit:276 */
     goto label1;
   }
-  /* parser/parser_prod.nit:304 */
+  /* parser/parser_prod.nit:278 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -1744,7 +1616,7 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:305 */
+    /* parser/parser_prod.nit:279 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1759,32 +1631,142 @@ 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:306 */
+      /* parser/parser_prod.nit:280 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 306);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 280);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:307 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:281 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 307);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 281);
       }
-      /* parser/parser_prod.nit:308 */
+      /* parser/parser_prod.nit:282 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:310 */
+      /* parser/parser_prod.nit:284 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:312 */
+    /* parser/parser_prod.nit:286 */
     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)";
+static const char LOCATE_parser___parser_prod___AStdImport___n_visibility__eq[] = "parser_prod::AStdImport::(parser_nodes::AStdImport::n_visibility=)";
+void parser___parser_prod___AStdImport___n_visibility__eq(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 = 290;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdImport___n_visibility__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:292 */
+  ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:293 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AStdImport___n_kwimport__eq[] = "parser_prod::AStdImport::(parser_nodes::AStdImport::n_kwimport=)";
+void parser___parser_prod___AStdImport___n_kwimport__eq(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 = 295;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdImport___n_kwimport__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:297 */
+  ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:298 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AStdImport___n_name__eq[] = "parser_prod::AStdImport::(parser_nodes::AStdImport::n_name=)";
+void parser___parser_prod___AStdImport___n_name__eq(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 = 300;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdImport___n_name__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:302 */
+  ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:303 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AStdImport___n_annotations__eq[] = "parser_prod::AStdImport::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AStdImport___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 305;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdImport___n_annotations__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:307 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:308 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:309 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 309);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AStdImport___visit_all[] = "parser_prod::AStdImport::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -1792,7 +1774,7 @@ void parser___parser_prod___AStdImport___visit_all(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 = 316;
+  fra.me.line = 314;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1803,33 +1785,33 @@ void parser___parser_prod___AStdImport___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:316 */
+  /* parser/parser_prod.nit:314 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:318 */
+  /* parser/parser_prod.nit:316 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 318);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 316);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____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:319 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:317 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 319);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 317);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_kwimport(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:320 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:318 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 320);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 318);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_name(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:321 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:319 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -1845,27 +1827,27 @@ void parser___parser_prod___AStdImport___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:322 */
+    /* parser/parser_prod.nit:320 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 322);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 320);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANoImport].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos7]) return;
+  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 = 327;
+  fra.me.line = 325;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -1873,19 +1855,19 @@ void parser___parser_prod___ANoImport___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos7] = 1;
+  init_table[itpos6] = 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;
+  int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANoImport].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos8]) return;
+  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 = 329;
+  fra.me.line = 327;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___init_anoimport;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -1899,54 +1881,54 @@ void parser___parser_prod___ANoImport___init_anoimport(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:329 */
+  /* parser/parser_prod.nit:327 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:335 */
+  /* parser/parser_prod.nit:333 */
   CALL_parser___parser_prod___ANoImport___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:336 */
+  /* parser/parser_prod.nit:334 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 336);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 334);
   }
   ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:337 */
+  /* parser/parser_prod.nit:335 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 337);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 335);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:338 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:336 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 338);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 336);
   }
   ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:339 */
+  /* parser/parser_prod.nit:337 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 339);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 337);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:340 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:338 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 340);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 338);
   }
   ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:341 */
+  /* parser/parser_prod.nit:339 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 341);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 339);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos7] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ANoImport___replace_child[] = "parser_prod::ANoImport::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ANoImport___replace_child[] = "parser_prod::ANoImport::(parser_nodes::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;
@@ -1954,7 +1936,7 @@ 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 = 344;
+  fra.me.line = 342;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1966,11 +1948,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:346 */
+  /* 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, 346);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 344);
   }
   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]));
@@ -1980,7 +1962,7 @@ 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:347 */
+    /* parser/parser_prod.nit:345 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1995,32 +1977,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:348 */
+      /* parser/parser_prod.nit:346 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 348);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 346);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:349 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:347 */
       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, 349);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 347);
       }
-      /* parser/parser_prod.nit:350 */
+      /* parser/parser_prod.nit:348 */
       ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:352 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 352);
+      /* parser/parser_prod.nit:350 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 350);
     }
-    /* parser/parser_prod.nit:354 */
+    /* parser/parser_prod.nit:352 */
     goto label1;
   }
-  /* parser/parser_prod.nit:356 */
+  /* parser/parser_prod.nit:354 */
   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, 356);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 354);
   }
   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]));
@@ -2030,7 +2012,7 @@ 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:357 */
+    /* parser/parser_prod.nit:355 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2045,32 +2027,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:358 */
+      /* parser/parser_prod.nit:356 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 358);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 356);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:359 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:357 */
       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, 359);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 357);
       }
-      /* parser/parser_prod.nit:360 */
+      /* parser/parser_prod.nit:358 */
       ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:362 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 362);
+      /* parser/parser_prod.nit:360 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 360);
     }
-    /* parser/parser_prod.nit:364 */
+    /* parser/parser_prod.nit:362 */
     goto label1;
   }
-  /* parser/parser_prod.nit:366 */
+  /* parser/parser_prod.nit:364 */
   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, 366);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 364);
   }
   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]));
@@ -2080,7 +2062,7 @@ 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:367 */
+    /* parser/parser_prod.nit:365 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2095,39 +2077,105 @@ 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:368 */
+      /* parser/parser_prod.nit:366 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 368);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 366);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:369 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:367 */
       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, 369);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 367);
       }
-      /* parser/parser_prod.nit:370 */
+      /* parser/parser_prod.nit:368 */
       ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:372 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 372);
+      /* parser/parser_prod.nit:370 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 370);
     }
-    /* parser/parser_prod.nit:374 */
+    /* parser/parser_prod.nit:372 */
     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)";
+static const char LOCATE_parser___parser_prod___ANoImport___n_visibility__eq[] = "parser_prod::ANoImport::(parser_nodes::ANoImport::n_visibility=)";
+void parser___parser_prod___ANoImport___n_visibility__eq(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 = 376;
+  fra.me.meth = LOCATE_parser___parser_prod___ANoImport___n_visibility__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:378 */
+  ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:379 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwimport__eq[] = "parser_prod::ANoImport::(parser_nodes::ANoImport::n_kwimport=)";
+void parser___parser_prod___ANoImport___n_kwimport__eq(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 = 381;
+  fra.me.meth = LOCATE_parser___parser_prod___ANoImport___n_kwimport__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:383 */
+  ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:384 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwend__eq[] = "parser_prod::ANoImport::(parser_nodes::ANoImport::n_kwend=)";
+void parser___parser_prod___ANoImport___n_kwend__eq(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 = 386;
+  fra.me.meth = LOCATE_parser___parser_prod___ANoImport___n_kwend__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:388 */
+  ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:389 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ANoImport::(parser_nodes::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 = 378;
+  fra.me.line = 393;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2137,42 +2185,42 @@ void parser___parser_prod___ANoImport___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:380 */
+  /* parser/parser_prod.nit:395 */
   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, 380);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 395);
   }
   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:381 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:396 */
   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, 381);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 396);
   }
   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:382 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:397 */
   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, 382);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 397);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APublicVisibility].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos9]) return;
+  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 = 386;
+  fra.me.line = 401;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2180,37 +2228,37 @@ void parser___parser_prod___APublicVisibility___empty_init(val_t p0, int* init_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos9] = 1;
+  init_table[itpos8] = 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;
+  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APublicVisibility].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos10]) return;
+  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 = 388;
+  fra.me.line = 403;
   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:390 */
+  /* parser/parser_prod.nit:405 */
   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;
+  init_table[itpos9] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___APublicVisibility___replace_child[] = "parser_prod::APublicVisibility::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___APublicVisibility___replace_child[] = "parser_prod::APublicVisibility::(parser_nodes::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 = 393;
+  fra.me.line = 408;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2224,13 +2272,13 @@ 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)";
+static const char LOCATE_parser___parser_prod___APublicVisibility___visit_all[] = "parser_prod::APublicVisibility::(parser_nodes::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 = 397;
+  fra.me.line = 414;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2244,13 +2292,13 @@ void parser___parser_prod___APublicVisibility___visit_all(val_t p0, val_t p1){
 }
 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;
+  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APrivateVisibility].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos11]) return;
+  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 = 402;
+  fra.me.line = 419;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2258,19 +2306,19 @@ void parser___parser_prod___APrivateVisibility___empty_init(val_t p0, int* init_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos11] = 1;
+  init_table[itpos10] = 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;
+  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APrivateVisibility].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos12]) return;
+  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 = 404;
+  fra.me.line = 421;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___init_aprivatevisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2280,28 +2328,28 @@ void parser___parser_prod___APrivateVisibility___init_aprivatevisibility(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:404 */
+  /* parser/parser_prod.nit:421 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:408 */
+  /* parser/parser_prod.nit:425 */
   CALL_parser___parser_prod___APrivateVisibility___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:409 */
+  /* parser/parser_prod.nit:426 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 409);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 426);
   }
   ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:410 */
+  /* parser/parser_prod.nit:427 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 410);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 427);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos11] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___APrivateVisibility___replace_child[] = "parser_prod::APrivateVisibility::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___APrivateVisibility___replace_child[] = "parser_prod::APrivateVisibility::(parser_nodes::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;
@@ -2309,7 +2357,7 @@ 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 = 413;
+  fra.me.line = 430;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2321,11 +2369,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:415 */
+  /* parser/parser_prod.nit:432 */
   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, 415);
+    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 432);
   }
   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]));
@@ -2335,7 +2383,7 @@ void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:416 */
+    /* parser/parser_prod.nit:433 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2350,39 +2398,61 @@ 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:417 */
+      /* parser/parser_prod.nit:434 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 417);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 434);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:418 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:435 */
       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, 418);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 435);
       }
-      /* parser/parser_prod.nit:419 */
+      /* parser/parser_prod.nit:436 */
       ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:421 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 421);
+      /* parser/parser_prod.nit:438 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 438);
     }
-    /* parser/parser_prod.nit:423 */
+    /* parser/parser_prod.nit:440 */
     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)";
+static const char LOCATE_parser___parser_prod___APrivateVisibility___n_kwprivate__eq[] = "parser_prod::APrivateVisibility::(parser_nodes::APrivateVisibility::n_kwprivate=)";
+void parser___parser_prod___APrivateVisibility___n_kwprivate__eq(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 = 444;
+  fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___n_kwprivate__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:446 */
+  ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:447 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___APrivateVisibility___visit_all[] = "parser_prod::APrivateVisibility::(parser_nodes::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 = 427;
+  fra.me.line = 451;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2391,26 +2461,26 @@ void parser___parser_prod___APrivateVisibility___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:429 */
+  /* parser/parser_prod.nit:453 */
   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, 429);
+    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 453);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AProtectedVisibility].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos13]) return;
+  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 = 433;
+  fra.me.line = 457;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2418,19 +2488,19 @@ void parser___parser_prod___AProtectedVisibility___empty_init(val_t p0, int* ini
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos13] = 1;
+  init_table[itpos12] = 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;
+  int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AProtectedVisibility].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos14]) return;
+  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 = 435;
+  fra.me.line = 459;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2440,28 +2510,28 @@ void parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:435 */
+  /* parser/parser_prod.nit:459 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:439 */
+  /* parser/parser_prod.nit:463 */
   CALL_parser___parser_prod___AProtectedVisibility___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:440 */
+  /* parser/parser_prod.nit:464 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 440);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 464);
   }
   ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:441 */
+  /* parser/parser_prod.nit:465 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 441);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 465);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos13] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AProtectedVisibility___replace_child[] = "parser_prod::AProtectedVisibility::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AProtectedVisibility___replace_child[] = "parser_prod::AProtectedVisibility::(parser_nodes::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;
@@ -2469,7 +2539,7 @@ 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 = 444;
+  fra.me.line = 468;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2481,11 +2551,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:446 */
+  /* parser/parser_prod.nit:470 */
   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, 446);
+    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 470);
   }
   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]));
@@ -2495,7 +2565,7 @@ void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:447 */
+    /* parser/parser_prod.nit:471 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2510,39 +2580,61 @@ 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:448 */
+      /* parser/parser_prod.nit:472 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 448);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 472);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:449 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:473 */
       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, 449);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 473);
       }
-      /* parser/parser_prod.nit:450 */
+      /* parser/parser_prod.nit:474 */
       ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:452 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 452);
+      /* parser/parser_prod.nit:476 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 476);
     }
-    /* parser/parser_prod.nit:454 */
+    /* parser/parser_prod.nit:478 */
     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)";
+static const char LOCATE_parser___parser_prod___AProtectedVisibility___n_kwprotected__eq[] = "parser_prod::AProtectedVisibility::(parser_nodes::AProtectedVisibility::n_kwprotected=)";
+void parser___parser_prod___AProtectedVisibility___n_kwprotected__eq(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 = 482;
+  fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___n_kwprotected__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:484 */
+  ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:485 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AProtectedVisibility::(parser_nodes::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 = 458;
+  fra.me.line = 489;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2551,26 +2643,26 @@ void parser___parser_prod___AProtectedVisibility___visit_all(val_t p0, val_t p1)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:460 */
+  /* parser/parser_prod.nit:491 */
   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, 460);
+    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 491);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos14 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntrudeVisibility].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos15]) return;
+  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 = 464;
+  fra.me.line = 495;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2578,19 +2670,19 @@ void parser___parser_prod___AIntrudeVisibility___empty_init(val_t p0, int* init_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos15] = 1;
+  init_table[itpos14] = 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;
+  int itpos15 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntrudeVisibility].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos16]) return;
+  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 = 466;
+  fra.me.line = 497;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2600,28 +2692,28 @@ void parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:466 */
+  /* parser/parser_prod.nit:497 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:470 */
+  /* parser/parser_prod.nit:501 */
   CALL_parser___parser_prod___AIntrudeVisibility___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:471 */
+  /* parser/parser_prod.nit:502 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 471);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 502);
   }
   ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:472 */
+  /* parser/parser_prod.nit:503 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 472);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 503);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos15] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AIntrudeVisibility___replace_child[] = "parser_prod::AIntrudeVisibility::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AIntrudeVisibility___replace_child[] = "parser_prod::AIntrudeVisibility::(parser_nodes::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;
@@ -2629,7 +2721,7 @@ 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 = 475;
+  fra.me.line = 506;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2641,11 +2733,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:477 */
+  /* parser/parser_prod.nit:508 */
   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, 477);
+    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 508);
   }
   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]));
@@ -2655,7 +2747,7 @@ void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:478 */
+    /* parser/parser_prod.nit:509 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2670,39 +2762,61 @@ 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:479 */
+      /* parser/parser_prod.nit:510 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 479);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 510);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:480 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:511 */
       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, 480);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 511);
       }
-      /* parser/parser_prod.nit:481 */
+      /* parser/parser_prod.nit:512 */
       ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:483 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 483);
+      /* parser/parser_prod.nit:514 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 514);
     }
-    /* parser/parser_prod.nit:485 */
+    /* parser/parser_prod.nit:516 */
     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)";
+static const char LOCATE_parser___parser_prod___AIntrudeVisibility___n_kwintrude__eq[] = "parser_prod::AIntrudeVisibility::(parser_nodes::AIntrudeVisibility::n_kwintrude=)";
+void parser___parser_prod___AIntrudeVisibility___n_kwintrude__eq(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 = 520;
+  fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___n_kwintrude__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:522 */
+  ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:523 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AIntrudeVisibility::(parser_nodes::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 = 489;
+  fra.me.line = 527;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2711,26 +2825,26 @@ void parser___parser_prod___AIntrudeVisibility___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:491 */
+  /* parser/parser_prod.nit:529 */
   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, 491);
+    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 529);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos16 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdClassdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos17]) return;
+  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 = 495;
+  fra.me.line = 533;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2738,20 +2852,20 @@ void parser___parser_prod___AStdClassdef___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos17] = 1;
+  init_table[itpos16] = 1;
   return;
 }
 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, val_t p11, int* init_table){
-  int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdClassdef].i;
+  int itpos17 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdClassdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos18]) return;
+  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 = 497;
+  fra.me.line = 535;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___init_astdclassdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -2781,13 +2895,13 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   fra.me.REG[9] = p9;
   fra.me.REG[10] = p10;
   fra.me.REG[11] = p11;
-  /* parser/parser_prod.nit:497 */
+  /* parser/parser_prod.nit:535 */
   fra.me.REG[12] = fra.me.REG[0];
-  /* parser/parser_prod.nit:511 */
+  /* parser/parser_prod.nit:549 */
   CALL_parser___parser_prod___AStdClassdef___empty_init(fra.me.REG[12])(fra.me.REG[12], init_table);
-  /* parser/parser_prod.nit:512 */
+  /* parser/parser_prod.nit:550 */
   ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[12]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:513 */
+  /* parser/parser_prod.nit:551 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -2802,16 +2916,16 @@ 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:514 */
+    /* parser/parser_prod.nit:552 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 514);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 552);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:516 */
+  /* parser/parser_prod.nit:554 */
   ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[12]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:517 */
+  /* parser/parser_prod.nit:555 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -2826,42 +2940,42 @@ 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:518 */
+    /* parser/parser_prod.nit:556 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 518);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 556);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:520 */
+  /* parser/parser_prod.nit:558 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 520);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 558);
   }
   ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[12]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:521 */
+  /* parser/parser_prod.nit:559 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 521);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 559);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[12]);
-  /* parser/parser_prod.nit:522 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[12]);
+  /* parser/parser_prod.nit:560 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 522);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 560);
   }
   ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[12]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:523 */
+  /* parser/parser_prod.nit:561 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 523);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 561);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[12]);
-  /* parser/parser_prod.nit:524 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[12]);
+  /* parser/parser_prod.nit:562 */
   ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[12]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:525 */
+  /* parser/parser_prod.nit:563 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -2876,17 +2990,17 @@ 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:526 */
+    /* parser/parser_prod.nit:564 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 526);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 564);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[12]);
   }
   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));
-  /* parser/parser_prod.nit:533 */
+  /* parser/parser_prod.nit:571 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[12]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:534 */
+  /* parser/parser_prod.nit:572 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -2901,16 +3015,16 @@ 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:535 */
+    /* parser/parser_prod.nit:573 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 535);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 573);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:537 */
+  /* parser/parser_prod.nit:575 */
   ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[12]) = fra.me.REG[8];
-  /* parser/parser_prod.nit:538 */
+  /* parser/parser_prod.nit:576 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -2925,30 +3039,30 @@ 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:539 */
+    /* parser/parser_prod.nit:577 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 539);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 577);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[12]);
   }
   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_2));
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[10])(fra.me.REG[10], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_3));
-  /* parser/parser_prod.nit:551 */
+  /* parser/parser_prod.nit:589 */
   REGB0 = TAG_Bool(fra.me.REG[11]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 551);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 589);
   }
   ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[12]) = fra.me.REG[11];
-  /* parser/parser_prod.nit:552 */
+  /* parser/parser_prod.nit:590 */
   REGB0 = TAG_Bool(fra.me.REG[11]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 552);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 590);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[12]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[12]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos18] = 1;
+  init_table[itpos17] = 1;
   return;
 }
   void OC_parser___parser_prod___AStdClassdef___init_astdclassdef_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -2956,7 +3070,7 @@ 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:528 */
+    /* parser/parser_prod.nit:566 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -2970,22 +3084,22 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:529 */
+    /* parser/parser_prod.nit:567 */
     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, 529);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 567);
     }
-    /* parser/parser_prod.nit:530 */
+    /* parser/parser_prod.nit:568 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[12])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 530);
+      nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 568);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[12]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:531 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[12]);
+    /* parser/parser_prod.nit:569 */
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[12]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -2994,7 +3108,7 @@ 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:541 */
+    /* parser/parser_prod.nit:579 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -3008,22 +3122,22 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:542 */
+    /* parser/parser_prod.nit:580 */
     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, 542);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 580);
     }
-    /* parser/parser_prod.nit:543 */
+    /* parser/parser_prod.nit:581 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[12])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 543);
+      nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 581);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[12]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:544 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[12]);
+    /* parser/parser_prod.nit:582 */
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[12]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -3032,7 +3146,7 @@ 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:546 */
+    /* parser/parser_prod.nit:584 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -3046,26 +3160,26 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:547 */
+    /* parser/parser_prod.nit:585 */
     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, 547);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 585);
     }
-    /* parser/parser_prod.nit:548 */
+    /* parser/parser_prod.nit:586 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[12])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 548);
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 586);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[12]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:549 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[12]);
+    /* parser/parser_prod.nit:587 */
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[12]);
     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)";
+static const char LOCATE_parser___parser_prod___AStdClassdef___replace_child[] = "parser_prod::AStdClassdef::(parser_nodes::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;
@@ -3076,7 +3190,7 @@ 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 = 555;
+  fra.me.line = 593;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -3088,7 +3202,7 @@ 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:557 */
+  /* parser/parser_prod.nit:595 */
   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)) {
@@ -3103,7 +3217,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:558 */
+    /* parser/parser_prod.nit:596 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3118,28 +3232,28 @@ 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:559 */
+      /* parser/parser_prod.nit:597 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 559);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 597);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:560 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:598 */
       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, 560);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 598);
       }
-      /* parser/parser_prod.nit:561 */
+      /* parser/parser_prod.nit:599 */
       ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:563 */
+      /* parser/parser_prod.nit:601 */
       ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:565 */
+    /* parser/parser_prod.nit:603 */
     goto label1;
   }
-  /* parser/parser_prod.nit:567 */
+  /* parser/parser_prod.nit:605 */
   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)) {
@@ -3154,7 +3268,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:568 */
+    /* parser/parser_prod.nit:606 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3169,32 +3283,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:569 */
+      /* parser/parser_prod.nit:607 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 569);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 607);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:570 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:608 */
       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, 570);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 608);
       }
-      /* parser/parser_prod.nit:571 */
+      /* parser/parser_prod.nit:609 */
       ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:573 */
+      /* parser/parser_prod.nit:611 */
       ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:575 */
+    /* parser/parser_prod.nit:613 */
     goto label1;
   }
-  /* parser/parser_prod.nit:577 */
+  /* parser/parser_prod.nit:615 */
   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, 577);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 615);
   }
   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]));
@@ -3204,7 +3318,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:578 */
+    /* parser/parser_prod.nit:616 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3219,32 +3333,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:579 */
+      /* parser/parser_prod.nit:617 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 579);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 617);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:580 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:618 */
       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, 580);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 618);
       }
-      /* parser/parser_prod.nit:581 */
+      /* parser/parser_prod.nit:619 */
       ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:583 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 583);
+      /* parser/parser_prod.nit:621 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 621);
     }
-    /* parser/parser_prod.nit:585 */
+    /* parser/parser_prod.nit:623 */
     goto label1;
   }
-  /* parser/parser_prod.nit:587 */
+  /* parser/parser_prod.nit:625 */
   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, 587);
+    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 625);
   }
   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]));
@@ -3254,7 +3368,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:588 */
+    /* parser/parser_prod.nit:626 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3269,28 +3383,28 @@ 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:589 */
+      /* parser/parser_prod.nit:627 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 589);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 627);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:590 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:628 */
       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, 590);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 628);
       }
-      /* parser/parser_prod.nit:591 */
+      /* parser/parser_prod.nit:629 */
       ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:593 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 593);
+      /* parser/parser_prod.nit:631 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 631);
     }
-    /* parser/parser_prod.nit:595 */
+    /* parser/parser_prod.nit:633 */
     goto label1;
   }
-  /* parser/parser_prod.nit:597 */
+  /* parser/parser_prod.nit:635 */
   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)) {
@@ -3305,7 +3419,206 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:598 */
+    /* parser/parser_prod.nit:636 */
+    REGB0 = TAG_Bool(fra.me.REG[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:637 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 637);
+      }
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:638 */
+      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, 638);
+      }
+      /* parser/parser_prod.nit:639 */
+      ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:641 */
+      ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:643 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:645 */
+  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, 645);
+  }
+  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:404 */
+  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:242 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ../lib/standard/kernel.nit:404 */
+    if (UNTAG_Bool(REGB2)) {
+      /* parser/parser_prod.nit:645 */
+      REGB2 = REGB0;
+      /* parser/parser_prod.nit:646 */
+      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, 646);
+      }
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(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_OO(fra.me.REG[3],fra.me.REG[1]));
+      if (UNTAG_Bool(REGB3)) {
+      } 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:647 */
+        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:648 */
+          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, 648);
+          }
+          /* parser/parser_prod.nit:649 */
+          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, 649);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(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:650 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 650);
+          }
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          /* parser/parser_prod.nit:652 */
+          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, 652);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(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:654 */
+        goto label1;
+      }
+      /* ../lib/standard/kernel.nit:406 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:245 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/kernel.nit:406 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/kernel.nit:404 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  /* parser/parser_prod.nit:657 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(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:658 */
+    REGB0 = TAG_Bool(fra.me.REG[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:659 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 659);
+      }
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:660 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 660);
+      }
+      /* parser/parser_prod.nit:661 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:663 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:665 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:667 */
+  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:668 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3320,276 +3633,65 @@ 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:599 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 599);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:600 */
-      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, 600);
-      }
-      /* parser/parser_prod.nit:601 */
-      ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* parser/parser_prod.nit:603 */
-      ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = NIT_NULL;
-    }
-    /* parser/parser_prod.nit:605 */
-    goto label1;
-  }
-  /* parser/parser_prod.nit:607 */
-  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, 607);
-  }
-  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: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:607 */
-      REGB2 = REGB0;
-      /* parser/parser_prod.nit:608 */
-      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, 608);
-      }
-      fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(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:609 */
-        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:610 */
-          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, 610);
-          }
-          /* parser/parser_prod.nit:611 */
-          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, 611);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(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:612 */
-          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 612);
-          }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          /* parser/parser_prod.nit:614 */
-          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, 614);
-          }
-          fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(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:616 */
-        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:619 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(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:620 */
-    REGB0 = TAG_Bool(fra.me.REG[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:621 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 621);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:622 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 622);
-      }
-      /* parser/parser_prod.nit:623 */
-      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* parser/parser_prod.nit:625 */
-      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
-    }
-    /* parser/parser_prod.nit:627 */
-    goto label1;
-  }
-  /* parser/parser_prod.nit:629 */
-  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:630 */
-    REGB0 = TAG_Bool(fra.me.REG[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:631 */
+      /* parser/parser_prod.nit:669 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 631);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 669);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:632 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:670 */
       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, 632);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 670);
       }
-      /* parser/parser_prod.nit:633 */
+      /* parser/parser_prod.nit:671 */
       ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:635 */
+      /* parser/parser_prod.nit:673 */
       ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:637 */
+    /* parser/parser_prod.nit:675 */
     goto label1;
   }
-  /* parser/parser_prod.nit:639 */
+  /* parser/parser_prod.nit:677 */
   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, 639);
+    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 677);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:639 */
+      /* parser/parser_prod.nit:677 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:640 */
+      /* parser/parser_prod.nit:678 */
       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, 640);
+        nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 678);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:641 */
+        /* parser/parser_prod.nit:679 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -3604,95 +3706,89 @@ 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:642 */
+          /* parser/parser_prod.nit:680 */
           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, 642);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 680);
           }
-          /* parser/parser_prod.nit:643 */
+          /* parser/parser_prod.nit:681 */
           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, 643);
+            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 681);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(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:644 */
+          /* parser/parser_prod.nit:682 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 644);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 682);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:646 */
+          /* parser/parser_prod.nit:684 */
           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, 646);
+            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 684);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(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:648 */
+        /* parser/parser_prod.nit:686 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label3;
     }
   }
   label3: while(0);
-  /* parser/parser_prod.nit:651 */
+  /* parser/parser_prod.nit:689 */
   REGB0 = TAG_Int(0);
   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, 651);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 689);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:651 */
+      /* parser/parser_prod.nit:689 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:652 */
+      /* parser/parser_prod.nit:690 */
       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, 652);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 690);
       }
       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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:653 */
+        /* parser/parser_prod.nit:691 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -3707,56 +3803,56 @@ 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:654 */
+          /* parser/parser_prod.nit:692 */
           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, 654);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 692);
           }
-          /* parser/parser_prod.nit:655 */
+          /* parser/parser_prod.nit:693 */
           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, 693);
           }
           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:656 */
+          /* parser/parser_prod.nit:694 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 656);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 694);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:658 */
+          /* parser/parser_prod.nit:696 */
           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, 696);
           }
           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:660 */
+        /* parser/parser_prod.nit:698 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label4;
     }
   }
   label4: while(0);
-  /* parser/parser_prod.nit:663 */
+  /* parser/parser_prod.nit:701 */
   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, 663);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 701);
   }
   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]));
@@ -3766,7 +3862,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:664 */
+    /* parser/parser_prod.nit:702 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3781,32 +3877,318 @@ 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:665 */
+      /* parser/parser_prod.nit:703 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 665);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 703);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:666 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:704 */
       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, 666);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 704);
       }
-      /* parser/parser_prod.nit:667 */
+      /* parser/parser_prod.nit:705 */
       ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:669 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 669);
+      /* parser/parser_prod.nit:707 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 707);
     }
-    /* parser/parser_prod.nit:671 */
+    /* parser/parser_prod.nit:709 */
     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)";
+static const char LOCATE_parser___parser_prod___AStdClassdef___n_doc__eq[] = "parser_prod::AStdClassdef::(parser_nodes::AStdClassdef::n_doc=)";
+void parser___parser_prod___AStdClassdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 713;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___n_doc__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:715 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:716 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:717 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 717);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwredef__eq[] = "parser_prod::AStdClassdef::(parser_nodes::AStdClassdef::n_kwredef=)";
+void parser___parser_prod___AStdClassdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 720;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___n_kwredef__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:722 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:723 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:724 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 724);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_visibility__eq[] = "parser_prod::AStdClassdef::(parser_nodes::AStdClassdef::n_visibility=)";
+void parser___parser_prod___AStdClassdef___n_visibility__eq(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 = 727;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___n_visibility__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:729 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:730 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_classkind__eq[] = "parser_prod::AStdClassdef::(parser_nodes::AStdClassdef::n_classkind=)";
+void parser___parser_prod___AStdClassdef___n_classkind__eq(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 = 732;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___n_classkind__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:734 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:735 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_id__eq[] = "parser_prod::AStdClassdef::(parser_nodes::AStdClassdef::n_id=)";
+void parser___parser_prod___AStdClassdef___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 737;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___n_id__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:739 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:740 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:741 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 741);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::AStdClassdef::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AStdClassdef___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 744;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___n_annotations__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:746 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:747 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:748 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 748);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_extern_code_block__eq[] = "parser_prod::AStdClassdef::(parser_nodes::AStdClassdef::n_extern_code_block=)";
+void parser___parser_prod___AStdClassdef___n_extern_code_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 751;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___n_extern_code_block__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:753 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:754 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:755 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 755);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwend__eq[] = "parser_prod::AStdClassdef::(parser_nodes::AStdClassdef::n_kwend=)";
+void parser___parser_prod___AStdClassdef___n_kwend__eq(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 = 758;
+  fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___n_kwend__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:760 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:761 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AStdClassdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -3814,7 +4196,7 @@ void parser___parser_prod___AStdClassdef___visit_all(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 = 675;
+  fra.me.line = 765;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -3825,9 +4207,9 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:675 */
+  /* parser/parser_prod.nit:765 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:677 */
+  /* parser/parser_prod.nit:767 */
   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)) {
@@ -3843,16 +4225,16 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:678 */
+    /* parser/parser_prod.nit:768 */
     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, 678);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 768);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:680 */
+  /* parser/parser_prod.nit:770 */
   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)) {
@@ -3868,32 +4250,32 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:681 */
+    /* parser/parser_prod.nit:771 */
     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, 681);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 771);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:683 */
+  /* parser/parser_prod.nit:773 */
   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, 683);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 773);
   }
   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:684 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:774 */
   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, 684);
+    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 774);
   }
   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:685 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:775 */
   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)) {
@@ -3909,24 +4291,24 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:686 */
+    /* parser/parser_prod.nit:776 */
     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, 686);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 776);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:688 */
+  /* parser/parser_prod.nit:778 */
   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, 688);
+    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 778);
   }
   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:691 */
+  /* parser/parser_prod.nit:781 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -3942,16 +4324,16 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:692 */
+    /* parser/parser_prod.nit:782 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 692);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 782);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:694 */
+  /* parser/parser_prod.nit:784 */
   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)) {
@@ -3967,39 +4349,39 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:695 */
+    /* parser/parser_prod.nit:785 */
     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, 695);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 785);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:697 */
+  /* parser/parser_prod.nit:787 */
   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, 697);
+    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 787);
   }
   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:700 */
+  /* parser/parser_prod.nit:790 */
   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, 700);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 790);
   }
   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:703 */
+  /* parser/parser_prod.nit:793 */
   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, 703);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 793);
   }
   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]);
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -4019,8 +4401,8 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:689 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:779 */
+    CALL_parser___parser_nodes___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -4040,8 +4422,8 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:698 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:788 */
+    CALL_parser___parser_nodes___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -4061,20 +4443,20 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:701 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:791 */
+    CALL_parser___parser_nodes___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;
+  int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATopClassdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos19]) return;
+  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 = 707;
+  fra.me.line = 797;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4082,18 +4464,18 @@ void parser___parser_prod___ATopClassdef___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos19] = 1;
+  init_table[itpos18] = 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;
+  int itpos19 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATopClassdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos20]) return;
+  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 = 709;
+  fra.me.line = 799;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___init_atopclassdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4102,11 +4484,11 @@ void parser___parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1,
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:713 */
+  /* parser/parser_prod.nit:803 */
   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;
-  init_table[itpos20] = 1;
+  init_table[itpos19] = 1;
   return;
 }
   void OC_parser___parser_prod___ATopClassdef___init_atopclassdef_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -4114,7 +4496,7 @@ 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:714 */
+    /* parser/parser_prod.nit:804 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -4128,26 +4510,26 @@ void parser___parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:715 */
+    /* parser/parser_prod.nit:805 */
     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, 715);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 805);
     }
-    /* parser/parser_prod.nit:716 */
+    /* parser/parser_prod.nit:806 */
     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, 716);
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 806);
     }
     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:717 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:807 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___ATopClassdef___replace_child[] = "parser_prod::ATopClassdef::(parser_nodes::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;
@@ -4158,7 +4540,7 @@ 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 = 721;
+  fra.me.line = 811;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4170,50 +4552,44 @@ 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:723 */
+  /* parser/parser_prod.nit:813 */
   REGB0 = TAG_Int(0);
   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, 723);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 813);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:723 */
+      /* parser/parser_prod.nit:813 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:724 */
+      /* parser/parser_prod.nit:814 */
       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, 724);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 814);
       }
       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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:725 */
+        /* parser/parser_prod.nit:815 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -4228,47 +4604,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:726 */
+          /* parser/parser_prod.nit:816 */
           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, 726);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 816);
           }
-          /* parser/parser_prod.nit:727 */
+          /* parser/parser_prod.nit:817 */
           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, 727);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 817);
           }
           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:728 */
+          /* parser/parser_prod.nit:818 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 728);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 818);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:730 */
+          /* parser/parser_prod.nit:820 */
           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, 730);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 820);
           }
           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:732 */
+        /* parser/parser_prod.nit:822 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
@@ -4277,14 +4653,14 @@ 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)";
+static const char LOCATE_parser___parser_prod___ATopClassdef___visit_all[] = "parser_prod::ATopClassdef::(parser_nodes::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 = 737;
+  fra.me.line = 829;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4293,11 +4669,11 @@ void parser___parser_prod___ATopClassdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:739 */
+  /* parser/parser_prod.nit:831 */
   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, 739);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 831);
   }
   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));
@@ -4320,20 +4696,20 @@ void parser___parser_prod___ATopClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:740 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:832 */
+    CALL_parser___parser_nodes___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;
+  int itpos20 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMainClassdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos21]) return;
+  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 = 745;
+  fra.me.line = 837;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4341,18 +4717,18 @@ void parser___parser_prod___AMainClassdef___empty_init(val_t p0, int* init_table
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos21] = 1;
+  init_table[itpos20] = 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;
+  int itpos21 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMainClassdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos22]) return;
+  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 = 747;
+  fra.me.line = 839;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___init_amainclassdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4361,11 +4737,11 @@ void parser___parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:751 */
+  /* parser/parser_prod.nit:843 */
   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;
-  init_table[itpos22] = 1;
+  init_table[itpos21] = 1;
   return;
 }
   void OC_parser___parser_prod___AMainClassdef___init_amainclassdef_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -4373,7 +4749,7 @@ 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:752 */
+    /* parser/parser_prod.nit:844 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -4387,26 +4763,26 @@ void parser___parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:753 */
+    /* parser/parser_prod.nit:845 */
     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, 753);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 845);
     }
-    /* parser/parser_prod.nit:754 */
+    /* parser/parser_prod.nit:846 */
     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, 754);
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 846);
     }
     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:755 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:847 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AMainClassdef___replace_child[] = "parser_prod::AMainClassdef::(parser_nodes::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;
@@ -4417,7 +4793,7 @@ 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 = 759;
+  fra.me.line = 851;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4429,50 +4805,44 @@ 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:761 */
+  /* parser/parser_prod.nit:853 */
   REGB0 = TAG_Int(0);
   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, 761);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 853);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:761 */
+      /* parser/parser_prod.nit:853 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:762 */
+      /* parser/parser_prod.nit:854 */
       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, 762);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 854);
       }
       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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:763 */
+        /* parser/parser_prod.nit:855 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -4487,47 +4857,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:764 */
+          /* parser/parser_prod.nit:856 */
           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, 764);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 856);
           }
-          /* parser/parser_prod.nit:765 */
+          /* parser/parser_prod.nit:857 */
           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, 765);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 857);
           }
           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:766 */
+          /* parser/parser_prod.nit:858 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 766);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 858);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:768 */
+          /* parser/parser_prod.nit:860 */
           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, 768);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 860);
           }
           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:770 */
+        /* parser/parser_prod.nit:862 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
@@ -4536,14 +4906,14 @@ 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)";
+static const char LOCATE_parser___parser_prod___AMainClassdef___visit_all[] = "parser_prod::AMainClassdef::(parser_nodes::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 = 775;
+  fra.me.line = 869;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4552,11 +4922,11 @@ void parser___parser_prod___AMainClassdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:777 */
+  /* parser/parser_prod.nit:871 */
   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, 777);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 871);
   }
   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));
@@ -4579,20 +4949,20 @@ void parser___parser_prod___AMainClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:778 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:872 */
+    CALL_parser___parser_nodes___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;
+  int itpos22 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos23]) return;
+  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 = 783;
+  fra.me.line = 877;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4600,19 +4970,19 @@ void parser___parser_prod___AConcreteClasskind___empty_init(val_t p0, int* init_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos23] = 1;
+  init_table[itpos22] = 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;
+  int itpos23 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteClasskind].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos24]) return;
+  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 = 785;
+  fra.me.line = 879;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4622,28 +4992,28 @@ void parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:785 */
+  /* parser/parser_prod.nit:879 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:789 */
+  /* parser/parser_prod.nit:883 */
   CALL_parser___parser_prod___AConcreteClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:790 */
+  /* parser/parser_prod.nit:884 */
   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, 884);
   }
   ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:791 */
+  /* parser/parser_prod.nit:885 */
   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, 885);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos23] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AConcreteClasskind___replace_child[] = "parser_prod::AConcreteClasskind::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AConcreteClasskind___replace_child[] = "parser_prod::AConcreteClasskind::(parser_nodes::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;
@@ -4651,7 +5021,7 @@ 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 = 794;
+  fra.me.line = 888;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4663,11 +5033,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:796 */
+  /* parser/parser_prod.nit:890 */
   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, 796);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 890);
   }
   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]));
@@ -4677,7 +5047,7 @@ void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:797 */
+    /* parser/parser_prod.nit:891 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -4692,39 +5062,61 @@ 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:798 */
+      /* parser/parser_prod.nit:892 */
       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, 892);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:799 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:893 */
       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, 799);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 893);
       }
-      /* parser/parser_prod.nit:800 */
+      /* parser/parser_prod.nit:894 */
       ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(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:896 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 896);
     }
-    /* parser/parser_prod.nit:804 */
+    /* parser/parser_prod.nit:898 */
     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)";
+static const char LOCATE_parser___parser_prod___AConcreteClasskind___n_kwclass__eq[] = "parser_prod::AConcreteClasskind::(parser_nodes::AConcreteClasskind::n_kwclass=)";
+void parser___parser_prod___AConcreteClasskind___n_kwclass__eq(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 = 902;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___n_kwclass__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:904 */
+  ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:905 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteClasskind___visit_all[] = "parser_prod::AConcreteClasskind::(parser_nodes::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 = 808;
+  fra.me.line = 909;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4733,26 +5125,26 @@ void parser___parser_prod___AConcreteClasskind___visit_all(val_t p0, val_t p1){
   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:911 */
   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, 810);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 911);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos24 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAbstractClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos25]) return;
+  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 = 814;
+  fra.me.line = 915;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4760,19 +5152,19 @@ void parser___parser_prod___AAbstractClasskind___empty_init(val_t p0, int* init_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos25] = 1;
+  init_table[itpos24] = 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;
+  int itpos25 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAbstractClasskind].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos26]) return;
+  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 = 816;
+  fra.me.line = 917;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___init_aabstractclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4784,41 +5176,41 @@ void parser___parser_prod___AAbstractClasskind___init_aabstractclasskind(val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:816 */
+  /* parser/parser_prod.nit:917 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:821 */
+  /* parser/parser_prod.nit:922 */
   CALL_parser___parser_prod___AAbstractClasskind___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:822 */
+  /* parser/parser_prod.nit:923 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 822);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 923);
   }
   ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:823 */
+  /* parser/parser_prod.nit:924 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 823);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 924);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:824 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:925 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 824);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 925);
   }
   ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:825 */
+  /* parser/parser_prod.nit:926 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 825);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 926);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos25] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAbstractClasskind___replace_child[] = "parser_prod::AAbstractClasskind::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAbstractClasskind___replace_child[] = "parser_prod::AAbstractClasskind::(parser_nodes::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;
@@ -4826,7 +5218,7 @@ 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 = 828;
+  fra.me.line = 929;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4838,11 +5230,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:830 */
+  /* parser/parser_prod.nit:931 */
   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, 830);
+    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 931);
   }
   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]));
@@ -4852,7 +5244,7 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:831 */
+    /* parser/parser_prod.nit:932 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -4867,32 +5259,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:832 */
+      /* parser/parser_prod.nit:933 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 832);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 933);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:833 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:934 */
       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, 833);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 934);
       }
-      /* parser/parser_prod.nit:834 */
+      /* parser/parser_prod.nit:935 */
       ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:836 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 836);
+      /* parser/parser_prod.nit:937 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 937);
     }
-    /* parser/parser_prod.nit:838 */
+    /* parser/parser_prod.nit:939 */
     goto label1;
   }
-  /* parser/parser_prod.nit:840 */
+  /* parser/parser_prod.nit:941 */
   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, 840);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 941);
   }
   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]));
@@ -4902,7 +5294,7 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:841 */
+    /* parser/parser_prod.nit:942 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -4917,39 +5309,83 @@ 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:842 */
+      /* parser/parser_prod.nit:943 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 842);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 943);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:843 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:944 */
       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, 843);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 944);
       }
-      /* parser/parser_prod.nit:844 */
+      /* parser/parser_prod.nit:945 */
       ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:846 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 846);
+      /* parser/parser_prod.nit:947 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 947);
     }
-    /* parser/parser_prod.nit:848 */
+    /* parser/parser_prod.nit:949 */
     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)";
+static const char LOCATE_parser___parser_prod___AAbstractClasskind___n_kwabstract__eq[] = "parser_prod::AAbstractClasskind::(parser_nodes::AAbstractClasskind::n_kwabstract=)";
+void parser___parser_prod___AAbstractClasskind___n_kwabstract__eq(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 = 953;
+  fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___n_kwabstract__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:955 */
+  ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:956 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwclass__eq[] = "parser_prod::AAbstractClasskind::(parser_nodes::AAbstractClasskind::n_kwclass=)";
+void parser___parser_prod___AAbstractClasskind___n_kwclass__eq(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 = 958;
+  fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___n_kwclass__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:960 */
+  ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:961 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AAbstractClasskind::(parser_nodes::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 = 852;
+  fra.me.line = 965;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4959,34 +5395,34 @@ void parser___parser_prod___AAbstractClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:854 */
+  /* parser/parser_prod.nit:967 */
   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, 854);
+    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 967);
   }
   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:855 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:968 */
   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, 855);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 968);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos26 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInterfaceClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos27]) return;
+  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 = 859;
+  fra.me.line = 972;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4994,19 +5430,19 @@ void parser___parser_prod___AInterfaceClasskind___empty_init(val_t p0, int* init
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos27] = 1;
+  init_table[itpos26] = 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;
+  int itpos27 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInterfaceClasskind].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos28]) return;
+  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 = 861;
+  fra.me.line = 974;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -5016,28 +5452,28 @@ void parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:861 */
+  /* parser/parser_prod.nit:974 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:865 */
+  /* parser/parser_prod.nit:978 */
   CALL_parser___parser_prod___AInterfaceClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:866 */
+  /* parser/parser_prod.nit:979 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 866);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 979);
   }
   ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:867 */
+  /* parser/parser_prod.nit:980 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 867);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 980);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos27] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AInterfaceClasskind___replace_child[] = "parser_prod::AInterfaceClasskind::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AInterfaceClasskind___replace_child[] = "parser_prod::AInterfaceClasskind::(parser_nodes::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;
@@ -5045,7 +5481,7 @@ 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 = 870;
+  fra.me.line = 983;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5057,11 +5493,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:872 */
+  /* parser/parser_prod.nit:985 */
   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, 872);
+    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 985);
   }
   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]));
@@ -5071,7 +5507,7 @@ void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:873 */
+    /* parser/parser_prod.nit:986 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5086,39 +5522,61 @@ 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:874 */
+      /* parser/parser_prod.nit:987 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 874);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 987);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:875 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:988 */
       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, 875);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 988);
       }
-      /* parser/parser_prod.nit:876 */
+      /* parser/parser_prod.nit:989 */
       ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:878 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 878);
+      /* parser/parser_prod.nit:991 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 991);
     }
-    /* parser/parser_prod.nit:880 */
+    /* parser/parser_prod.nit:993 */
     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)";
+static const char LOCATE_parser___parser_prod___AInterfaceClasskind___n_kwinterface__eq[] = "parser_prod::AInterfaceClasskind::(parser_nodes::AInterfaceClasskind::n_kwinterface=)";
+void parser___parser_prod___AInterfaceClasskind___n_kwinterface__eq(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 = 997;
+  fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___n_kwinterface__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:999 */
+  ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1000 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AInterfaceClasskind::(parser_nodes::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 = 884;
+  fra.me.line = 1004;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5127,26 +5585,26 @@ void parser___parser_prod___AInterfaceClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:886 */
+  /* parser/parser_prod.nit:1006 */
   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, 886);
+    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 1006);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos28 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEnumClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos29]) return;
+  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 = 890;
+  fra.me.line = 1010;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -5154,19 +5612,19 @@ void parser___parser_prod___AEnumClasskind___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos29] = 1;
+  init_table[itpos28] = 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;
+  int itpos29 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEnumClasskind].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos30]) return;
+  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 = 892;
+  fra.me.line = 1012;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___init_aenumclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -5176,28 +5634,28 @@ void parser___parser_prod___AEnumClasskind___init_aenumclasskind(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:892 */
+  /* parser/parser_prod.nit:1012 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:896 */
+  /* parser/parser_prod.nit:1016 */
   CALL_parser___parser_prod___AEnumClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:897 */
+  /* parser/parser_prod.nit:1017 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 897);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1017);
   }
   ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:898 */
+  /* parser/parser_prod.nit:1018 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 898);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1018);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos29] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AEnumClasskind___replace_child[] = "parser_prod::AEnumClasskind::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AEnumClasskind___replace_child[] = "parser_prod::AEnumClasskind::(parser_nodes::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;
@@ -5205,7 +5663,7 @@ 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 = 901;
+  fra.me.line = 1021;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5217,11 +5675,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:903 */
+  /* parser/parser_prod.nit:1023 */
   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, 903);
+    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 1023);
   }
   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]));
@@ -5231,7 +5689,7 @@ void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:904 */
+    /* parser/parser_prod.nit:1024 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5246,39 +5704,61 @@ 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:905 */
+      /* parser/parser_prod.nit:1025 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 1025);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:906 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1026 */
       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, 906);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1026);
       }
-      /* parser/parser_prod.nit:907 */
+      /* parser/parser_prod.nit:1027 */
       ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:909 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 909);
+      /* parser/parser_prod.nit:1029 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1029);
     }
-    /* parser/parser_prod.nit:911 */
+    /* parser/parser_prod.nit:1031 */
     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)";
+static const char LOCATE_parser___parser_prod___AEnumClasskind___n_kwenum__eq[] = "parser_prod::AEnumClasskind::(parser_nodes::AEnumClasskind::n_kwenum=)";
+void parser___parser_prod___AEnumClasskind___n_kwenum__eq(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 = 1035;
+  fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___n_kwenum__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:1037 */
+  ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1038 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AEnumClasskind::(parser_nodes::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 = 915;
+  fra.me.line = 1042;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5287,26 +5767,26 @@ void parser___parser_prod___AEnumClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:917 */
+  /* parser/parser_prod.nit:1044 */
   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, 917);
+    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 1044);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos30 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos31]) return;
+  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 = 921;
+  fra.me.line = 1048;
   fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -5314,20 +5794,20 @@ void parser___parser_prod___AExternClasskind___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos31] = 1;
+  init_table[itpos30] = 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, val_t p2, int* init_table){
-  int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternClasskind].i;
+  int itpos31 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternClasskind].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[itpos32]) return;
+  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 = 923;
+  fra.me.line = 1050;
   fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___init_aexternclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5339,26 +5819,26 @@ void parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:923 */
+  /* parser/parser_prod.nit:1050 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:928 */
+  /* parser/parser_prod.nit:1055 */
   CALL_parser___parser_prod___AExternClasskind___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:929 */
+  /* parser/parser_prod.nit:1056 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 929);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1056);
   }
   ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:930 */
+  /* parser/parser_prod.nit:1057 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 930);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1057);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:931 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1058 */
   ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:932 */
+  /* parser/parser_prod.nit:1059 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5373,18 +5853,18 @@ void parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:933 */
+    /* parser/parser_prod.nit:1060 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 933);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1060);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos32] = 1;
+  init_table[itpos31] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AExternClasskind___replace_child[] = "parser_prod::AExternClasskind::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AExternClasskind___replace_child[] = "parser_prod::AExternClasskind::(parser_nodes::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;
@@ -5392,7 +5872,7 @@ 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 = 937;
+  fra.me.line = 1064;
   fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5404,11 +5884,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:939 */
+  /* parser/parser_prod.nit:1066 */
   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, 939);
+    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 1066);
   }
   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]));
@@ -5418,7 +5898,7 @@ void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:940 */
+    /* parser/parser_prod.nit:1067 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5433,28 +5913,28 @@ 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:941 */
+      /* parser/parser_prod.nit:1068 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 941);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1068);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:942 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1069 */
       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, 942);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1069);
       }
-      /* parser/parser_prod.nit:943 */
+      /* parser/parser_prod.nit:1070 */
       ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:945 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 945);
+      /* parser/parser_prod.nit:1072 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1072);
     }
-    /* parser/parser_prod.nit:947 */
+    /* parser/parser_prod.nit:1074 */
     goto label1;
   }
-  /* parser/parser_prod.nit:949 */
+  /* parser/parser_prod.nit:1076 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -5469,7 +5949,7 @@ void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:950 */
+    /* parser/parser_prod.nit:1077 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5484,32 +5964,98 @@ 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:951 */
+      /* parser/parser_prod.nit:1078 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 951);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1078);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:952 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1079 */
       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, 952);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1079);
       }
-      /* parser/parser_prod.nit:953 */
+      /* parser/parser_prod.nit:1080 */
       ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:955 */
+      /* parser/parser_prod.nit:1082 */
       ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:957 */
+    /* parser/parser_prod.nit:1084 */
     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)";
+static const char LOCATE_parser___parser_prod___AExternClasskind___n_kwextern__eq[] = "parser_prod::AExternClasskind::(parser_nodes::AExternClasskind::n_kwextern=)";
+void parser___parser_prod___AExternClasskind___n_kwextern__eq(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 = 1088;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___n_kwextern__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:1090 */
+  ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1091 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwclass__eq[] = "parser_prod::AExternClasskind::(parser_nodes::AExternClasskind::n_kwclass=)";
+void parser___parser_prod___AExternClasskind___n_kwclass__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1093;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___n_kwclass__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:1095 */
+  ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1096 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1097 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1097);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AExternClasskind::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -5517,7 +6063,7 @@ void parser___parser_prod___AExternClasskind___visit_all(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 = 961;
+  fra.me.line = 1102;
   fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5528,17 +6074,17 @@ void parser___parser_prod___AExternClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:961 */
+  /* parser/parser_prod.nit:1102 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:963 */
+  /* parser/parser_prod.nit:1104 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 963);
+    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 1104);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(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:964 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1105 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -5554,27 +6100,27 @@ void parser___parser_prod___AExternClasskind___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:965 */
+    /* parser/parser_prod.nit:1106 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[2]);
     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("Cast failed", NULL, LOCATE_parser___parser_prod, 965);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1106);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFormaldef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos33]) return;
+  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 = 970;
+  fra.me.line = 1111;
   fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -5582,20 +6128,20 @@ void parser___parser_prod___AFormaldef___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos33] = 1;
+  init_table[itpos32] = 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, val_t p3, int* init_table){
-  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFormaldef].i;
+  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFormaldef].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[itpos34]) return;
+  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 = 972;
+  fra.me.line = 1113;
   fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___init_aformaldef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -5609,26 +6155,26 @@ void parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:972 */
+  /* parser/parser_prod.nit:1113 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:978 */
+  /* parser/parser_prod.nit:1119 */
   CALL_parser___parser_prod___AFormaldef___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:979 */
+  /* parser/parser_prod.nit:1120 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 979);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1120);
   }
   ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:980 */
+  /* parser/parser_prod.nit:1121 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 980);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1121);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:981 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:1122 */
   ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:982 */
+  /* parser/parser_prod.nit:1123 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5643,16 +6189,16 @@ 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:983 */
+    /* parser/parser_prod.nit:1124 */
     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, 1124);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:985 */
+  /* parser/parser_prod.nit:1126 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:986 */
+  /* parser/parser_prod.nit:1127 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5667,18 +6213,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:987 */
+    /* parser/parser_prod.nit:1128 */
     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, 1128);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos34] = 1;
+  init_table[itpos33] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AFormaldef___replace_child[] = "parser_prod::AFormaldef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AFormaldef___replace_child[] = "parser_prod::AFormaldef::(parser_nodes::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;
@@ -5686,7 +6232,7 @@ 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 = 991;
+  fra.me.line = 1132;
   fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5698,11 +6244,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:993 */
+  /* parser/parser_prod.nit:1134 */
   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, 993);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 1134);
   }
   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]));
@@ -5712,7 +6258,7 @@ 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:994 */
+    /* parser/parser_prod.nit:1135 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5727,28 +6273,28 @@ 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:995 */
+      /* parser/parser_prod.nit:1136 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 995);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1136);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:996 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1137 */
       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, 996);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1137);
       }
-      /* parser/parser_prod.nit:997 */
+      /* parser/parser_prod.nit:1138 */
       ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:999 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 999);
+      /* parser/parser_prod.nit:1140 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1140);
     }
-    /* parser/parser_prod.nit:1001 */
+    /* parser/parser_prod.nit:1142 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1003 */
+  /* parser/parser_prod.nit:1144 */
   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)) {
@@ -5763,7 +6309,7 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1004 */
+    /* parser/parser_prod.nit:1145 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5778,28 +6324,28 @@ 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:1005 */
+      /* parser/parser_prod.nit:1146 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1005);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1146);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1006 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1147 */
       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, 1006);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1147);
       }
-      /* parser/parser_prod.nit:1007 */
+      /* parser/parser_prod.nit:1148 */
       ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1009 */
+      /* parser/parser_prod.nit:1150 */
       ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1011 */
+    /* parser/parser_prod.nit:1152 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1013 */
+  /* parser/parser_prod.nit:1154 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -5814,7 +6360,7 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1014 */
+    /* parser/parser_prod.nit:1155 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5829,32 +6375,142 @@ 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:1015 */
+      /* parser/parser_prod.nit:1156 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1015);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1156);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1016 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1157 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1016);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1157);
       }
-      /* parser/parser_prod.nit:1017 */
+      /* parser/parser_prod.nit:1158 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1019 */
+      /* parser/parser_prod.nit:1160 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1021 */
+    /* parser/parser_prod.nit:1162 */
     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)";
+static const char LOCATE_parser___parser_prod___AFormaldef___n_id__eq[] = "parser_prod::AFormaldef::(parser_nodes::AFormaldef::n_id=)";
+void parser___parser_prod___AFormaldef___n_id__eq(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 = 1166;
+  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___n_id__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:1168 */
+  ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1169 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_type__eq[] = "parser_prod::AFormaldef::(parser_nodes::AFormaldef::n_type=)";
+void parser___parser_prod___AFormaldef___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1171;
+  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___n_type__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:1173 */
+  ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1174 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1175 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1175);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::AFormaldef::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AFormaldef___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1178;
+  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___n_annotations__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:1180 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1181 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1182 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1182);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AFormaldef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -5862,7 +6518,7 @@ void parser___parser_prod___AFormaldef___visit_all(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 = 1025;
+  fra.me.line = 1187;
   fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5873,17 +6529,17 @@ void parser___parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1025 */
+  /* parser/parser_prod.nit:1187 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1027 */
+  /* parser/parser_prod.nit:1189 */
   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, 1027);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 1189);
   }
   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:1028 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1190 */
   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)) {
@@ -5899,16 +6555,16 @@ void parser___parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1029 */
+    /* parser/parser_prod.nit:1191 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____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, 1029);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1191);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1031 */
+  /* parser/parser_prod.nit:1193 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -5924,27 +6580,27 @@ void parser___parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1032 */
+    /* parser/parser_prod.nit:1194 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1032);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1194);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperclass].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos35]) return;
+  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 = 1037;
+  fra.me.line = 1199;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -5952,20 +6608,20 @@ void parser___parser_prod___ASuperclass___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos35] = 1;
+  init_table[itpos34] = 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;
+  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperclass].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[itpos36]) return;
+  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 = 1039;
+  fra.me.line = 1201;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___init_asuperclass;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -5979,39 +6635,39 @@ void parser___parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:1039 */
+  /* parser/parser_prod.nit:1201 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1045 */
+  /* parser/parser_prod.nit:1207 */
   CALL_parser___parser_prod___ASuperclass___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:1046 */
+  /* parser/parser_prod.nit:1208 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1046);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1208);
   }
   ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1047 */
+  /* parser/parser_prod.nit:1209 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1047);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1209);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:1048 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:1210 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1048);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1210);
   }
   ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1049 */
+  /* parser/parser_prod.nit:1211 */
   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, 1211);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:1050 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:1212 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1051 */
+  /* parser/parser_prod.nit:1213 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6026,18 +6682,18 @@ 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:1052 */
+    /* parser/parser_prod.nit:1214 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1052);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1214);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos35] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASuperclass___replace_child[] = "parser_prod::ASuperclass::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ASuperclass___replace_child[] = "parser_prod::ASuperclass::(parser_nodes::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;
@@ -6045,7 +6701,7 @@ 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 = 1056;
+  fra.me.line = 1218;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -6057,11 +6713,11 @@ 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:1058 */
+  /* parser/parser_prod.nit:1220 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 1058);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 1220);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -6071,7 +6727,7 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1059 */
+    /* parser/parser_prod.nit:1221 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6086,32 +6742,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:1060 */
+      /* parser/parser_prod.nit:1222 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1060);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1222);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1061 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1223 */
       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, 1061);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1223);
       }
-      /* parser/parser_prod.nit:1062 */
+      /* parser/parser_prod.nit:1224 */
       ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1064 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1064);
+      /* parser/parser_prod.nit:1226 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1226);
     }
-    /* parser/parser_prod.nit:1066 */
+    /* parser/parser_prod.nit:1228 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1068 */
+  /* parser/parser_prod.nit:1230 */
   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, 1068);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 1230);
   }
   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]));
@@ -6121,7 +6777,7 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1069 */
+    /* parser/parser_prod.nit:1231 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6136,28 +6792,28 @@ 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:1070 */
+      /* parser/parser_prod.nit:1232 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1070);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1232);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1071 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1233 */
       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, 1071);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1233);
       }
-      /* parser/parser_prod.nit:1072 */
+      /* parser/parser_prod.nit:1234 */
       ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1074 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1074);
+      /* parser/parser_prod.nit:1236 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1236);
     }
-    /* parser/parser_prod.nit:1076 */
+    /* parser/parser_prod.nit:1238 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1078 */
+  /* parser/parser_prod.nit:1240 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -6172,7 +6828,7 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1079 */
+    /* parser/parser_prod.nit:1241 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6187,32 +6843,120 @@ 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:1080 */
+      /* parser/parser_prod.nit:1242 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1080);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1242);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1081 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1243 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1081);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1243);
       }
-      /* parser/parser_prod.nit:1082 */
+      /* parser/parser_prod.nit:1244 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1084 */
+      /* parser/parser_prod.nit:1246 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1086 */
+    /* parser/parser_prod.nit:1248 */
     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)";
+static const char LOCATE_parser___parser_prod___ASuperclass___n_kwsuper__eq[] = "parser_prod::ASuperclass::(parser_nodes::ASuperclass::n_kwsuper=)";
+void parser___parser_prod___ASuperclass___n_kwsuper__eq(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 = 1252;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___n_kwsuper__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:1254 */
+  ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1255 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ASuperclass___n_type__eq[] = "parser_prod::ASuperclass::(parser_nodes::ASuperclass::n_type=)";
+void parser___parser_prod___ASuperclass___n_type__eq(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 = 1257;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___n_type__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:1259 */
+  ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1260 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ASuperclass___n_annotations__eq[] = "parser_prod::ASuperclass::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ASuperclass___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1262;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___n_annotations__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:1264 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1265 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1266 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1266);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ASuperclass___visit_all[] = "parser_prod::ASuperclass::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -6220,7 +6964,7 @@ void parser___parser_prod___ASuperclass___visit_all(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 = 1090;
+  fra.me.line = 1271;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -6231,25 +6975,25 @@ void parser___parser_prod___ASuperclass___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1090 */
+  /* parser/parser_prod.nit:1271 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1092 */
+  /* parser/parser_prod.nit:1273 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 1092);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 1273);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____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:1093 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1274 */
   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, 1093);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 1274);
   }
   fra.me.REG[3] = 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[3]);
-  /* parser/parser_prod.nit:1094 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1275 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -6265,27 +7009,27 @@ void parser___parser_prod___ASuperclass___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1095 */
+    /* parser/parser_prod.nit:1276 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1095);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1276);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos37]) return;
+  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 = 1100;
+  fra.me.line = 1281;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -6293,20 +7037,20 @@ void parser___parser_prod___AAttrPropdef___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos37] = 1;
+  init_table[itpos36] = 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, val_t p11, int* init_table){
-  int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrPropdef].i;
+  int itpos37 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrPropdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos38]) return;
+  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 = 1102;
+  fra.me.line = 1283;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___init_aattrpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -6336,13 +7080,13 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   fra.me.REG[9] = p9;
   fra.me.REG[10] = p10;
   fra.me.REG[11] = p11;
-  /* parser/parser_prod.nit:1102 */
+  /* parser/parser_prod.nit:1283 */
   fra.me.REG[12] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1116 */
+  /* parser/parser_prod.nit:1297 */
   CALL_parser___parser_prod___AAttrPropdef___empty_init(fra.me.REG[12])(fra.me.REG[12], init_table);
-  /* parser/parser_prod.nit:1117 */
+  /* parser/parser_prod.nit:1298 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[12]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1118 */
+  /* parser/parser_prod.nit:1299 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6357,16 +7101,16 @@ 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:1119 */
+    /* parser/parser_prod.nit:1300 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1119);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1300);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1121 */
+  /* parser/parser_prod.nit:1302 */
   ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[12]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1122 */
+  /* parser/parser_prod.nit:1303 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6381,16 +7125,16 @@ 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:1123 */
+    /* parser/parser_prod.nit:1304 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1123);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1304);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1125 */
+  /* parser/parser_prod.nit:1306 */
   ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[12]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1126 */
+  /* parser/parser_prod.nit:1307 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6405,16 +7149,16 @@ 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:1127 */
+    /* parser/parser_prod.nit:1308 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1127);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1308);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1129 */
+  /* parser/parser_prod.nit:1310 */
   ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[12]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1130 */
+  /* parser/parser_prod.nit:1311 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6429,42 +7173,42 @@ 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:1131 */
+    /* parser/parser_prod.nit:1312 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1131);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1312);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1133 */
+  /* parser/parser_prod.nit:1314 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1133);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1314);
   }
   ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[12]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1134 */
+  /* parser/parser_prod.nit:1315 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1134);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1315);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[12]);
-  /* parser/parser_prod.nit:1135 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[12]);
+  /* parser/parser_prod.nit:1316 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1135);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1316);
   }
   ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[12]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1136 */
+  /* parser/parser_prod.nit:1317 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1136);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1317);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[12]);
-  /* parser/parser_prod.nit:1137 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[12]);
+  /* parser/parser_prod.nit:1318 */
   ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[12]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1138 */
+  /* parser/parser_prod.nit:1319 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6479,16 +7223,16 @@ 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:1139 */
+    /* parser/parser_prod.nit:1320 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1139);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1320);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1141 */
+  /* parser/parser_prod.nit:1322 */
   ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[12]) = fra.me.REG[8];
-  /* parser/parser_prod.nit:1142 */
+  /* parser/parser_prod.nit:1323 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6503,16 +7247,16 @@ 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:1143 */
+    /* parser/parser_prod.nit:1324 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1143);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1324);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1145 */
+  /* parser/parser_prod.nit:1326 */
   ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[12]) = fra.me.REG[9];
-  /* parser/parser_prod.nit:1146 */
+  /* parser/parser_prod.nit:1327 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6527,16 +7271,16 @@ 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:1147 */
+    /* parser/parser_prod.nit:1328 */
     REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1147);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1328);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1149 */
+  /* parser/parser_prod.nit:1330 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[12]) = fra.me.REG[10];
-  /* parser/parser_prod.nit:1150 */
+  /* parser/parser_prod.nit:1331 */
   REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6551,16 +7295,16 @@ 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:1151 */
+    /* parser/parser_prod.nit:1332 */
     REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1151);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1332);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1153 */
+  /* parser/parser_prod.nit:1334 */
   ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[12]) = fra.me.REG[11];
-  /* parser/parser_prod.nit:1154 */
+  /* parser/parser_prod.nit:1335 */
   REGB0 = TAG_Bool(fra.me.REG[11]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6575,18 +7319,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:1155 */
+    /* parser/parser_prod.nit:1336 */
     REGB0 = TAG_Bool(fra.me.REG[11]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1155);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1336);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[12]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[12]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos38] = 1;
+  init_table[itpos37] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAttrPropdef___replace_child[] = "parser_prod::AAttrPropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAttrPropdef___replace_child[] = "parser_prod::AAttrPropdef::(parser_nodes::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;
@@ -6594,7 +7338,7 @@ 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 = 1159;
+  fra.me.line = 1340;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -6606,7 +7350,7 @@ 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:1161 */
+  /* parser/parser_prod.nit:1342 */
   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)) {
@@ -6621,7 +7365,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1162 */
+    /* parser/parser_prod.nit:1343 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6636,28 +7380,28 @@ 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:1163 */
+      /* parser/parser_prod.nit:1344 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 1344);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1164 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1345 */
       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, 1164);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1345);
       }
-      /* parser/parser_prod.nit:1165 */
+      /* parser/parser_prod.nit:1346 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1167 */
+      /* parser/parser_prod.nit:1348 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1169 */
+    /* parser/parser_prod.nit:1350 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1171 */
+  /* parser/parser_prod.nit:1352 */
   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)) {
@@ -6672,7 +7416,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1172 */
+    /* parser/parser_prod.nit:1353 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6687,28 +7431,28 @@ 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:1173 */
+      /* parser/parser_prod.nit:1354 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1173);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1354);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1174 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1355 */
       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, 1174);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1355);
       }
-      /* parser/parser_prod.nit:1175 */
+      /* parser/parser_prod.nit:1356 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1177 */
+      /* parser/parser_prod.nit:1358 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1179 */
+    /* parser/parser_prod.nit:1360 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1181 */
+  /* parser/parser_prod.nit:1362 */
   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)) {
@@ -6723,7 +7467,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1182 */
+    /* parser/parser_prod.nit:1363 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6738,28 +7482,28 @@ 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:1183 */
+      /* parser/parser_prod.nit:1364 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1183);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1364);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1184 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1365 */
       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, 1184);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1365);
       }
-      /* parser/parser_prod.nit:1185 */
+      /* parser/parser_prod.nit:1366 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1187 */
+      /* parser/parser_prod.nit:1368 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1189 */
+    /* parser/parser_prod.nit:1370 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1191 */
+  /* parser/parser_prod.nit:1372 */
   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)) {
@@ -6774,7 +7518,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1192 */
+    /* parser/parser_prod.nit:1373 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6789,32 +7533,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:1193 */
+      /* parser/parser_prod.nit:1374 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1193);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1374);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1194 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1375 */
       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, 1194);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1375);
       }
-      /* parser/parser_prod.nit:1195 */
+      /* parser/parser_prod.nit:1376 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1197 */
+      /* parser/parser_prod.nit:1378 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1199 */
+    /* parser/parser_prod.nit:1380 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1201 */
+  /* parser/parser_prod.nit:1382 */
   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, 1201);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1382);
   }
   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]));
@@ -6824,7 +7568,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1202 */
+    /* parser/parser_prod.nit:1383 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6839,32 +7583,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:1203 */
+      /* parser/parser_prod.nit:1384 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1203);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1384);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1204 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1385 */
       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, 1204);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1385);
       }
-      /* parser/parser_prod.nit:1205 */
+      /* parser/parser_prod.nit:1386 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1207 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1207);
+      /* parser/parser_prod.nit:1388 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1388);
     }
-    /* parser/parser_prod.nit:1209 */
+    /* parser/parser_prod.nit:1390 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1211 */
+  /* parser/parser_prod.nit:1392 */
   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, 1211);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1392);
   }
   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]));
@@ -6874,7 +7618,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1212 */
+    /* parser/parser_prod.nit:1393 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6889,28 +7633,28 @@ 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:1213 */
+      /* parser/parser_prod.nit:1394 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1213);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1394);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1214 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1395 */
       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, 1214);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1395);
       }
-      /* parser/parser_prod.nit:1215 */
+      /* parser/parser_prod.nit:1396 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1217 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1217);
+      /* parser/parser_prod.nit:1398 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1398);
     }
-    /* parser/parser_prod.nit:1219 */
+    /* parser/parser_prod.nit:1400 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1221 */
+  /* parser/parser_prod.nit:1402 */
   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)) {
@@ -6925,7 +7669,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1222 */
+    /* parser/parser_prod.nit:1403 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6940,28 +7684,28 @@ 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:1223 */
+      /* parser/parser_prod.nit:1404 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1223);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1404);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1224 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1405 */
       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, 1224);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1405);
       }
-      /* parser/parser_prod.nit:1225 */
+      /* parser/parser_prod.nit:1406 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1227 */
+      /* parser/parser_prod.nit:1408 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1229 */
+    /* parser/parser_prod.nit:1410 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1231 */
+  /* parser/parser_prod.nit:1412 */
   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)) {
@@ -6976,7 +7720,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1232 */
+    /* parser/parser_prod.nit:1413 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6991,28 +7735,28 @@ 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:1233 */
+      /* parser/parser_prod.nit:1414 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1233);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1414);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1234 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1415 */
       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, 1234);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1415);
       }
-      /* parser/parser_prod.nit:1235 */
+      /* parser/parser_prod.nit:1416 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1237 */
+      /* parser/parser_prod.nit:1418 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1239 */
+    /* parser/parser_prod.nit:1420 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1241 */
+  /* parser/parser_prod.nit:1422 */
   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)) {
@@ -7027,7 +7771,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1242 */
+    /* parser/parser_prod.nit:1423 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7042,28 +7786,28 @@ 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:1243 */
+      /* parser/parser_prod.nit:1424 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1243);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1424);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1244 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1425 */
       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, 1244);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1425);
       }
-      /* parser/parser_prod.nit:1245 */
+      /* parser/parser_prod.nit:1426 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1247 */
+      /* parser/parser_prod.nit:1428 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1249 */
+    /* parser/parser_prod.nit:1430 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1251 */
+  /* parser/parser_prod.nit:1432 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7078,7 +7822,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1252 */
+    /* parser/parser_prod.nit:1433 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7093,28 +7837,28 @@ 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:1253 */
+      /* parser/parser_prod.nit:1434 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1253);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1434);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1254 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1435 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1254);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1435);
       }
-      /* parser/parser_prod.nit:1255 */
+      /* parser/parser_prod.nit:1436 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1257 */
+      /* parser/parser_prod.nit:1438 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1259 */
+    /* parser/parser_prod.nit:1440 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1261 */
+  /* parser/parser_prod.nit:1442 */
   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)) {
@@ -7129,7 +7873,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1262 */
+    /* parser/parser_prod.nit:1443 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7144,32 +7888,472 @@ 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:1263 */
+      /* parser/parser_prod.nit:1444 */
       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, 1444);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1264 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1445 */
       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, 1264);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1445);
       }
-      /* parser/parser_prod.nit:1265 */
+      /* parser/parser_prod.nit:1446 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1267 */
+      /* parser/parser_prod.nit:1448 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1269 */
+    /* parser/parser_prod.nit:1450 */
     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)";
+static const char LOCATE_parser___parser_prod___AAttrPropdef___n_doc__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::APropdef::n_doc=)";
+void parser___parser_prod___AAttrPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1454;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_doc__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:1456 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1457 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1458 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1458);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_readable__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::AAttrPropdef::n_readable=)";
+void parser___parser_prod___AAttrPropdef___n_readable__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1461;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_readable__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:1463 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1464 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1465 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1465);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_writable__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::AAttrPropdef::n_writable=)";
+void parser___parser_prod___AAttrPropdef___n_writable__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1468;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_writable__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:1470 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1471 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1472 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1472);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_kwredef__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::AAttrPropdef::n_kwredef=)";
+void parser___parser_prod___AAttrPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1475;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_kwredef__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:1477 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1478 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1479 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1479);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_visibility__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::AAttrPropdef::n_visibility=)";
+void parser___parser_prod___AAttrPropdef___n_visibility__eq(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 = 1482;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_visibility__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:1484 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1485 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_kwvar__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::AAttrPropdef::n_kwvar=)";
+void parser___parser_prod___AAttrPropdef___n_kwvar__eq(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 = 1487;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_kwvar__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:1489 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1490 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_id__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::AAttrPropdef::n_id=)";
+void parser___parser_prod___AAttrPropdef___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1492;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_id__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:1494 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1495 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1496 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1496);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_id2__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::AAttrPropdef::n_id2=)";
+void parser___parser_prod___AAttrPropdef___n_id2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1499;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_id2__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:1501 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1502 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1503 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1503);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_type__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::AAttrPropdef::n_type=)";
+void parser___parser_prod___AAttrPropdef___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1506;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_type__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:1508 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1509 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1510 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1510);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_annotations__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AAttrPropdef___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1513;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_annotations__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:1515 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1516 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1517 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1517);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___n_expr__eq[] = "parser_prod::AAttrPropdef::(parser_nodes::AAttrPropdef::n_expr=)";
+void parser___parser_prod___AAttrPropdef___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1520;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___n_expr__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:1522 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1523 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1524 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1524);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrPropdef___visit_all[] = "parser_prod::AAttrPropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -7177,7 +8361,7 @@ void parser___parser_prod___AAttrPropdef___visit_all(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 = 1273;
+  fra.me.line = 1529;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7188,9 +8372,9 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1273 */
+  /* parser/parser_prod.nit:1529 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1275 */
+  /* parser/parser_prod.nit:1531 */
   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)) {
@@ -7206,16 +8390,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1276 */
+    /* parser/parser_prod.nit:1532 */
     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, 1276);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1532);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1278 */
+  /* parser/parser_prod.nit:1534 */
   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)) {
@@ -7231,16 +8415,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1279 */
+    /* parser/parser_prod.nit:1535 */
     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, 1279);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1535);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1281 */
+  /* parser/parser_prod.nit:1537 */
   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)) {
@@ -7256,16 +8440,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1282 */
+    /* parser/parser_prod.nit:1538 */
     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, 1282);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1538);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1284 */
+  /* parser/parser_prod.nit:1540 */
   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)) {
@@ -7281,32 +8465,32 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1285 */
+    /* parser/parser_prod.nit:1541 */
     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, 1285);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1541);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1287 */
+  /* parser/parser_prod.nit:1543 */
   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, 1287);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1543);
   }
   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:1288 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1544 */
   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, 1288);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1544);
   }
   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:1289 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1545 */
   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)) {
@@ -7322,16 +8506,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1290 */
+    /* parser/parser_prod.nit:1546 */
     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, 1290);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1546);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1292 */
+  /* parser/parser_prod.nit:1548 */
   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)) {
@@ -7347,16 +8531,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1293 */
+    /* parser/parser_prod.nit:1549 */
     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, 1293);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1549);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1295 */
+  /* parser/parser_prod.nit:1551 */
   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)) {
@@ -7372,16 +8556,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1296 */
+    /* parser/parser_prod.nit:1552 */
     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, 1296);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1552);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1298 */
+  /* parser/parser_prod.nit:1554 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -7397,16 +8581,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1299 */
+    /* parser/parser_prod.nit:1555 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1299);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1555);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1301 */
+  /* parser/parser_prod.nit:1557 */
   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)) {
@@ -7422,27 +8606,27 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1302 */
+    /* parser/parser_prod.nit:1558 */
     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, 1302);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1558);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos39]) return;
+  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 = 1307;
+  fra.me.line = 1563;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -7450,20 +8634,20 @@ void parser___parser_prod___AMethPropdef___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos39] = 1;
+  init_table[itpos38] = 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;
+  int itpos39 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMethPropdef].i;
   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;
+  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 = 1309;
+  fra.me.line = 1565;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -7481,13 +8665,13 @@ void parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1,
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:1309 */
+  /* parser/parser_prod.nit:1565 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1317 */
+  /* parser/parser_prod.nit:1573 */
   CALL_parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:1318 */
+  /* parser/parser_prod.nit:1574 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1319 */
+  /* parser/parser_prod.nit:1575 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7502,16 +8686,16 @@ 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:1320 */
+    /* parser/parser_prod.nit:1576 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1320);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1576);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
   }
-  /* parser/parser_prod.nit:1322 */
+  /* parser/parser_prod.nit:1578 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1323 */
+  /* parser/parser_prod.nit:1579 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7526,57 +8710,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:1324 */
+    /* parser/parser_prod.nit:1580 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1324);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1580);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
   }
-  /* parser/parser_prod.nit:1326 */
+  /* parser/parser_prod.nit:1582 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1326);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1582);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1327 */
+  /* parser/parser_prod.nit:1583 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1327);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1583);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:1328 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:1584 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1328);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1584);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1329 */
+  /* parser/parser_prod.nit:1585 */
   REGB0 = TAG_Bool(fra.me.REG[4]==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, 1585);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:1330 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:1586 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1330);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1586);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1331 */
+  /* parser/parser_prod.nit:1587 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1331);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1587);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos39] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AMethPropdef___replace_child[] = "parser_prod::AMethPropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AMethPropdef___replace_child[] = "parser_prod::AMethPropdef::(parser_nodes::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;
@@ -7584,7 +8768,7 @@ 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 = 1334;
+  fra.me.line = 1590;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7596,7 +8780,7 @@ 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:1336 */
+  /* parser/parser_prod.nit:1592 */
   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)) {
@@ -7611,7 +8795,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1337 */
+    /* parser/parser_prod.nit:1593 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7626,28 +8810,28 @@ 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:1338 */
+      /* parser/parser_prod.nit:1594 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1338);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1594);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1339 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1595 */
       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, 1339);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1595);
       }
-      /* parser/parser_prod.nit:1340 */
+      /* parser/parser_prod.nit:1596 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1342 */
+      /* parser/parser_prod.nit:1598 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1344 */
+    /* parser/parser_prod.nit:1600 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1346 */
+  /* parser/parser_prod.nit:1602 */
   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)) {
@@ -7662,7 +8846,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1347 */
+    /* parser/parser_prod.nit:1603 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7677,28 +8861,28 @@ 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:1348 */
+      /* parser/parser_prod.nit:1604 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1348);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1604);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1349 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1605 */
       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, 1349);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1605);
       }
-      /* parser/parser_prod.nit:1350 */
+      /* parser/parser_prod.nit:1606 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1352 */
+      /* parser/parser_prod.nit:1608 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1354 */
+    /* parser/parser_prod.nit:1610 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1356 */
+  /* parser/parser_prod.nit:1612 */
   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)) {
@@ -7713,7 +8897,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1357 */
+    /* parser/parser_prod.nit:1613 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7728,28 +8912,28 @@ 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:1358 */
+      /* parser/parser_prod.nit:1614 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1358);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1614);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1359 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1615 */
       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, 1359);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1615);
       }
-      /* parser/parser_prod.nit:1360 */
+      /* parser/parser_prod.nit:1616 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1362 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1362);
+      /* parser/parser_prod.nit:1618 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1618);
     }
-    /* parser/parser_prod.nit:1364 */
+    /* parser/parser_prod.nit:1620 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1366 */
+  /* parser/parser_prod.nit:1622 */
   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)) {
@@ -7764,7 +8948,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1367 */
+    /* parser/parser_prod.nit:1623 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7779,28 +8963,28 @@ 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:1368 */
+      /* parser/parser_prod.nit:1624 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 1624);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1369 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1625 */
       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, 1369);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1625);
       }
-      /* parser/parser_prod.nit:1370 */
+      /* parser/parser_prod.nit:1626 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1372 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1372);
+      /* parser/parser_prod.nit:1628 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1628);
     }
-    /* parser/parser_prod.nit:1374 */
+    /* parser/parser_prod.nit:1630 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1376 */
+  /* parser/parser_prod.nit:1632 */
   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)) {
@@ -7815,7 +8999,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1377 */
+    /* parser/parser_prod.nit:1633 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7830,32 +9014,201 @@ 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:1378 */
+      /* parser/parser_prod.nit:1634 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1378);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1634);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1379 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1635 */
       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, 1379);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1635);
       }
-      /* parser/parser_prod.nit:1380 */
+      /* parser/parser_prod.nit:1636 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1382 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1382);
+      /* parser/parser_prod.nit:1638 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1638);
     }
-    /* parser/parser_prod.nit:1384 */
+    /* parser/parser_prod.nit:1640 */
     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)";
+static const char LOCATE_parser___parser_prod___AMethPropdef___n_doc__eq[] = "parser_prod::AMethPropdef::(parser_nodes::APropdef::n_doc=)";
+void parser___parser_prod___AMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1644;
+  fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___n_doc__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:1646 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1647 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1648 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1648);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AMethPropdef___n_kwredef__eq[] = "parser_prod::AMethPropdef::(parser_nodes::AMethPropdef::n_kwredef=)";
+void parser___parser_prod___AMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1651;
+  fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___n_kwredef__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:1653 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1654 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1655 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1655);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AMethPropdef___n_visibility__eq[] = "parser_prod::AMethPropdef::(parser_nodes::AMethPropdef::n_visibility=)";
+void parser___parser_prod___AMethPropdef___n_visibility__eq(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 = 1658;
+  fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___n_visibility__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:1660 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1661 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1661);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AMethPropdef___n_methid__eq[] = "parser_prod::AMethPropdef::(parser_nodes::AMethPropdef::n_methid=)";
+void parser___parser_prod___AMethPropdef___n_methid__eq(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 = 1663;
+  fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___n_methid__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:1665 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1666 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1666);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AMethPropdef___n_signature__eq[] = "parser_prod::AMethPropdef::(parser_nodes::AMethPropdef::n_signature=)";
+void parser___parser_prod___AMethPropdef___n_signature__eq(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 = 1668;
+  fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___n_signature__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:1670 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1671 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1671);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AMethPropdef___visit_all[] = "parser_prod::AMethPropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -7863,7 +9216,7 @@ void parser___parser_prod___AMethPropdef___visit_all(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 = 1388;
+  fra.me.line = 1675;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7874,9 +9227,9 @@ void parser___parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1388 */
+  /* parser/parser_prod.nit:1675 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1390 */
+  /* parser/parser_prod.nit:1677 */
   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)) {
@@ -7892,16 +9245,16 @@ void parser___parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1391 */
+    /* parser/parser_prod.nit:1678 */
     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, 1391);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1678);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1393 */
+  /* parser/parser_prod.nit:1680 */
   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)) {
@@ -7917,36 +9270,36 @@ void parser___parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1394 */
+    /* parser/parser_prod.nit:1681 */
     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, 1394);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1681);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1396 */
+  /* parser/parser_prod.nit:1683 */
   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:1397 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1684 */
   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:1398 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1685 */
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos40 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADeferredMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos41]) return;
+  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 = 1402;
+  fra.me.line = 1689;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -7954,20 +9307,20 @@ void parser___parser_prod___ADeferredMethPropdef___empty_init(val_t p0, int* ini
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos41] = 1;
+  init_table[itpos40] = 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, val_t p7, int* init_table){
-  int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADeferredMethPropdef].i;
+  int itpos41 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADeferredMethPropdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos42]) return;
+  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 = 1404;
+  fra.me.line = 1691;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7989,13 +9342,13 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
-  /* parser/parser_prod.nit:1404 */
+  /* parser/parser_prod.nit:1691 */
   fra.me.REG[8] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1414 */
+  /* parser/parser_prod.nit:1701 */
   CALL_parser___parser_prod___ADeferredMethPropdef___empty_init(fra.me.REG[8])(fra.me.REG[8], init_table);
-  /* parser/parser_prod.nit:1415 */
+  /* parser/parser_prod.nit:1702 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[8]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1416 */
+  /* parser/parser_prod.nit:1703 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8010,16 +9363,16 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1417 */
+    /* parser/parser_prod.nit:1704 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1417);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1704);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
   }
-  /* parser/parser_prod.nit:1419 */
+  /* parser/parser_prod.nit:1706 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[8]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1420 */
+  /* parser/parser_prod.nit:1707 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8034,68 +9387,68 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1421 */
+    /* parser/parser_prod.nit:1708 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1421);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1708);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
   }
-  /* parser/parser_prod.nit:1423 */
+  /* parser/parser_prod.nit:1710 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1423);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1710);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[8]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1424 */
+  /* parser/parser_prod.nit:1711 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1424);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1711);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1425 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1712 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1425);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1712);
   }
   ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[8]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1426 */
+  /* parser/parser_prod.nit:1713 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1426);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1713);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1427 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1714 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1427);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1714);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[8]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1428 */
+  /* parser/parser_prod.nit:1715 */
   REGB0 = TAG_Bool(fra.me.REG[5]==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, 1715);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1429 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1716 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1429);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1716);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[8]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1430 */
+  /* parser/parser_prod.nit:1717 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1430);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1717);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1431 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1718 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[8]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1432 */
+  /* parser/parser_prod.nit:1719 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8110,18 +9463,18 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1433 */
+    /* parser/parser_prod.nit:1720 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1433);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1720);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos42] = 1;
+  init_table[itpos41] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ADeferredMethPropdef___replace_child[] = "parser_prod::ADeferredMethPropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ADeferredMethPropdef___replace_child[] = "parser_prod::ADeferredMethPropdef::(parser_nodes::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;
@@ -8129,7 +9482,7 @@ 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 = 1437;
+  fra.me.line = 1724;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8141,7 +9494,7 @@ 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:1439 */
+  /* parser/parser_prod.nit:1726 */
   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)) {
@@ -8156,7 +9509,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1440 */
+    /* parser/parser_prod.nit:1727 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8171,28 +9524,28 @@ 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:1441 */
+      /* 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, 1441);
+        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:1442 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1729 */
       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, 1442);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1729);
       }
-      /* parser/parser_prod.nit:1443 */
+      /* parser/parser_prod.nit:1730 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1445 */
+      /* parser/parser_prod.nit:1732 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1447 */
+    /* parser/parser_prod.nit:1734 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1449 */
+  /* parser/parser_prod.nit:1736 */
   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)) {
@@ -8207,7 +9560,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1450 */
+    /* parser/parser_prod.nit:1737 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8222,28 +9575,28 @@ 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:1451 */
+      /* 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, 1451);
+        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:1452 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1739 */
       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, 1452);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1739);
       }
-      /* parser/parser_prod.nit:1453 */
+      /* parser/parser_prod.nit:1740 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1455 */
+      /* parser/parser_prod.nit:1742 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1457 */
+    /* parser/parser_prod.nit:1744 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1459 */
+  /* parser/parser_prod.nit:1746 */
   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)) {
@@ -8258,7 +9611,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1460 */
+    /* parser/parser_prod.nit:1747 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8273,32 +9626,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:1461 */
+      /* 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, 1461);
+        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:1462 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1749 */
       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, 1462);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1749);
       }
-      /* parser/parser_prod.nit:1463 */
+      /* parser/parser_prod.nit:1750 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1465 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1465);
+      /* parser/parser_prod.nit:1752 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1752);
     }
-    /* parser/parser_prod.nit:1467 */
+    /* parser/parser_prod.nit:1754 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1469 */
+  /* parser/parser_prod.nit:1756 */
   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, 1469);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1756);
   }
   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]));
@@ -8308,7 +9661,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1470 */
+    /* parser/parser_prod.nit:1757 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8323,28 +9676,28 @@ 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:1471 */
+      /* 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, 1471);
+        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:1472 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1759 */
       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, 1472);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1759);
       }
-      /* parser/parser_prod.nit:1473 */
+      /* parser/parser_prod.nit:1760 */
       ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1475 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1475);
+      /* parser/parser_prod.nit:1762 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1762);
     }
-    /* parser/parser_prod.nit:1477 */
+    /* parser/parser_prod.nit:1764 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1479 */
+  /* parser/parser_prod.nit:1766 */
   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)) {
@@ -8359,109 +9712,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* 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(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:1481 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        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: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, 1482);
-      }
-      /* 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:1485 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1485);
-    }
-    /* parser/parser_prod.nit:1487 */
-    goto label1;
-  }
-  /* 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(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: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(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:1491 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        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: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, 1492);
-      }
-      /* 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:1495 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1495);
-    }
-    /* parser/parser_prod.nit:1497 */
-    goto label1;
-  }
-  /* parser/parser_prod.nit:1499 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(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:1500 */
+    /* parser/parser_prod.nit:1767 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8476,32 +9727,369 @@ 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:1501 */
+      /* 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, 1768);
+      }
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1769 */
+      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, 1769);
+      }
+      /* parser/parser_prod.nit:1770 */
+      ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:1772 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1772);
+    }
+    /* parser/parser_prod.nit:1774 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:1776 */
+  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(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: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(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:1778 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1778);
+      }
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1779 */
+      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, 1779);
+      }
+      /* parser/parser_prod.nit:1780 */
+      ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:1782 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1782);
+    }
+    /* parser/parser_prod.nit:1784 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:1786 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(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:1787 */
+    REGB0 = TAG_Bool(fra.me.REG[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:1788 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1501);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1788);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1502 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1789 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1502);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1789);
       }
-      /* parser/parser_prod.nit:1503 */
+      /* parser/parser_prod.nit:1790 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1505 */
+      /* parser/parser_prod.nit:1792 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1507 */
+    /* parser/parser_prod.nit:1794 */
     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)";
+static const char LOCATE_parser___parser_prod___ADeferredMethPropdef___n_doc__eq[] = "parser_prod::ADeferredMethPropdef::(parser_nodes::APropdef::n_doc=)";
+void parser___parser_prod___ADeferredMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1798;
+  fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___n_doc__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:1800 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1801 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1802 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1802);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwredef__eq[] = "parser_prod::ADeferredMethPropdef::(parser_nodes::AMethPropdef::n_kwredef=)";
+void parser___parser_prod___ADeferredMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1805;
+  fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___n_kwredef__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:1807 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1808 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1809 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1809);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_visibility__eq[] = "parser_prod::ADeferredMethPropdef::(parser_nodes::AMethPropdef::n_visibility=)";
+void parser___parser_prod___ADeferredMethPropdef___n_visibility__eq(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 = 1812;
+  fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___n_visibility__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:1814 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1815 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1815);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwmeth__eq[] = "parser_prod::ADeferredMethPropdef::(parser_nodes::ADeferredMethPropdef::n_kwmeth=)";
+void parser___parser_prod___ADeferredMethPropdef___n_kwmeth__eq(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 = 1817;
+  fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___n_kwmeth__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:1819 */
+  ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1820 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_methid__eq[] = "parser_prod::ADeferredMethPropdef::(parser_nodes::AMethPropdef::n_methid=)";
+void parser___parser_prod___ADeferredMethPropdef___n_methid__eq(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 = 1822;
+  fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___n_methid__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:1824 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1825 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1825);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_signature__eq[] = "parser_prod::ADeferredMethPropdef::(parser_nodes::AMethPropdef::n_signature=)";
+void parser___parser_prod___ADeferredMethPropdef___n_signature__eq(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 = 1827;
+  fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___n_signature__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:1829 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1830 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1830);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::ADeferredMethPropdef::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ADeferredMethPropdef___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1832;
+  fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___n_annotations__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:1834 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1835 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1836 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1836);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ADeferredMethPropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -8509,7 +10097,7 @@ void parser___parser_prod___ADeferredMethPropdef___visit_all(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 = 1511;
+  fra.me.line = 1841;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8520,9 +10108,9 @@ void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1511 */
+  /* parser/parser_prod.nit:1841 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1513 */
+  /* parser/parser_prod.nit:1843 */
   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)) {
@@ -8538,16 +10126,16 @@ void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1514 */
+    /* parser/parser_prod.nit:1844 */
     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, 1514);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1844);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1516 */
+  /* parser/parser_prod.nit:1846 */
   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)) {
@@ -8563,33 +10151,33 @@ void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1517 */
+    /* parser/parser_prod.nit:1847 */
     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, 1517);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1847);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1519 */
+  /* parser/parser_prod.nit:1849 */
   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:1520 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1850 */
   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, 1520);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1850);
   }
   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:1521 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1851 */
   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:1522 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1852 */
   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:1523 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1853 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -8605,27 +10193,27 @@ void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1524 */
+    /* parser/parser_prod.nit:1854 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1524);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1854);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInternMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos43]) return;
+  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 = 1529;
+  fra.me.line = 1859;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -8633,20 +10221,20 @@ void parser___parser_prod___AInternMethPropdef___empty_init(val_t p0, int* init_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos43] = 1;
+  init_table[itpos42] = 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;
+  int itpos43 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInternMethPropdef].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[itpos44]) return;
+  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 = 1531;
+  fra.me.line = 1861;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -8666,13 +10254,13 @@ 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:1531 */
+  /* parser/parser_prod.nit:1861 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1540 */
+  /* parser/parser_prod.nit:1870 */
   CALL_parser___parser_prod___AInternMethPropdef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:1541 */
+  /* parser/parser_prod.nit:1871 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1542 */
+  /* parser/parser_prod.nit:1872 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8687,16 +10275,16 @@ void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1543 */
+    /* parser/parser_prod.nit:1873 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1543);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1873);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:1545 */
+  /* parser/parser_prod.nit:1875 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1546 */
+  /* parser/parser_prod.nit:1876 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8711,70 +10299,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:1547 */
+    /* 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, 1547);
+      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[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:1549 */
+  /* parser/parser_prod.nit:1879 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1549);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1879);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1550 */
+  /* parser/parser_prod.nit:1880 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1550);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1880);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:1551 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:1881 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1551);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1881);
   }
   ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1552 */
+  /* parser/parser_prod.nit:1882 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1552);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1882);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:1553 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:1883 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1553);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1883);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1554 */
+  /* parser/parser_prod.nit:1884 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1554);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1884);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
-  /* parser/parser_prod.nit:1555 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+  /* parser/parser_prod.nit:1885 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1555);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1885);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1556 */
+  /* parser/parser_prod.nit:1886 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1556);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1886);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos43] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AInternMethPropdef___replace_child[] = "parser_prod::AInternMethPropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AInternMethPropdef___replace_child[] = "parser_prod::AInternMethPropdef::(parser_nodes::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;
@@ -8782,7 +10370,7 @@ 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 = 1559;
+  fra.me.line = 1889;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8794,7 +10382,7 @@ 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:1561 */
+  /* parser/parser_prod.nit:1891 */
   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)) {
@@ -8809,7 +10397,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1562 */
+    /* parser/parser_prod.nit:1892 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8824,28 +10412,28 @@ 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:1563 */
+      /* parser/parser_prod.nit:1893 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1563);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1893);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1564 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1894 */
       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, 1564);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1894);
       }
-      /* parser/parser_prod.nit:1565 */
+      /* parser/parser_prod.nit:1895 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1567 */
+      /* parser/parser_prod.nit:1897 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1569 */
+    /* parser/parser_prod.nit:1899 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1571 */
+  /* parser/parser_prod.nit:1901 */
   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)) {
@@ -8860,7 +10448,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1572 */
+    /* parser/parser_prod.nit:1902 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8875,28 +10463,28 @@ 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:1573 */
+      /* parser/parser_prod.nit:1903 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1573);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1903);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1574 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1904 */
       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, 1574);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1904);
       }
-      /* parser/parser_prod.nit:1575 */
+      /* parser/parser_prod.nit:1905 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1577 */
+      /* parser/parser_prod.nit:1907 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1579 */
+    /* parser/parser_prod.nit:1909 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1581 */
+  /* parser/parser_prod.nit:1911 */
   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)) {
@@ -8911,7 +10499,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1582 */
+    /* parser/parser_prod.nit:1912 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8926,32 +10514,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:1583 */
+      /* parser/parser_prod.nit:1913 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1583);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1913);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1584 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1914 */
       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, 1584);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1914);
       }
-      /* parser/parser_prod.nit:1585 */
+      /* parser/parser_prod.nit:1915 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1587 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1587);
+      /* parser/parser_prod.nit:1917 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1917);
     }
-    /* parser/parser_prod.nit:1589 */
+    /* parser/parser_prod.nit:1919 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1591 */
+  /* parser/parser_prod.nit:1921 */
   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, 1591);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1921);
   }
   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]));
@@ -8961,7 +10549,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1592 */
+    /* parser/parser_prod.nit:1922 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8976,28 +10564,28 @@ 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:1593 */
+      /* parser/parser_prod.nit:1923 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1593);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1923);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1594 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1924 */
       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, 1594);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1924);
       }
-      /* parser/parser_prod.nit:1595 */
+      /* parser/parser_prod.nit:1925 */
       ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1597 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1597);
+      /* parser/parser_prod.nit:1927 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1927);
     }
-    /* parser/parser_prod.nit:1599 */
+    /* parser/parser_prod.nit:1929 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1601 */
+  /* parser/parser_prod.nit:1931 */
   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)) {
@@ -9012,7 +10600,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1602 */
+    /* parser/parser_prod.nit:1932 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9027,28 +10615,28 @@ 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:1603 */
+      /* parser/parser_prod.nit:1933 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1603);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1933);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1604 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1934 */
       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, 1604);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1934);
       }
-      /* parser/parser_prod.nit:1605 */
+      /* parser/parser_prod.nit:1935 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1607 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1607);
+      /* parser/parser_prod.nit:1937 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1937);
     }
-    /* parser/parser_prod.nit:1609 */
+    /* parser/parser_prod.nit:1939 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1611 */
+  /* parser/parser_prod.nit:1941 */
   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)) {
@@ -9063,7 +10651,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1612 */
+    /* parser/parser_prod.nit:1942 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9078,32 +10666,223 @@ 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:1613 */
+      /* parser/parser_prod.nit:1943 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1613);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1943);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1614 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1944 */
       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, 1614);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1944);
       }
-      /* parser/parser_prod.nit:1615 */
+      /* parser/parser_prod.nit:1945 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1617 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1617);
+      /* parser/parser_prod.nit:1947 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1947);
     }
-    /* parser/parser_prod.nit:1619 */
+    /* parser/parser_prod.nit:1949 */
     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)";
+static const char LOCATE_parser___parser_prod___AInternMethPropdef___n_doc__eq[] = "parser_prod::AInternMethPropdef::(parser_nodes::APropdef::n_doc=)";
+void parser___parser_prod___AInternMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1953;
+  fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___n_doc__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:1955 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1956 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1957 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1957);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwredef__eq[] = "parser_prod::AInternMethPropdef::(parser_nodes::AMethPropdef::n_kwredef=)";
+void parser___parser_prod___AInternMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 1960;
+  fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___n_kwredef__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:1962 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1963 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:1964 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1964);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_visibility__eq[] = "parser_prod::AInternMethPropdef::(parser_nodes::AMethPropdef::n_visibility=)";
+void parser___parser_prod___AInternMethPropdef___n_visibility__eq(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 = 1967;
+  fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___n_visibility__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:1969 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1970 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1970);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwmeth__eq[] = "parser_prod::AInternMethPropdef::(parser_nodes::AInternMethPropdef::n_kwmeth=)";
+void parser___parser_prod___AInternMethPropdef___n_kwmeth__eq(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 = 1972;
+  fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___n_kwmeth__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:1974 */
+  ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1975 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_methid__eq[] = "parser_prod::AInternMethPropdef::(parser_nodes::AMethPropdef::n_methid=)";
+void parser___parser_prod___AInternMethPropdef___n_methid__eq(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 = 1977;
+  fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___n_methid__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:1979 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1980 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1980);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_signature__eq[] = "parser_prod::AInternMethPropdef::(parser_nodes::AMethPropdef::n_signature=)";
+void parser___parser_prod___AInternMethPropdef___n_signature__eq(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 = 1982;
+  fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___n_signature__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:1984 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1985 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1985);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AInternMethPropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -9111,7 +10890,7 @@ void parser___parser_prod___AInternMethPropdef___visit_all(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 = 1623;
+  fra.me.line = 1989;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -9122,9 +10901,9 @@ void parser___parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1623 */
+  /* parser/parser_prod.nit:1989 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1625 */
+  /* parser/parser_prod.nit:1991 */
   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)) {
@@ -9140,16 +10919,16 @@ void parser___parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1626 */
+    /* parser/parser_prod.nit:1992 */
     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, 1626);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1992);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1628 */
+  /* parser/parser_prod.nit:1994 */
   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)) {
@@ -9165,44 +10944,44 @@ void parser___parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1629 */
+    /* parser/parser_prod.nit:1995 */
     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, 1629);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1995);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1631 */
+  /* parser/parser_prod.nit:1997 */
   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:1632 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1998 */
   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, 1632);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1998);
   }
   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:1633 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1999 */
   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:1634 */
+  CALL_parser___parser_nodes___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_signature(fra.me.REG[2]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos44 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos45]) return;
+  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 = 1638;
+  fra.me.line = 2004;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -9210,20 +10989,20 @@ void parser___parser_prod___AExternMethPropdef___empty_init(val_t p0, int* init_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos45] = 1;
+  init_table[itpos44] = 1;
   return;
 }
 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;
+  int itpos45 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternMethPropdef].i;
   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;
+  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 = 1640;
+  fra.me.line = 2006;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -9249,13 +11028,13 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
   fra.me.REG[9] = p9;
-  /* parser/parser_prod.nit:1640 */
+  /* parser/parser_prod.nit:2006 */
   fra.me.REG[10] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1652 */
+  /* parser/parser_prod.nit:2018 */
   CALL_parser___parser_prod___AExternMethPropdef___empty_init(fra.me.REG[10])(fra.me.REG[10], init_table);
-  /* parser/parser_prod.nit:1653 */
+  /* parser/parser_prod.nit:2019 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[10]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1654 */
+  /* parser/parser_prod.nit:2020 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9270,16 +11049,16 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1655 */
+    /* parser/parser_prod.nit:2021 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1655);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2021);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[10]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1657 */
+  /* parser/parser_prod.nit:2023 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[10]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1658 */
+  /* parser/parser_prod.nit:2024 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9294,68 +11073,68 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1659 */
+    /* parser/parser_prod.nit:2025 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1659);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2025);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[10]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1661 */
+  /* parser/parser_prod.nit:2027 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1661);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2027);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[10]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1662 */
+  /* parser/parser_prod.nit:2028 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1662);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2028);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1663 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[10]);
+  /* parser/parser_prod.nit:2029 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1663);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2029);
   }
   ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[10]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1664 */
+  /* parser/parser_prod.nit:2030 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1664);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2030);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1665 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[10]);
+  /* parser/parser_prod.nit:2031 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1665);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2031);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[10]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1666 */
+  /* parser/parser_prod.nit:2032 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1666);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2032);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1667 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[10]);
+  /* parser/parser_prod.nit:2033 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1667);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2033);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[10]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1668 */
+  /* parser/parser_prod.nit:2034 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1668);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2034);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1669 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[10]);
+  /* parser/parser_prod.nit:2035 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[10]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1670 */
+  /* parser/parser_prod.nit:2036 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9370,16 +11149,16 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1671 */
+    /* parser/parser_prod.nit:2037 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1671);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2037);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[10]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1673 */
+  /* parser/parser_prod.nit:2039 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[10]) = fra.me.REG[8];
-  /* parser/parser_prod.nit:1674 */
+  /* parser/parser_prod.nit:2040 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9394,16 +11173,16 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1675 */
+    /* parser/parser_prod.nit:2041 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1675);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2041);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[10]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1677 */
+  /* parser/parser_prod.nit:2043 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[10]) = fra.me.REG[9];
-  /* parser/parser_prod.nit:1678 */
+  /* parser/parser_prod.nit:2044 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9418,18 +11197,18 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1679 */
+    /* parser/parser_prod.nit:2045 */
     REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1679);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2045);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[10]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos45] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AExternMethPropdef___replace_child[] = "parser_prod::AExternMethPropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AExternMethPropdef___replace_child[] = "parser_prod::AExternMethPropdef::(parser_nodes::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;
@@ -9437,7 +11216,7 @@ 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 = 1683;
+  fra.me.line = 2049;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -9449,7 +11228,7 @@ 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:1685 */
+  /* parser/parser_prod.nit:2051 */
   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)) {
@@ -9464,7 +11243,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1686 */
+    /* parser/parser_prod.nit:2052 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9479,28 +11258,28 @@ 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:1687 */
+      /* parser/parser_prod.nit:2053 */
       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, 2053);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1688 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2054 */
       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, 1688);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2054);
       }
-      /* parser/parser_prod.nit:1689 */
+      /* parser/parser_prod.nit:2055 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1691 */
+      /* parser/parser_prod.nit:2057 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1693 */
+    /* parser/parser_prod.nit:2059 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1695 */
+  /* parser/parser_prod.nit:2061 */
   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)) {
@@ -9515,7 +11294,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1696 */
+    /* parser/parser_prod.nit:2062 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9530,28 +11309,28 @@ 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:1697 */
+      /* parser/parser_prod.nit:2063 */
       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, 2063);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1698 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2064 */
       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, 1698);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2064);
       }
-      /* parser/parser_prod.nit:1699 */
+      /* parser/parser_prod.nit:2065 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1701 */
+      /* parser/parser_prod.nit:2067 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1703 */
+    /* parser/parser_prod.nit:2069 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1705 */
+  /* parser/parser_prod.nit:2071 */
   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)) {
@@ -9566,7 +11345,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1706 */
+    /* parser/parser_prod.nit:2072 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9581,32 +11360,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:1707 */
+      /* parser/parser_prod.nit:2073 */
       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, 2073);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1708 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2074 */
       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, 1708);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2074);
       }
-      /* parser/parser_prod.nit:1709 */
+      /* parser/parser_prod.nit:2075 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1711 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1711);
+      /* parser/parser_prod.nit:2077 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2077);
     }
-    /* parser/parser_prod.nit:1713 */
+    /* parser/parser_prod.nit:2079 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1715 */
+  /* parser/parser_prod.nit:2081 */
   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, 1715);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 2081);
   }
   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]));
@@ -9616,7 +11395,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1716 */
+    /* parser/parser_prod.nit:2082 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9631,28 +11410,28 @@ 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:1717 */
+      /* parser/parser_prod.nit:2083 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1717);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2083);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1718 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2084 */
       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, 1718);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2084);
       }
-      /* parser/parser_prod.nit:1719 */
+      /* parser/parser_prod.nit:2085 */
       ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1721 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1721);
+      /* parser/parser_prod.nit:2087 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2087);
     }
-    /* parser/parser_prod.nit:1723 */
+    /* parser/parser_prod.nit:2089 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1725 */
+  /* parser/parser_prod.nit:2091 */
   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)) {
@@ -9667,7 +11446,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1726 */
+    /* parser/parser_prod.nit:2092 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9682,28 +11461,28 @@ 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:1727 */
+      /* parser/parser_prod.nit:2093 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1727);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2093);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1728 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2094 */
       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, 1728);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2094);
       }
-      /* parser/parser_prod.nit:1729 */
+      /* parser/parser_prod.nit:2095 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1731 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1731);
+      /* parser/parser_prod.nit:2097 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2097);
     }
-    /* parser/parser_prod.nit:1733 */
+    /* parser/parser_prod.nit:2099 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1735 */
+  /* parser/parser_prod.nit:2101 */
   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)) {
@@ -9718,7 +11497,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1736 */
+    /* parser/parser_prod.nit:2102 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9733,28 +11512,28 @@ 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:1737 */
+      /* parser/parser_prod.nit:2103 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1737);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2103);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1738 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2104 */
       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, 1738);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2104);
       }
-      /* parser/parser_prod.nit:1739 */
+      /* parser/parser_prod.nit:2105 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1741 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1741);
+      /* parser/parser_prod.nit:2107 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2107);
     }
-    /* parser/parser_prod.nit:1743 */
+    /* parser/parser_prod.nit:2109 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1745 */
+  /* parser/parser_prod.nit:2111 */
   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)) {
@@ -9769,7 +11548,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1746 */
+    /* parser/parser_prod.nit:2112 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9784,28 +11563,28 @@ 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:1747 */
+      /* parser/parser_prod.nit:2113 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1747);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2113);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1748 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2114 */
       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, 1748);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2114);
       }
-      /* parser/parser_prod.nit:1749 */
+      /* parser/parser_prod.nit:2115 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1751 */
+      /* parser/parser_prod.nit:2117 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1753 */
+    /* parser/parser_prod.nit:2119 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1755 */
+  /* parser/parser_prod.nit:2121 */
   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)) {
@@ -9820,7 +11599,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1756 */
+    /* parser/parser_prod.nit:2122 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9835,28 +11614,28 @@ 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:1757 */
+      /* parser/parser_prod.nit:2123 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 2123);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1758 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2124 */
       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, 1758);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2124);
       }
-      /* parser/parser_prod.nit:1759 */
+      /* parser/parser_prod.nit:2125 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1761 */
+      /* parser/parser_prod.nit:2127 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1763 */
+    /* parser/parser_prod.nit:2129 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1765 */
+  /* parser/parser_prod.nit:2131 */
   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)) {
@@ -9871,7 +11650,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1766 */
+    /* parser/parser_prod.nit:2132 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9886,32 +11665,355 @@ 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:1767 */
+      /* parser/parser_prod.nit:2133 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1767);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2133);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1768 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2134 */
       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, 1768);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2134);
       }
-      /* parser/parser_prod.nit:1769 */
+      /* parser/parser_prod.nit:2135 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1771 */
+      /* parser/parser_prod.nit:2137 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1773 */
+    /* parser/parser_prod.nit:2139 */
     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)";
+static const char LOCATE_parser___parser_prod___AExternMethPropdef___n_doc__eq[] = "parser_prod::AExternMethPropdef::(parser_nodes::APropdef::n_doc=)";
+void parser___parser_prod___AExternMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2143;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___n_doc__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:2145 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2146 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2147 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2147);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwredef__eq[] = "parser_prod::AExternMethPropdef::(parser_nodes::AMethPropdef::n_kwredef=)";
+void parser___parser_prod___AExternMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2150;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___n_kwredef__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:2152 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2153 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2154 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2154);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_visibility__eq[] = "parser_prod::AExternMethPropdef::(parser_nodes::AMethPropdef::n_visibility=)";
+void parser___parser_prod___AExternMethPropdef___n_visibility__eq(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 = 2157;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___n_visibility__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:2159 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2160 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2160);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwmeth__eq[] = "parser_prod::AExternMethPropdef::(parser_nodes::AExternMethPropdef::n_kwmeth=)";
+void parser___parser_prod___AExternMethPropdef___n_kwmeth__eq(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 = 2162;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___n_kwmeth__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:2164 */
+  ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2165 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_methid__eq[] = "parser_prod::AExternMethPropdef::(parser_nodes::AMethPropdef::n_methid=)";
+void parser___parser_prod___AExternMethPropdef___n_methid__eq(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 = 2167;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___n_methid__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:2169 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2170 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2170);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_signature__eq[] = "parser_prod::AExternMethPropdef::(parser_nodes::AMethPropdef::n_signature=)";
+void parser___parser_prod___AExternMethPropdef___n_signature__eq(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 = 2172;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___n_signature__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:2174 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2175 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2175);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_extern__eq[] = "parser_prod::AExternMethPropdef::(parser_nodes::AExternPropdef::n_extern=)";
+void parser___parser_prod___AExternMethPropdef___n_extern__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2177;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___n_extern__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:2179 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2180 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2181 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2181);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_extern_calls__eq[] = "parser_prod::AExternMethPropdef::(parser_nodes::AExternPropdef::n_extern_calls=)";
+void parser___parser_prod___AExternMethPropdef___n_extern_calls__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2184;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___n_extern_calls__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:2186 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2187 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2188 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2188);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_extern_code_block__eq[] = "parser_prod::AExternMethPropdef::(parser_nodes::AExternPropdef::n_extern_code_block=)";
+void parser___parser_prod___AExternMethPropdef___n_extern_code_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2191;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___n_extern_code_block__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:2193 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2194 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2195 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2195);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AExternMethPropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -9919,7 +12021,7 @@ void parser___parser_prod___AExternMethPropdef___visit_all(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 = 1777;
+  fra.me.line = 2200;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -9930,9 +12032,9 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1777 */
+  /* parser/parser_prod.nit:2200 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1779 */
+  /* parser/parser_prod.nit:2202 */
   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)) {
@@ -9948,16 +12050,16 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1780 */
+    /* parser/parser_prod.nit:2203 */
     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, 1780);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2203);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1782 */
+  /* parser/parser_prod.nit:2205 */
   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)) {
@@ -9973,33 +12075,33 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1783 */
+    /* parser/parser_prod.nit:2206 */
     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, 1783);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2206);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1785 */
+  /* parser/parser_prod.nit:2208 */
   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:1786 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2209 */
   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, 1786);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 2209);
   }
   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:1787 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2210 */
   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:1788 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2211 */
   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:1789 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2212 */
   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)) {
@@ -10015,16 +12117,16 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1790 */
+    /* parser/parser_prod.nit:2213 */
     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, 1790);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2213);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1792 */
+  /* parser/parser_prod.nit:2215 */
   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)) {
@@ -10040,16 +12142,16 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1793 */
+    /* parser/parser_prod.nit:2216 */
     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, 1793);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2216);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1795 */
+  /* parser/parser_prod.nit:2218 */
   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)) {
@@ -10065,27 +12167,27 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1796 */
+    /* parser/parser_prod.nit:2219 */
     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, 1796);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2219);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos46 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos47]) return;
+  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 = 1801;
+  fra.me.line = 2224;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -10093,20 +12195,20 @@ void parser___parser_prod___AConcreteMethPropdef___empty_init(val_t p0, int* ini
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos47] = 1;
+  init_table[itpos46] = 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, val_t p8, int* init_table){
-  int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteMethPropdef].i;
+  int itpos47 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteMethPropdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos48]) return;
+  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 = 1803;
+  fra.me.line = 2226;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -10130,13 +12232,13 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
-  /* parser/parser_prod.nit:1803 */
+  /* parser/parser_prod.nit:2226 */
   fra.me.REG[9] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1814 */
+  /* parser/parser_prod.nit:2237 */
   CALL_parser___parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[9])(fra.me.REG[9], init_table);
-  /* parser/parser_prod.nit:1815 */
+  /* parser/parser_prod.nit:2238 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[9]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1816 */
+  /* parser/parser_prod.nit:2239 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10151,16 +12253,16 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1817 */
+    /* parser/parser_prod.nit:2240 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1817);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2240);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[9]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1819 */
+  /* parser/parser_prod.nit:2242 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[9]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1820 */
+  /* parser/parser_prod.nit:2243 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10175,68 +12277,68 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1821 */
+    /* parser/parser_prod.nit:2244 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1821);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2244);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[9]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1823 */
+  /* parser/parser_prod.nit:2246 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1823);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2246);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[9]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1824 */
+  /* parser/parser_prod.nit:2247 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1824);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2247);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[9]);
-  /* parser/parser_prod.nit:1825 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[9]);
+  /* parser/parser_prod.nit:2248 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1825);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2248);
   }
   ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[9]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1826 */
+  /* parser/parser_prod.nit:2249 */
   REGB0 = TAG_Bool(fra.me.REG[4]==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, 2249);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[9]);
-  /* parser/parser_prod.nit:1827 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[9]);
+  /* parser/parser_prod.nit:2250 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1827);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2250);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[9]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1828 */
+  /* parser/parser_prod.nit:2251 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1828);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2251);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[9]);
-  /* parser/parser_prod.nit:1829 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[9]);
+  /* parser/parser_prod.nit:2252 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1829);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2252);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[9]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1830 */
+  /* parser/parser_prod.nit:2253 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1830);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2253);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[9]);
-  /* parser/parser_prod.nit:1831 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[9]);
+  /* parser/parser_prod.nit:2254 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[9]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1832 */
+  /* parser/parser_prod.nit:2255 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10251,16 +12353,16 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1833 */
+    /* parser/parser_prod.nit:2256 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1833);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2256);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[9]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1835 */
+  /* parser/parser_prod.nit:2258 */
   ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[9]) = fra.me.REG[8];
-  /* parser/parser_prod.nit:1836 */
+  /* parser/parser_prod.nit:2259 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10275,18 +12377,18 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1837 */
+    /* parser/parser_prod.nit:2260 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1837);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2260);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos48] = 1;
+  init_table[itpos47] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AConcreteMethPropdef___replace_child[] = "parser_prod::AConcreteMethPropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AConcreteMethPropdef___replace_child[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::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;
@@ -10294,7 +12396,7 @@ 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 = 1841;
+  fra.me.line = 2264;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -10306,7 +12408,7 @@ 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:1843 */
+  /* parser/parser_prod.nit:2266 */
   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)) {
@@ -10321,7 +12423,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1844 */
+    /* parser/parser_prod.nit:2267 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10336,28 +12438,28 @@ 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:1845 */
+      /* parser/parser_prod.nit:2268 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1845);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2268);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1846 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2269 */
       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, 1846);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2269);
       }
-      /* parser/parser_prod.nit:1847 */
+      /* parser/parser_prod.nit:2270 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1849 */
+      /* parser/parser_prod.nit:2272 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1851 */
+    /* parser/parser_prod.nit:2274 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1853 */
+  /* parser/parser_prod.nit:2276 */
   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)) {
@@ -10372,7 +12474,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1854 */
+    /* parser/parser_prod.nit:2277 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10387,28 +12489,28 @@ 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:1855 */
+      /* parser/parser_prod.nit:2278 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1855);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2278);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1856 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2279 */
       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, 1856);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2279);
       }
-      /* parser/parser_prod.nit:1857 */
+      /* parser/parser_prod.nit:2280 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1859 */
+      /* parser/parser_prod.nit:2282 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1861 */
+    /* parser/parser_prod.nit:2284 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1863 */
+  /* parser/parser_prod.nit:2286 */
   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)) {
@@ -10423,7 +12525,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1864 */
+    /* parser/parser_prod.nit:2287 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10438,28 +12540,28 @@ 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:1865 */
+      /* parser/parser_prod.nit:2288 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1865);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2288);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1866 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2289 */
       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, 1866);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2289);
       }
-      /* parser/parser_prod.nit:1867 */
+      /* parser/parser_prod.nit:2290 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1869 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1869);
+      /* parser/parser_prod.nit:2292 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2292);
     }
-    /* parser/parser_prod.nit:1871 */
+    /* parser/parser_prod.nit:2294 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1873 */
+  /* parser/parser_prod.nit:2296 */
   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)) {
@@ -10474,7 +12576,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1874 */
+    /* parser/parser_prod.nit:2297 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10489,28 +12591,28 @@ 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:1875 */
+      /* parser/parser_prod.nit:2298 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1875);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2298);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1876 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2299 */
       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, 1876);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2299);
       }
-      /* parser/parser_prod.nit:1877 */
+      /* parser/parser_prod.nit:2300 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1879 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1879);
+      /* parser/parser_prod.nit:2302 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2302);
     }
-    /* parser/parser_prod.nit:1881 */
+    /* parser/parser_prod.nit:2304 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1883 */
+  /* parser/parser_prod.nit:2306 */
   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)) {
@@ -10525,7 +12627,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1884 */
+    /* parser/parser_prod.nit:2307 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10540,28 +12642,28 @@ 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:1885 */
+      /* parser/parser_prod.nit:2308 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1885);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2308);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1886 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2309 */
       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, 1886);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2309);
       }
-      /* parser/parser_prod.nit:1887 */
+      /* parser/parser_prod.nit:2310 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1889 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1889);
+      /* parser/parser_prod.nit:2312 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2312);
     }
-    /* parser/parser_prod.nit:1891 */
+    /* parser/parser_prod.nit:2314 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1893 */
+  /* parser/parser_prod.nit:2316 */
   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)) {
@@ -10576,7 +12678,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1894 */
+    /* parser/parser_prod.nit:2317 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10591,28 +12693,28 @@ 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:1895 */
+      /* parser/parser_prod.nit:2318 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1895);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2318);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1896 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2319 */
       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, 1896);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2319);
       }
-      /* parser/parser_prod.nit:1897 */
+      /* parser/parser_prod.nit:2320 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1899 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1899);
+      /* parser/parser_prod.nit:2322 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2322);
     }
-    /* parser/parser_prod.nit:1901 */
+    /* parser/parser_prod.nit:2324 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1903 */
+  /* parser/parser_prod.nit:2326 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -10627,7 +12729,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1904 */
+    /* parser/parser_prod.nit:2327 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10642,28 +12744,28 @@ 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:1905 */
+      /* parser/parser_prod.nit:2328 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1905);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2328);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1906 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2329 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1906);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2329);
       }
-      /* parser/parser_prod.nit:1907 */
+      /* parser/parser_prod.nit:2330 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1909 */
+      /* parser/parser_prod.nit:2332 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1911 */
+    /* parser/parser_prod.nit:2334 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1913 */
+  /* parser/parser_prod.nit:2336 */
   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)) {
@@ -10678,7 +12780,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1914 */
+    /* parser/parser_prod.nit:2337 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10693,32 +12795,316 @@ 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:1915 */
+      /* parser/parser_prod.nit:2338 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1915);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2338);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1916 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2339 */
       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, 1916);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2339);
       }
-      /* parser/parser_prod.nit:1917 */
+      /* parser/parser_prod.nit:2340 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1919 */
+      /* parser/parser_prod.nit:2342 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1921 */
+    /* parser/parser_prod.nit:2344 */
     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)";
+static const char LOCATE_parser___parser_prod___AConcreteMethPropdef___n_doc__eq[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::APropdef::n_doc=)";
+void parser___parser_prod___AConcreteMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2348;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___n_doc__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:2350 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2351 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2352 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2352);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteMethPropdef___n_kwredef__eq[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::AMethPropdef::n_kwredef=)";
+void parser___parser_prod___AConcreteMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2355;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___n_kwredef__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:2357 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2358 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2359 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2359);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteMethPropdef___n_visibility__eq[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::AMethPropdef::n_visibility=)";
+void parser___parser_prod___AConcreteMethPropdef___n_visibility__eq(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 = 2362;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___n_visibility__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:2364 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2365 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2365);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteMethPropdef___n_kwmeth__eq[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::AConcreteMethPropdef::n_kwmeth=)";
+void parser___parser_prod___AConcreteMethPropdef___n_kwmeth__eq(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 = 2367;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___n_kwmeth__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:2369 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2370 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2370);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteMethPropdef___n_methid__eq[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::AMethPropdef::n_methid=)";
+void parser___parser_prod___AConcreteMethPropdef___n_methid__eq(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 = 2372;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___n_methid__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:2374 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2375 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2375);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteMethPropdef___n_signature__eq[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::AMethPropdef::n_signature=)";
+void parser___parser_prod___AConcreteMethPropdef___n_signature__eq(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 = 2377;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___n_signature__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:2379 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2380 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2380);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteMethPropdef___n_annotations__eq[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AConcreteMethPropdef___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2382;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___n_annotations__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:2384 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2385 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2386 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2386);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteMethPropdef___n_block__eq[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::AConcreteMethPropdef::n_block=)";
+void parser___parser_prod___AConcreteMethPropdef___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2389;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___n_block__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:2391 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2392 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2393 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2393);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteMethPropdef___visit_all[] = "parser_prod::AConcreteMethPropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -10726,7 +13112,7 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(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 = 1925;
+  fra.me.line = 2398;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -10737,9 +13123,9 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1925 */
+  /* parser/parser_prod.nit:2398 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1927 */
+  /* parser/parser_prod.nit:2400 */
   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)) {
@@ -10755,16 +13141,16 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1928 */
+    /* parser/parser_prod.nit:2401 */
     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, 1928);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2401);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1930 */
+  /* parser/parser_prod.nit:2403 */
   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)) {
@@ -10780,28 +13166,28 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1931 */
+    /* parser/parser_prod.nit:2404 */
     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, 1931);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2404);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1933 */
+  /* parser/parser_prod.nit:2406 */
   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:1934 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2407 */
   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:1935 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2408 */
   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:1936 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2409 */
   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:1937 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2410 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10817,16 +13203,16 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1938 */
+    /* parser/parser_prod.nit:2411 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1938);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2411);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1940 */
+  /* parser/parser_prod.nit:2413 */
   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)) {
@@ -10842,27 +13228,27 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1941 */
+    /* parser/parser_prod.nit:2414 */
     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, 1941);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2414);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteInitPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos49]) return;
+  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 = 1946;
+  fra.me.line = 2419;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -10870,20 +13256,20 @@ void parser___parser_prod___AConcreteInitPropdef___empty_init(val_t p0, int* ini
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos49] = 1;
+  init_table[itpos48] = 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, val_t p8, int* init_table){
-  int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteInitPropdef].i;
+  int itpos49 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteInitPropdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos50]) return;
+  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 = 1948;
+  fra.me.line = 2421;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -10907,13 +13293,13 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
-  /* parser/parser_prod.nit:1948 */
+  /* parser/parser_prod.nit:2421 */
   fra.me.REG[9] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1959 */
+  /* parser/parser_prod.nit:2432 */
   CALL_parser___parser_prod___AConcreteInitPropdef___empty_init(fra.me.REG[9])(fra.me.REG[9], init_table);
-  /* parser/parser_prod.nit:1960 */
+  /* parser/parser_prod.nit:2433 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[9]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1961 */
+  /* parser/parser_prod.nit:2434 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10928,16 +13314,16 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1962 */
+    /* parser/parser_prod.nit:2435 */
     REGB0 = TAG_Bool(fra.me.REG[1]==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, 2435);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[9]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1964 */
+  /* parser/parser_prod.nit:2437 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[9]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1965 */
+  /* parser/parser_prod.nit:2438 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10952,42 +13338,42 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1966 */
+    /* parser/parser_prod.nit:2439 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1966);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2439);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[9]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1968 */
+  /* parser/parser_prod.nit:2441 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1968);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2441);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[9]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1969 */
+  /* parser/parser_prod.nit:2442 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1969);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2442);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[9]);
-  /* parser/parser_prod.nit:1970 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[9]);
+  /* parser/parser_prod.nit:2443 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1970);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2443);
   }
   ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[9]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1971 */
+  /* parser/parser_prod.nit:2444 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1971);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2444);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[9]);
-  /* parser/parser_prod.nit:1972 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[9]);
+  /* parser/parser_prod.nit:2445 */
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[9]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1973 */
+  /* parser/parser_prod.nit:2446 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11002,29 +13388,29 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1974 */
+    /* parser/parser_prod.nit:2447 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1974);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2447);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[9]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1976 */
+  /* parser/parser_prod.nit:2449 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1976);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2449);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[9]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1977 */
+  /* parser/parser_prod.nit:2450 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1977);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2450);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[9]);
-  /* parser/parser_prod.nit:1978 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[9]);
+  /* parser/parser_prod.nit:2451 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[9]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1979 */
+  /* parser/parser_prod.nit:2452 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11039,16 +13425,16 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1980 */
+    /* parser/parser_prod.nit:2453 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1980);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2453);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[9]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1982 */
+  /* parser/parser_prod.nit:2455 */
   ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[9]) = fra.me.REG[8];
-  /* parser/parser_prod.nit:1983 */
+  /* parser/parser_prod.nit:2456 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11063,18 +13449,18 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1984 */
+    /* parser/parser_prod.nit:2457 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1984);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2457);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos50] = 1;
+  init_table[itpos49] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AConcreteInitPropdef___replace_child[] = "parser_prod::AConcreteInitPropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AConcreteInitPropdef___replace_child[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::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;
@@ -11082,7 +13468,7 @@ 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 = 1988;
+  fra.me.line = 2461;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11094,7 +13480,7 @@ 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:1990 */
+  /* parser/parser_prod.nit:2463 */
   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)) {
@@ -11109,7 +13495,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1991 */
+    /* parser/parser_prod.nit:2464 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11124,28 +13510,28 @@ 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:1992 */
+      /* parser/parser_prod.nit:2465 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1992);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2465);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1993 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2466 */
       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, 1993);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2466);
       }
-      /* parser/parser_prod.nit:1994 */
+      /* parser/parser_prod.nit:2467 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1996 */
+      /* parser/parser_prod.nit:2469 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1998 */
+    /* parser/parser_prod.nit:2471 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2000 */
+  /* parser/parser_prod.nit:2473 */
   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)) {
@@ -11160,7 +13546,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2001 */
+    /* parser/parser_prod.nit:2474 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11175,28 +13561,28 @@ 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:2002 */
+      /* parser/parser_prod.nit:2475 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2002);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2475);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2003 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2476 */
       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, 2003);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2476);
       }
-      /* parser/parser_prod.nit:2004 */
+      /* parser/parser_prod.nit:2477 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2006 */
+      /* parser/parser_prod.nit:2479 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2008 */
+    /* parser/parser_prod.nit:2481 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2010 */
+  /* parser/parser_prod.nit:2483 */
   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)) {
@@ -11211,7 +13597,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2011 */
+    /* parser/parser_prod.nit:2484 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11226,32 +13612,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:2012 */
+      /* parser/parser_prod.nit:2485 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2012);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2485);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2013 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2486 */
       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, 2013);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2486);
       }
-      /* parser/parser_prod.nit:2014 */
+      /* parser/parser_prod.nit:2487 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2016 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2016);
+      /* parser/parser_prod.nit:2489 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2489);
     }
-    /* parser/parser_prod.nit:2018 */
+    /* parser/parser_prod.nit:2491 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2020 */
+  /* parser/parser_prod.nit:2493 */
   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, 2020);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 2493);
   }
   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]));
@@ -11261,7 +13647,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2021 */
+    /* parser/parser_prod.nit:2494 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11276,28 +13662,28 @@ 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:2022 */
+      /* parser/parser_prod.nit:2495 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2022);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2495);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2023 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2496 */
       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, 2023);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2496);
       }
-      /* parser/parser_prod.nit:2024 */
+      /* parser/parser_prod.nit:2497 */
       ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2026 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2026);
+      /* parser/parser_prod.nit:2499 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2499);
     }
-    /* parser/parser_prod.nit:2028 */
+    /* parser/parser_prod.nit:2501 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2030 */
+  /* parser/parser_prod.nit:2503 */
   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)) {
@@ -11312,7 +13698,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2031 */
+    /* parser/parser_prod.nit:2504 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11327,28 +13713,28 @@ 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:2032 */
+      /* parser/parser_prod.nit:2505 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2032);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2505);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2033 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2506 */
       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, 2033);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2506);
       }
-      /* parser/parser_prod.nit:2034 */
+      /* parser/parser_prod.nit:2507 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2036 */
+      /* parser/parser_prod.nit:2509 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2038 */
+    /* parser/parser_prod.nit:2511 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2040 */
+  /* parser/parser_prod.nit:2513 */
   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)) {
@@ -11363,7 +13749,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2041 */
+    /* parser/parser_prod.nit:2514 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11378,28 +13764,28 @@ 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:2042 */
+      /* parser/parser_prod.nit:2515 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2042);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2515);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2043 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2516 */
       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, 2043);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2516);
       }
-      /* parser/parser_prod.nit:2044 */
+      /* parser/parser_prod.nit:2517 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2046 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2046);
+      /* parser/parser_prod.nit:2519 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2519);
     }
-    /* parser/parser_prod.nit:2048 */
+    /* parser/parser_prod.nit:2521 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2050 */
+  /* parser/parser_prod.nit:2523 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11414,7 +13800,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2051 */
+    /* parser/parser_prod.nit:2524 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11429,28 +13815,28 @@ 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:2052 */
+      /* parser/parser_prod.nit:2525 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2052);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2525);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2053 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2526 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2053);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2526);
       }
-      /* parser/parser_prod.nit:2054 */
+      /* parser/parser_prod.nit:2527 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2056 */
+      /* parser/parser_prod.nit:2529 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2058 */
+    /* parser/parser_prod.nit:2531 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2060 */
+  /* parser/parser_prod.nit:2533 */
   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)) {
@@ -11465,7 +13851,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2061 */
+    /* parser/parser_prod.nit:2534 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11480,32 +13866,328 @@ 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:2062 */
+      /* parser/parser_prod.nit:2535 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2062);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2535);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2063 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2536 */
       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, 2063);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2536);
       }
-      /* parser/parser_prod.nit:2064 */
+      /* parser/parser_prod.nit:2537 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2066 */
+      /* parser/parser_prod.nit:2539 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2068 */
+    /* parser/parser_prod.nit:2541 */
     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)";
+static const char LOCATE_parser___parser_prod___AConcreteInitPropdef___n_doc__eq[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::APropdef::n_doc=)";
+void parser___parser_prod___AConcreteInitPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2545;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___n_doc__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:2547 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2548 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2549 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2549);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteInitPropdef___n_kwredef__eq[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::AMethPropdef::n_kwredef=)";
+void parser___parser_prod___AConcreteInitPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2552;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___n_kwredef__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:2554 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2555 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2556 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2556);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteInitPropdef___n_visibility__eq[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::AMethPropdef::n_visibility=)";
+void parser___parser_prod___AConcreteInitPropdef___n_visibility__eq(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 = 2559;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___n_visibility__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:2561 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2562 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2562);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteInitPropdef___n_kwinit__eq[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::AConcreteInitPropdef::n_kwinit=)";
+void parser___parser_prod___AConcreteInitPropdef___n_kwinit__eq(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 = 2564;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___n_kwinit__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:2566 */
+  ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2567 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteInitPropdef___n_methid__eq[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::AMethPropdef::n_methid=)";
+void parser___parser_prod___AConcreteInitPropdef___n_methid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2569;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___n_methid__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:2571 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2572 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2573 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2573);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteInitPropdef___n_signature__eq[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::AMethPropdef::n_signature=)";
+void parser___parser_prod___AConcreteInitPropdef___n_signature__eq(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 = 2576;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___n_signature__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:2578 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2579 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2579);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteInitPropdef___n_annotations__eq[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AConcreteInitPropdef___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2581;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___n_annotations__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:2583 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2584 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2585 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2585);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteInitPropdef___n_block__eq[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::AConcreteMethPropdef::n_block=)";
+void parser___parser_prod___AConcreteInitPropdef___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2588;
+  fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___n_block__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:2590 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2591 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2592 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2592);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AConcreteInitPropdef___visit_all[] = "parser_prod::AConcreteInitPropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -11513,7 +14195,7 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(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 = 2072;
+  fra.me.line = 2597;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11524,9 +14206,9 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2072 */
+  /* parser/parser_prod.nit:2597 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2074 */
+  /* parser/parser_prod.nit:2599 */
   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)) {
@@ -11542,16 +14224,16 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2075 */
+    /* parser/parser_prod.nit:2600 */
     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, 2075);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2600);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2077 */
+  /* parser/parser_prod.nit:2602 */
   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)) {
@@ -11567,27 +14249,27 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2078 */
+    /* parser/parser_prod.nit:2603 */
     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, 2078);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2603);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2080 */
+  /* parser/parser_prod.nit:2605 */
   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:2081 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2606 */
   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, 2081);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 2606);
   }
   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:2082 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2607 */
   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)) {
@@ -11603,19 +14285,19 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2083 */
+    /* parser/parser_prod.nit:2608 */
     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, 2083);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2608);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2085 */
+  /* parser/parser_prod.nit:2610 */
   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:2086 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2611 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11631,16 +14313,16 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2087 */
+    /* parser/parser_prod.nit:2612 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2087);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2612);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2089 */
+  /* parser/parser_prod.nit:2614 */
   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)) {
@@ -11656,27 +14338,27 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2090 */
+    /* parser/parser_prod.nit:2615 */
     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, 2090);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2615);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternInitPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos51]) return;
+  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 = 2095;
+  fra.me.line = 2620;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -11684,20 +14366,20 @@ void parser___parser_prod___AExternInitPropdef___empty_init(val_t p0, int* init_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos51] = 1;
+  init_table[itpos50] = 1;
   return;
 }
 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;
+  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternInitPropdef].i;
   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;
+  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 = 2097;
+  fra.me.line = 2622;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -11723,13 +14405,13 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
   fra.me.REG[9] = p9;
-  /* parser/parser_prod.nit:2097 */
+  /* parser/parser_prod.nit:2622 */
   fra.me.REG[10] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2109 */
+  /* parser/parser_prod.nit:2634 */
   CALL_parser___parser_prod___AExternInitPropdef___empty_init(fra.me.REG[10])(fra.me.REG[10], init_table);
-  /* parser/parser_prod.nit:2110 */
+  /* parser/parser_prod.nit:2635 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[10]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2111 */
+  /* parser/parser_prod.nit:2636 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11744,16 +14426,16 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2112 */
+    /* parser/parser_prod.nit:2637 */
     REGB0 = TAG_Bool(fra.me.REG[1]==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, 2637);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[10]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:2114 */
+  /* parser/parser_prod.nit:2639 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[10]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2115 */
+  /* parser/parser_prod.nit:2640 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11768,42 +14450,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:2116 */
+    /* parser/parser_prod.nit:2641 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2116);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2641);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[10]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:2118 */
+  /* parser/parser_prod.nit:2643 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2118);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2643);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[10]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:2119 */
+  /* parser/parser_prod.nit:2644 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2119);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2644);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[10]);
-  /* parser/parser_prod.nit:2120 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[10]);
+  /* parser/parser_prod.nit:2645 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2120);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2645);
   }
   ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[10]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:2121 */
+  /* parser/parser_prod.nit:2646 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2121);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2646);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[10]);
-  /* parser/parser_prod.nit:2122 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[10]);
+  /* parser/parser_prod.nit:2647 */
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[10]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:2123 */
+  /* parser/parser_prod.nit:2648 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11818,29 +14500,29 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2124 */
+    /* parser/parser_prod.nit:2649 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2124);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2649);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[10]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:2126 */
+  /* parser/parser_prod.nit:2651 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2126);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2651);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[10]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:2127 */
+  /* parser/parser_prod.nit:2652 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2127);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2652);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[10]);
-  /* parser/parser_prod.nit:2128 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[10]);
+  /* parser/parser_prod.nit:2653 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[10]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:2129 */
+  /* parser/parser_prod.nit:2654 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11855,16 +14537,16 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2130 */
+    /* parser/parser_prod.nit:2655 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2130);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2655);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[10]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:2132 */
+  /* parser/parser_prod.nit:2657 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[10]) = fra.me.REG[8];
-  /* parser/parser_prod.nit:2133 */
+  /* parser/parser_prod.nit:2658 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11879,16 +14561,16 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2134 */
+    /* parser/parser_prod.nit:2659 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2134);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2659);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[10]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:2136 */
+  /* parser/parser_prod.nit:2661 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[10]) = fra.me.REG[9];
-  /* parser/parser_prod.nit:2137 */
+  /* parser/parser_prod.nit:2662 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11903,18 +14585,18 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2138 */
+    /* parser/parser_prod.nit:2663 */
     REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2138);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2663);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[10]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos51] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AExternInitPropdef___replace_child[] = "parser_prod::AExternInitPropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AExternInitPropdef___replace_child[] = "parser_prod::AExternInitPropdef::(parser_nodes::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;
@@ -11922,7 +14604,7 @@ 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 = 2142;
+  fra.me.line = 2667;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11934,7 +14616,7 @@ 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:2144 */
+  /* parser/parser_prod.nit:2669 */
   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)) {
@@ -11949,7 +14631,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2145 */
+    /* parser/parser_prod.nit:2670 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11964,28 +14646,28 @@ 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:2146 */
+      /* parser/parser_prod.nit:2671 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2146);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2671);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2147 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2672 */
       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, 2147);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2672);
       }
-      /* parser/parser_prod.nit:2148 */
+      /* parser/parser_prod.nit:2673 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2150 */
+      /* parser/parser_prod.nit:2675 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2152 */
+    /* parser/parser_prod.nit:2677 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2154 */
+  /* parser/parser_prod.nit:2679 */
   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)) {
@@ -12000,7 +14682,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2155 */
+    /* parser/parser_prod.nit:2680 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12015,28 +14697,28 @@ 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:2156 */
+      /* parser/parser_prod.nit:2681 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2156);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2681);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2157 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2682 */
       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, 2157);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2682);
       }
-      /* parser/parser_prod.nit:2158 */
+      /* parser/parser_prod.nit:2683 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2160 */
+      /* parser/parser_prod.nit:2685 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2162 */
+    /* parser/parser_prod.nit:2687 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2164 */
+  /* parser/parser_prod.nit:2689 */
   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)) {
@@ -12051,7 +14733,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2165 */
+    /* parser/parser_prod.nit:2690 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12066,32 +14748,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:2166 */
+      /* parser/parser_prod.nit:2691 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2166);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2691);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2167 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2692 */
       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, 2167);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2692);
       }
-      /* parser/parser_prod.nit:2168 */
+      /* parser/parser_prod.nit:2693 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2170 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2170);
+      /* parser/parser_prod.nit:2695 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2695);
     }
-    /* parser/parser_prod.nit:2172 */
+    /* parser/parser_prod.nit:2697 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2174 */
+  /* parser/parser_prod.nit:2699 */
   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, 2174);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 2699);
   }
   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]));
@@ -12101,7 +14783,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2175 */
+    /* parser/parser_prod.nit:2700 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12116,28 +14798,28 @@ 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:2176 */
+      /* parser/parser_prod.nit:2701 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2176);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2701);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2177 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2702 */
       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, 2177);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2702);
       }
-      /* parser/parser_prod.nit:2178 */
+      /* parser/parser_prod.nit:2703 */
       ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2180 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2180);
+      /* parser/parser_prod.nit:2705 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2705);
     }
-    /* parser/parser_prod.nit:2182 */
+    /* parser/parser_prod.nit:2707 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2184 */
+  /* parser/parser_prod.nit:2709 */
   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)) {
@@ -12152,7 +14834,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2185 */
+    /* parser/parser_prod.nit:2710 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12167,28 +14849,28 @@ 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:2186 */
+      /* parser/parser_prod.nit:2711 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2186);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2711);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2187 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2712 */
       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, 2187);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2712);
       }
-      /* parser/parser_prod.nit:2188 */
+      /* parser/parser_prod.nit:2713 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2190 */
+      /* parser/parser_prod.nit:2715 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2192 */
+    /* parser/parser_prod.nit:2717 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2194 */
+  /* parser/parser_prod.nit:2719 */
   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)) {
@@ -12203,7 +14885,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2195 */
+    /* parser/parser_prod.nit:2720 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12218,28 +14900,28 @@ 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:2196 */
+      /* parser/parser_prod.nit:2721 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2196);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2721);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2197 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2722 */
       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, 2197);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2722);
       }
-      /* parser/parser_prod.nit:2198 */
+      /* parser/parser_prod.nit:2723 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2200 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2200);
+      /* parser/parser_prod.nit:2725 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2725);
     }
-    /* parser/parser_prod.nit:2202 */
+    /* parser/parser_prod.nit:2727 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2204 */
+  /* parser/parser_prod.nit:2729 */
   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)) {
@@ -12254,7 +14936,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2205 */
+    /* parser/parser_prod.nit:2730 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12269,28 +14951,28 @@ 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:2206 */
+      /* parser/parser_prod.nit:2731 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2206);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2731);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2207 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2732 */
       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, 2207);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2732);
       }
-      /* parser/parser_prod.nit:2208 */
+      /* parser/parser_prod.nit:2733 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2210 */
+      /* parser/parser_prod.nit:2735 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2212 */
+    /* parser/parser_prod.nit:2737 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2214 */
+  /* parser/parser_prod.nit:2739 */
   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)) {
@@ -12305,7 +14987,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2215 */
+    /* parser/parser_prod.nit:2740 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12320,28 +15002,28 @@ 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:2216 */
+      /* parser/parser_prod.nit:2741 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2216);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2741);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2217 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2742 */
       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, 2217);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2742);
       }
-      /* parser/parser_prod.nit:2218 */
+      /* parser/parser_prod.nit:2743 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2220 */
+      /* parser/parser_prod.nit:2745 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2222 */
+    /* parser/parser_prod.nit:2747 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2224 */
+  /* parser/parser_prod.nit:2749 */
   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)) {
@@ -12356,7 +15038,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2225 */
+    /* parser/parser_prod.nit:2750 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12371,32 +15053,372 @@ 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:2226 */
+      /* parser/parser_prod.nit:2751 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2226);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2751);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2227 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2752 */
       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, 2227);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2752);
       }
-      /* parser/parser_prod.nit:2228 */
+      /* parser/parser_prod.nit:2753 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2230 */
+      /* parser/parser_prod.nit:2755 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2232 */
+    /* parser/parser_prod.nit:2757 */
     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)";
+static const char LOCATE_parser___parser_prod___AExternInitPropdef___n_doc__eq[] = "parser_prod::AExternInitPropdef::(parser_nodes::APropdef::n_doc=)";
+void parser___parser_prod___AExternInitPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2761;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___n_doc__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:2763 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2764 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2765 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2765);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AExternInitPropdef___n_kwredef__eq[] = "parser_prod::AExternInitPropdef::(parser_nodes::AMethPropdef::n_kwredef=)";
+void parser___parser_prod___AExternInitPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2768;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___n_kwredef__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:2770 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2771 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2772 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2772);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AExternInitPropdef___n_visibility__eq[] = "parser_prod::AExternInitPropdef::(parser_nodes::AMethPropdef::n_visibility=)";
+void parser___parser_prod___AExternInitPropdef___n_visibility__eq(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 = 2775;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___n_visibility__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:2777 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2778 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2778);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AExternInitPropdef___n_kwnew__eq[] = "parser_prod::AExternInitPropdef::(parser_nodes::AExternInitPropdef::n_kwnew=)";
+void parser___parser_prod___AExternInitPropdef___n_kwnew__eq(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 = 2780;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___n_kwnew__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:2782 */
+  ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2783 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AExternInitPropdef___n_methid__eq[] = "parser_prod::AExternInitPropdef::(parser_nodes::AMethPropdef::n_methid=)";
+void parser___parser_prod___AExternInitPropdef___n_methid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2785;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___n_methid__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:2787 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2788 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2789 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2789);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AExternInitPropdef___n_signature__eq[] = "parser_prod::AExternInitPropdef::(parser_nodes::AMethPropdef::n_signature=)";
+void parser___parser_prod___AExternInitPropdef___n_signature__eq(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 = 2792;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___n_signature__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:2794 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2795 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2795);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AExternInitPropdef___n_extern__eq[] = "parser_prod::AExternInitPropdef::(parser_nodes::AExternPropdef::n_extern=)";
+void parser___parser_prod___AExternInitPropdef___n_extern__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2797;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___n_extern__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:2799 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2800 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2801 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2801);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AExternInitPropdef___n_extern_calls__eq[] = "parser_prod::AExternInitPropdef::(parser_nodes::AExternPropdef::n_extern_calls=)";
+void parser___parser_prod___AExternInitPropdef___n_extern_calls__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2804;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___n_extern_calls__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:2806 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2807 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2808 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2808);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AExternInitPropdef___n_extern_code_block__eq[] = "parser_prod::AExternInitPropdef::(parser_nodes::AExternPropdef::n_extern_code_block=)";
+void parser___parser_prod___AExternInitPropdef___n_extern_code_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2811;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___n_extern_code_block__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:2813 */
+  ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2814 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2815 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2815);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AExternInitPropdef___visit_all[] = "parser_prod::AExternInitPropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -12404,7 +15426,7 @@ void parser___parser_prod___AExternInitPropdef___visit_all(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 = 2236;
+  fra.me.line = 2820;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12415,9 +15437,9 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2236 */
+  /* parser/parser_prod.nit:2820 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2238 */
+  /* parser/parser_prod.nit:2822 */
   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)) {
@@ -12433,16 +15455,16 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2239 */
+    /* parser/parser_prod.nit:2823 */
     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, 2239);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2823);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2241 */
+  /* parser/parser_prod.nit:2825 */
   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)) {
@@ -12458,27 +15480,27 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2242 */
+    /* parser/parser_prod.nit:2826 */
     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, 2242);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2826);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2244 */
+  /* parser/parser_prod.nit:2828 */
   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:2245 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2829 */
   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, 2245);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 2829);
   }
   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:2246 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2830 */
   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)) {
@@ -12494,19 +15516,19 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2247 */
+    /* parser/parser_prod.nit:2831 */
     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, 2247);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2831);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2249 */
+  /* parser/parser_prod.nit:2833 */
   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:2250 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2834 */
   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)) {
@@ -12522,16 +15544,16 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2251 */
+    /* parser/parser_prod.nit:2835 */
     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, 2251);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2835);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2253 */
+  /* parser/parser_prod.nit:2837 */
   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)) {
@@ -12547,16 +15569,16 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2254 */
+    /* parser/parser_prod.nit:2838 */
     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, 2254);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2838);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2256 */
+  /* parser/parser_prod.nit:2840 */
   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)) {
@@ -12572,27 +15594,27 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2257 */
+    /* parser/parser_prod.nit:2841 */
     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, 2257);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2841);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMainMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos53]) return;
+  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 = 2262;
+  fra.me.line = 2846;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -12600,20 +15622,20 @@ void parser___parser_prod___AMainMethPropdef___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos53] = 1;
+  init_table[itpos52] = 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;
+  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMainMethPropdef].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[itpos54]) return;
+  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 = 2264;
+  fra.me.line = 2848;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -12624,11 +15646,11 @@ void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2269 */
+  /* parser/parser_prod.nit:2853 */
   CALL_parser___parser_prod___AMainMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:2270 */
+  /* parser/parser_prod.nit:2854 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2271 */
+  /* parser/parser_prod.nit:2855 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -12643,16 +15665,16 @@ 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:2272 */
+    /* parser/parser_prod.nit:2856 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2272);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2856);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:2274 */
+  /* parser/parser_prod.nit:2858 */
   ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2275 */
+  /* parser/parser_prod.nit:2859 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -12667,18 +15689,18 @@ 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:2276 */
+    /* parser/parser_prod.nit:2860 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2276);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2860);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos54] = 1;
+  init_table[itpos53] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AMainMethPropdef___replace_child[] = "parser_prod::AMainMethPropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AMainMethPropdef___replace_child[] = "parser_prod::AMainMethPropdef::(parser_nodes::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;
@@ -12686,7 +15708,7 @@ 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 = 2280;
+  fra.me.line = 2864;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12698,7 +15720,7 @@ 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:2282 */
+  /* parser/parser_prod.nit:2866 */
   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)) {
@@ -12713,7 +15735,7 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2283 */
+    /* parser/parser_prod.nit:2867 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12728,28 +15750,28 @@ 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:2284 */
+      /* parser/parser_prod.nit:2868 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2284);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2868);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2285 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2869 */
       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, 2285);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2869);
       }
-      /* parser/parser_prod.nit:2286 */
+      /* parser/parser_prod.nit:2870 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2288 */
+      /* parser/parser_prod.nit:2872 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2290 */
+    /* parser/parser_prod.nit:2874 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2292 */
+  /* parser/parser_prod.nit:2876 */
   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)) {
@@ -12764,7 +15786,7 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2293 */
+    /* parser/parser_prod.nit:2877 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12779,32 +15801,120 @@ 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:2294 */
+      /* parser/parser_prod.nit:2878 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2294);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2878);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2295 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2879 */
       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, 2295);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2879);
       }
-      /* parser/parser_prod.nit:2296 */
+      /* parser/parser_prod.nit:2880 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2298 */
+      /* parser/parser_prod.nit:2882 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2300 */
+    /* parser/parser_prod.nit:2884 */
     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)";
+static const char LOCATE_parser___parser_prod___AMainMethPropdef___n_kwredef__eq[] = "parser_prod::AMainMethPropdef::(parser_nodes::AMethPropdef::n_kwredef=)";
+void parser___parser_prod___AMainMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2888;
+  fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___n_kwredef__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:2890 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2891 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2892 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2892);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AMainMethPropdef___n_block__eq[] = "parser_prod::AMainMethPropdef::(parser_nodes::AConcreteMethPropdef::n_block=)";
+void parser___parser_prod___AMainMethPropdef___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 2895;
+  fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___n_block__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:2897 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2898 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:2899 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2899);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AMainMethPropdef___visit_all[] = "parser_prod::AMainMethPropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -12812,7 +15922,7 @@ void parser___parser_prod___AMainMethPropdef___visit_all(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 = 2304;
+  fra.me.line = 2904;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12823,9 +15933,9 @@ void parser___parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2304 */
+  /* parser/parser_prod.nit:2904 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2306 */
+  /* parser/parser_prod.nit:2906 */
   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)) {
@@ -12841,16 +15951,16 @@ void parser___parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2307 */
+    /* parser/parser_prod.nit:2907 */
     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, 2307);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2907);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2309 */
+  /* parser/parser_prod.nit:2909 */
   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)) {
@@ -12866,27 +15976,27 @@ void parser___parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2310 */
+    /* parser/parser_prod.nit:2910 */
     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, 2310);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2910);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos54 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypePropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos55]) return;
+  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 = 2315;
+  fra.me.line = 2915;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -12894,20 +16004,20 @@ void parser___parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos55] = 1;
+  init_table[itpos54] = 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, val_t p7, int* init_table){
-  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypePropdef].i;
+  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypePropdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos56]) return;
+  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 = 2317;
+  fra.me.line = 2917;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___init_atypepropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -12929,13 +16039,13 @@ void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1,
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
-  /* parser/parser_prod.nit:2317 */
+  /* parser/parser_prod.nit:2917 */
   fra.me.REG[8] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2327 */
+  /* parser/parser_prod.nit:2927 */
   CALL_parser___parser_prod___ATypePropdef___empty_init(fra.me.REG[8])(fra.me.REG[8], init_table);
-  /* parser/parser_prod.nit:2328 */
+  /* parser/parser_prod.nit:2928 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[8]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2329 */
+  /* parser/parser_prod.nit:2929 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -12950,16 +16060,16 @@ 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:2330 */
+    /* parser/parser_prod.nit:2930 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2330);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2930);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
   }
-  /* parser/parser_prod.nit:2332 */
+  /* parser/parser_prod.nit:2932 */
   ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[8]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2333 */
+  /* parser/parser_prod.nit:2933 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -12974,68 +16084,68 @@ 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:2334 */
+    /* parser/parser_prod.nit:2934 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2334);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2934);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
   }
-  /* parser/parser_prod.nit:2336 */
+  /* parser/parser_prod.nit:2936 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2336);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2936);
   }
   ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[8]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:2337 */
+  /* parser/parser_prod.nit:2937 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2337);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2937);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
-  /* parser/parser_prod.nit:2338 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser_prod.nit:2938 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2338);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2938);
   }
   ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[8]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:2339 */
+  /* parser/parser_prod.nit:2939 */
   REGB0 = TAG_Bool(fra.me.REG[4]==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, 2939);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
-  /* parser/parser_prod.nit:2340 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
+  /* parser/parser_prod.nit:2940 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2340);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2940);
   }
   ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[8]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:2341 */
+  /* parser/parser_prod.nit:2941 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2341);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2941);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
-  /* parser/parser_prod.nit:2342 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
+  /* parser/parser_prod.nit:2942 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2342);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2942);
   }
   ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[8]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:2343 */
+  /* parser/parser_prod.nit:2943 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2343);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2943);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
-  /* parser/parser_prod.nit:2344 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
+  /* parser/parser_prod.nit:2944 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[8]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:2345 */
+  /* parser/parser_prod.nit:2945 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -13050,18 +16160,18 @@ 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:2346 */
+    /* parser/parser_prod.nit:2946 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2346);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2946);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos56] = 1;
+  init_table[itpos55] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ATypePropdef___replace_child[] = "parser_prod::ATypePropdef::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ATypePropdef___replace_child[] = "parser_prod::ATypePropdef::(parser_nodes::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;
@@ -13069,7 +16179,7 @@ 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 = 2350;
+  fra.me.line = 2950;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13081,7 +16191,7 @@ 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:2352 */
+  /* parser/parser_prod.nit:2952 */
   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)) {
@@ -13096,7 +16206,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2353 */
+    /* parser/parser_prod.nit:2953 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13111,28 +16221,28 @@ 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:2354 */
+      /* parser/parser_prod.nit:2954 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2354);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2954);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2355 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2955 */
       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, 2355);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2955);
       }
-      /* parser/parser_prod.nit:2356 */
+      /* parser/parser_prod.nit:2956 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2358 */
+      /* parser/parser_prod.nit:2958 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2360 */
+    /* parser/parser_prod.nit:2960 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2362 */
+  /* parser/parser_prod.nit:2962 */
   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)) {
@@ -13147,7 +16257,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2363 */
+    /* parser/parser_prod.nit:2963 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13162,32 +16272,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:2364 */
+      /* parser/parser_prod.nit:2964 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2364);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2964);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2365 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2965 */
       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, 2365);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2965);
       }
-      /* parser/parser_prod.nit:2366 */
+      /* parser/parser_prod.nit:2966 */
       ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2368 */
+      /* parser/parser_prod.nit:2968 */
       ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2370 */
+    /* parser/parser_prod.nit:2970 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2372 */
+  /* parser/parser_prod.nit:2972 */
   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, 2372);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 2972);
   }
   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]));
@@ -13197,7 +16307,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2373 */
+    /* parser/parser_prod.nit:2973 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13212,32 +16322,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:2374 */
+      /* parser/parser_prod.nit:2974 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2374);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2974);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2375 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2975 */
       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, 2375);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2975);
       }
-      /* parser/parser_prod.nit:2376 */
+      /* parser/parser_prod.nit:2976 */
       ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2378 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2378);
+      /* parser/parser_prod.nit:2978 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2978);
     }
-    /* parser/parser_prod.nit:2380 */
+    /* parser/parser_prod.nit:2980 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2382 */
+  /* parser/parser_prod.nit:2982 */
   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, 2382);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 2982);
   }
   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]));
@@ -13247,7 +16357,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2383 */
+    /* parser/parser_prod.nit:2983 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13262,32 +16372,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:2384 */
+      /* parser/parser_prod.nit:2984 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2384);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2984);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2385 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2985 */
       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, 2385);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2985);
       }
-      /* parser/parser_prod.nit:2386 */
+      /* parser/parser_prod.nit:2986 */
       ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2388 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2388);
+      /* parser/parser_prod.nit:2988 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2988);
     }
-    /* parser/parser_prod.nit:2390 */
+    /* parser/parser_prod.nit:2990 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2392 */
+  /* parser/parser_prod.nit:2992 */
   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, 2392);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2992);
   }
   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]));
@@ -13297,7 +16407,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2393 */
+    /* parser/parser_prod.nit:2993 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13312,32 +16422,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:2394 */
+      /* parser/parser_prod.nit:2994 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 2994);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2395 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2995 */
       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, 2395);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2995);
       }
-      /* parser/parser_prod.nit:2396 */
+      /* parser/parser_prod.nit:2996 */
       ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2398 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2398);
+      /* parser/parser_prod.nit:2998 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2998);
     }
-    /* parser/parser_prod.nit:2400 */
+    /* parser/parser_prod.nit:3000 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2402 */
+  /* parser/parser_prod.nit:3002 */
   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, 2402);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 3002);
   }
   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]));
@@ -13347,7 +16457,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2403 */
+    /* parser/parser_prod.nit:3003 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13362,28 +16472,28 @@ 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:2404 */
+      /* parser/parser_prod.nit:3004 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2404);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3004);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2405 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3005 */
       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, 2405);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3005);
       }
-      /* parser/parser_prod.nit:2406 */
+      /* parser/parser_prod.nit:3006 */
       ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2408 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2408);
+      /* parser/parser_prod.nit:3008 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3008);
     }
-    /* parser/parser_prod.nit:2410 */
+    /* parser/parser_prod.nit:3010 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2412 */
+  /* parser/parser_prod.nit:3012 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -13398,7 +16508,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2413 */
+    /* parser/parser_prod.nit:3013 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13413,32 +16523,252 @@ 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:2414 */
+      /* parser/parser_prod.nit:3014 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2414);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3014);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2415 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3015 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2415);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3015);
       }
-      /* parser/parser_prod.nit:2416 */
+      /* parser/parser_prod.nit:3016 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2418 */
+      /* parser/parser_prod.nit:3018 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2420 */
+    /* parser/parser_prod.nit:3020 */
     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)";
+static const char LOCATE_parser___parser_prod___ATypePropdef___n_doc__eq[] = "parser_prod::ATypePropdef::(parser_nodes::APropdef::n_doc=)";
+void parser___parser_prod___ATypePropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 3024;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___n_doc__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:3026 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3027 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:3028 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3028);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ATypePropdef___n_kwredef__eq[] = "parser_prod::ATypePropdef::(parser_nodes::ATypePropdef::n_kwredef=)";
+void parser___parser_prod___ATypePropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 3031;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___n_kwredef__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:3033 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3034 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:3035 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3035);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ATypePropdef___n_visibility__eq[] = "parser_prod::ATypePropdef::(parser_nodes::ATypePropdef::n_visibility=)";
+void parser___parser_prod___ATypePropdef___n_visibility__eq(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 = 3038;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___n_visibility__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:3040 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3041 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ATypePropdef___n_kwtype__eq[] = "parser_prod::ATypePropdef::(parser_nodes::ATypePropdef::n_kwtype=)";
+void parser___parser_prod___ATypePropdef___n_kwtype__eq(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 = 3043;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___n_kwtype__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:3045 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3046 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ATypePropdef___n_id__eq[] = "parser_prod::ATypePropdef::(parser_nodes::ATypePropdef::n_id=)";
+void parser___parser_prod___ATypePropdef___n_id__eq(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 = 3048;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___n_id__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:3050 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3051 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ATypePropdef___n_type__eq[] = "parser_prod::ATypePropdef::(parser_nodes::ATypePropdef::n_type=)";
+void parser___parser_prod___ATypePropdef___n_type__eq(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 = 3053;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___n_type__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:3055 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3056 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ATypePropdef___n_annotations__eq[] = "parser_prod::ATypePropdef::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ATypePropdef___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 3058;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___n_annotations__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:3060 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3061 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:3062 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3062);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ATypePropdef___visit_all[] = "parser_prod::ATypePropdef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -13446,7 +16776,7 @@ void parser___parser_prod___ATypePropdef___visit_all(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 = 2424;
+  fra.me.line = 3067;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13457,9 +16787,9 @@ void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2424 */
+  /* parser/parser_prod.nit:3067 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2426 */
+  /* parser/parser_prod.nit:3069 */
   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)) {
@@ -13475,16 +16805,16 @@ void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2427 */
+    /* parser/parser_prod.nit:3070 */
     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, 2427);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3070);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2429 */
+  /* parser/parser_prod.nit:3072 */
   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)) {
@@ -13500,48 +16830,48 @@ void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2430 */
+    /* parser/parser_prod.nit:3073 */
     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, 2430);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3073);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2432 */
+  /* parser/parser_prod.nit:3075 */
   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, 2432);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 3075);
   }
   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:2433 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3076 */
   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, 2433);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 3076);
   }
   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:2434 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3077 */
   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, 2434);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3077);
   }
   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:2435 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3078 */
   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, 2435);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 3078);
   }
   fra.me.REG[3] = 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[3]);
-  /* parser/parser_prod.nit:2436 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3079 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -13557,27 +16887,27 @@ void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2437 */
+    /* parser/parser_prod.nit:3080 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2437);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3080);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AReadAble].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos57]) return;
+  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 = 2442;
+  fra.me.line = 3085;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -13585,20 +16915,20 @@ void parser___parser_prod___AReadAble___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos57] = 1;
+  init_table[itpos56] = 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;
+  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AReadAble].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[itpos58]) return;
+  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 = 2444;
+  fra.me.line = 3087;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___init_areadable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13610,13 +16940,13 @@ void parser___parser_prod___AReadAble___init_areadable(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:2444 */
+  /* parser/parser_prod.nit:3087 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2449 */
+  /* parser/parser_prod.nit:3092 */
   CALL_parser___parser_prod___AReadAble___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:2450 */
+  /* parser/parser_prod.nit:3093 */
   ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2451 */
+  /* parser/parser_prod.nit:3094 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -13631,31 +16961,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:2452 */
+    /* parser/parser_prod.nit:3095 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2452);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3095);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2454 */
+  /* parser/parser_prod.nit:3097 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2454);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3097);
   }
   ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2455 */
+  /* parser/parser_prod.nit:3098 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2455);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3098);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos57] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AReadAble___replace_child[] = "parser_prod::AReadAble::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AReadAble___replace_child[] = "parser_prod::AReadAble::(parser_nodes::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;
@@ -13663,7 +16993,7 @@ 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 = 2458;
+  fra.me.line = 3101;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13675,7 +17005,7 @@ 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:2460 */
+  /* parser/parser_prod.nit:3103 */
   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)) {
@@ -13690,7 +17020,7 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2461 */
+    /* parser/parser_prod.nit:3104 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13705,32 +17035,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:2462 */
+      /* parser/parser_prod.nit:3105 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2462);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3105);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2463 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3106 */
       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, 2463);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3106);
       }
-      /* parser/parser_prod.nit:2464 */
+      /* parser/parser_prod.nit:3107 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2466 */
+      /* parser/parser_prod.nit:3109 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2468 */
+    /* parser/parser_prod.nit:3111 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2470 */
+  /* parser/parser_prod.nit:3113 */
   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, 2470);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 3113);
   }
   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]));
@@ -13740,7 +17070,7 @@ 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:2471 */
+    /* parser/parser_prod.nit:3114 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13755,32 +17085,98 @@ 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:2472 */
+      /* parser/parser_prod.nit:3115 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2472);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3115);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2473 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3116 */
       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, 2473);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3116);
       }
-      /* parser/parser_prod.nit:2474 */
+      /* parser/parser_prod.nit:3117 */
       ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2476 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2476);
+      /* parser/parser_prod.nit:3119 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3119);
     }
-    /* parser/parser_prod.nit:2478 */
+    /* parser/parser_prod.nit:3121 */
     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)";
+static const char LOCATE_parser___parser_prod___AReadAble___n_kwredef__eq[] = "parser_prod::AReadAble::(parser_nodes::AAble::n_kwredef=)";
+void parser___parser_prod___AReadAble___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 3125;
+  fra.me.meth = LOCATE_parser___parser_prod___AReadAble___n_kwredef__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:3127 */
+  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3128 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:3129 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3129);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AReadAble___n_kwreadable__eq[] = "parser_prod::AReadAble::(parser_nodes::AReadAble::n_kwreadable=)";
+void parser___parser_prod___AReadAble___n_kwreadable__eq(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 = 3132;
+  fra.me.meth = LOCATE_parser___parser_prod___AReadAble___n_kwreadable__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:3134 */
+  ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3135 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AReadAble___visit_all[] = "parser_prod::AReadAble::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -13788,7 +17184,7 @@ void parser___parser_prod___AReadAble___visit_all(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 = 2482;
+  fra.me.line = 3139;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13799,9 +17195,9 @@ void parser___parser_prod___AReadAble___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2482 */
+  /* parser/parser_prod.nit:3139 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2484 */
+  /* parser/parser_prod.nit:3141 */
   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)) {
@@ -13817,35 +17213,35 @@ void parser___parser_prod___AReadAble___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2485 */
+    /* parser/parser_prod.nit:3142 */
     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, 2485);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3142);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2487 */
+  /* parser/parser_prod.nit:3144 */
   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, 2487);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 3144);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AWriteAble].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos59]) return;
+  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 = 2491;
+  fra.me.line = 3148;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -13853,20 +17249,20 @@ void parser___parser_prod___AWriteAble___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos59] = 1;
+  init_table[itpos58] = 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;
+  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AWriteAble].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[itpos60]) return;
+  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 = 2493;
+  fra.me.line = 3150;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___init_awriteable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -13880,13 +17276,13 @@ void parser___parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:2493 */
+  /* parser/parser_prod.nit:3150 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2499 */
+  /* parser/parser_prod.nit:3156 */
   CALL_parser___parser_prod___AWriteAble___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:2500 */
+  /* parser/parser_prod.nit:3157 */
   ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2501 */
+  /* parser/parser_prod.nit:3158 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -13901,16 +17297,16 @@ 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:2502 */
+    /* parser/parser_prod.nit:3159 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2502);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3159);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:2504 */
+  /* parser/parser_prod.nit:3161 */
   ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2505 */
+  /* parser/parser_prod.nit:3162 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -13925,31 +17321,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:2506 */
+    /* parser/parser_prod.nit:3163 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2506);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3163);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:2508 */
+  /* parser/parser_prod.nit:3165 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2508);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3165);
   }
   ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:2509 */
+  /* parser/parser_prod.nit:3166 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2509);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3166);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos59] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AWriteAble___replace_child[] = "parser_prod::AWriteAble::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AWriteAble___replace_child[] = "parser_prod::AWriteAble::(parser_nodes::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;
@@ -13957,7 +17353,7 @@ 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 = 2512;
+  fra.me.line = 3169;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13969,7 +17365,7 @@ 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:2514 */
+  /* parser/parser_prod.nit:3171 */
   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)) {
@@ -13984,7 +17380,7 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2515 */
+    /* parser/parser_prod.nit:3172 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13999,28 +17395,28 @@ 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:2516 */
+      /* parser/parser_prod.nit:3173 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2516);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3173);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2517 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3174 */
       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, 2517);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3174);
       }
-      /* parser/parser_prod.nit:2518 */
+      /* parser/parser_prod.nit:3175 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2520 */
+      /* parser/parser_prod.nit:3177 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2522 */
+    /* parser/parser_prod.nit:3179 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2524 */
+  /* parser/parser_prod.nit:3181 */
   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)) {
@@ -14035,7 +17431,7 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2525 */
+    /* parser/parser_prod.nit:3182 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14050,32 +17446,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:2526 */
+      /* parser/parser_prod.nit:3183 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2526);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3183);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2527 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3184 */
       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, 2527);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3184);
       }
-      /* parser/parser_prod.nit:2528 */
+      /* parser/parser_prod.nit:3185 */
       ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2530 */
+      /* parser/parser_prod.nit:3187 */
       ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2532 */
+    /* parser/parser_prod.nit:3189 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2534 */
+  /* parser/parser_prod.nit:3191 */
   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, 2534);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 3191);
   }
   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]));
@@ -14085,7 +17481,7 @@ 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:2535 */
+    /* parser/parser_prod.nit:3192 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14100,32 +17496,142 @@ 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:2536 */
+      /* parser/parser_prod.nit:3193 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2536);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3193);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2537 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3194 */
       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, 2537);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3194);
       }
-      /* parser/parser_prod.nit:2538 */
+      /* parser/parser_prod.nit:3195 */
       ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2540 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2540);
+      /* parser/parser_prod.nit:3197 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3197);
     }
-    /* parser/parser_prod.nit:2542 */
+    /* parser/parser_prod.nit:3199 */
     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)";
+static const char LOCATE_parser___parser_prod___AWriteAble___n_kwredef__eq[] = "parser_prod::AWriteAble::(parser_nodes::AAble::n_kwredef=)";
+void parser___parser_prod___AWriteAble___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 3203;
+  fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___n_kwredef__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:3205 */
+  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3206 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:3207 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3207);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AWriteAble___n_visibility__eq[] = "parser_prod::AWriteAble::(parser_nodes::AAble::n_visibility=)";
+void parser___parser_prod___AWriteAble___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 3210;
+  fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___n_visibility__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:3212 */
+  ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3213 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:3214 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3214);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AWriteAble___n_kwwritable__eq[] = "parser_prod::AWriteAble::(parser_nodes::AWriteAble::n_kwwritable=)";
+void parser___parser_prod___AWriteAble___n_kwwritable__eq(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 = 3217;
+  fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___n_kwwritable__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:3219 */
+  ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3220 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AWriteAble___visit_all[] = "parser_prod::AWriteAble::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -14133,7 +17639,7 @@ void parser___parser_prod___AWriteAble___visit_all(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 = 2546;
+  fra.me.line = 3224;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14144,9 +17650,9 @@ void parser___parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2546 */
+  /* parser/parser_prod.nit:3224 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2548 */
+  /* parser/parser_prod.nit:3226 */
   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)) {
@@ -14162,16 +17668,16 @@ void parser___parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2549 */
+    /* parser/parser_prod.nit:3227 */
     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, 2549);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3227);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2551 */
+  /* parser/parser_prod.nit:3229 */
   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)) {
@@ -14187,35 +17693,35 @@ void parser___parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2552 */
+    /* parser/parser_prod.nit:3230 */
     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, 2552);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3230);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2554 */
+  /* parser/parser_prod.nit:3232 */
   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, 2554);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 3232);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos61]) return;
+  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 = 2558;
+  fra.me.line = 3236;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14223,19 +17729,19 @@ void parser___parser_prod___AIdMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos61] = 1;
+  init_table[itpos60] = 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;
+  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos62]) return;
+  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 = 2560;
+  fra.me.line = 3238;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___init_aidmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14245,28 +17751,28 @@ void parser___parser_prod___AIdMethid___init_aidmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2560 */
+  /* parser/parser_prod.nit:3238 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2564 */
+  /* parser/parser_prod.nit:3242 */
   CALL_parser___parser_prod___AIdMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2565 */
+  /* parser/parser_prod.nit:3243 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2565);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3243);
   }
   ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2566 */
+  /* parser/parser_prod.nit:3244 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2566);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3244);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos61] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AIdMethid___replace_child[] = "parser_prod::AIdMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AIdMethid___replace_child[] = "parser_prod::AIdMethid::(parser_nodes::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;
@@ -14274,7 +17780,7 @@ 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 = 2569;
+  fra.me.line = 3247;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14286,11 +17792,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:2571 */
+  /* parser/parser_prod.nit:3249 */
   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, 2571);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3249);
   }
   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]));
@@ -14300,7 +17806,7 @@ 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:2572 */
+    /* parser/parser_prod.nit:3250 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14315,39 +17821,61 @@ 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:2573 */
+      /* parser/parser_prod.nit:3251 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2573);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3251);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2574 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3252 */
       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, 2574);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3252);
       }
-      /* parser/parser_prod.nit:2575 */
+      /* parser/parser_prod.nit:3253 */
       ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2577 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2577);
+      /* parser/parser_prod.nit:3255 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3255);
     }
-    /* parser/parser_prod.nit:2579 */
+    /* parser/parser_prod.nit:3257 */
     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)";
+static const char LOCATE_parser___parser_prod___AIdMethid___n_id__eq[] = "parser_prod::AIdMethid::(parser_nodes::AIdMethid::n_id=)";
+void parser___parser_prod___AIdMethid___n_id__eq(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 = 3261;
+  fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___n_id__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:3263 */
+  ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3264 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIdMethid___visit_all[] = "parser_prod::AIdMethid::(parser_nodes::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 = 2583;
+  fra.me.line = 3268;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14356,26 +17884,26 @@ void parser___parser_prod___AIdMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2585 */
+  /* parser/parser_prod.nit:3270 */
   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, 2585);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3270);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos63]) return;
+  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 = 2589;
+  fra.me.line = 3274;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14383,19 +17911,19 @@ void parser___parser_prod___APlusMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos63] = 1;
+  init_table[itpos62] = 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;
+  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos64]) return;
+  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 = 2591;
+  fra.me.line = 3276;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___init_aplusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14405,28 +17933,28 @@ void parser___parser_prod___APlusMethid___init_aplusmethid(val_t p0, val_t p1, i
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2591 */
+  /* parser/parser_prod.nit:3276 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2595 */
+  /* parser/parser_prod.nit:3280 */
   CALL_parser___parser_prod___APlusMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2596 */
+  /* parser/parser_prod.nit:3281 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2596);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3281);
   }
   ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2597 */
+  /* 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, 2597);
+    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[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos63] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___APlusMethid___replace_child[] = "parser_prod::APlusMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___APlusMethid___replace_child[] = "parser_prod::APlusMethid::(parser_nodes::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;
@@ -14434,7 +17962,7 @@ 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 = 2600;
+  fra.me.line = 3285;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14446,11 +17974,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:2602 */
+  /* parser/parser_prod.nit:3287 */
   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, 2602);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 3287);
   }
   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]));
@@ -14460,7 +17988,7 @@ void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2603 */
+    /* parser/parser_prod.nit:3288 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14475,39 +18003,61 @@ 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:2604 */
+      /* parser/parser_prod.nit:3289 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2604);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3289);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2605 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3290 */
       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, 2605);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3290);
       }
-      /* parser/parser_prod.nit:2606 */
+      /* parser/parser_prod.nit:3291 */
       ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2608 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2608);
+      /* parser/parser_prod.nit:3293 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3293);
     }
-    /* parser/parser_prod.nit:2610 */
+    /* parser/parser_prod.nit:3295 */
     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)";
+static const char LOCATE_parser___parser_prod___APlusMethid___n_plus__eq[] = "parser_prod::APlusMethid::(parser_nodes::APlusMethid::n_plus=)";
+void parser___parser_prod___APlusMethid___n_plus__eq(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 = 3299;
+  fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___n_plus__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:3301 */
+  ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3302 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::APlusMethid::(parser_nodes::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 = 2614;
+  fra.me.line = 3306;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14516,26 +18066,26 @@ void parser___parser_prod___APlusMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2616 */
+  /* parser/parser_prod.nit:3308 */
   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, 2616);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 3308);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos65]) return;
+  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 = 2620;
+  fra.me.line = 3312;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14543,19 +18093,19 @@ void parser___parser_prod___AMinusMethid___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos65] = 1;
+  init_table[itpos64] = 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;
+  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos66]) return;
+  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 = 2622;
+  fra.me.line = 3314;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___init_aminusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14565,28 +18115,28 @@ void parser___parser_prod___AMinusMethid___init_aminusmethid(val_t p0, val_t p1,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2622 */
+  /* parser/parser_prod.nit:3314 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2626 */
+  /* parser/parser_prod.nit:3318 */
   CALL_parser___parser_prod___AMinusMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2627 */
+  /* parser/parser_prod.nit:3319 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2627);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3319);
   }
   ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2628 */
+  /* parser/parser_prod.nit:3320 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2628);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3320);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos65] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AMinusMethid___replace_child[] = "parser_prod::AMinusMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AMinusMethid___replace_child[] = "parser_prod::AMinusMethid::(parser_nodes::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;
@@ -14594,7 +18144,7 @@ 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 = 2631;
+  fra.me.line = 3323;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14606,11 +18156,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:2633 */
+  /* parser/parser_prod.nit:3325 */
   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, 2633);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 3325);
   }
   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]));
@@ -14620,7 +18170,7 @@ void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2634 */
+    /* parser/parser_prod.nit:3326 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14635,39 +18185,61 @@ 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:2635 */
+      /* parser/parser_prod.nit:3327 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2635);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3327);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2636 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3328 */
       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, 2636);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3328);
       }
-      /* parser/parser_prod.nit:2637 */
+      /* parser/parser_prod.nit:3329 */
       ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2639 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2639);
+      /* parser/parser_prod.nit:3331 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3331);
     }
-    /* parser/parser_prod.nit:2641 */
+    /* parser/parser_prod.nit:3333 */
     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)";
+static const char LOCATE_parser___parser_prod___AMinusMethid___n_minus__eq[] = "parser_prod::AMinusMethid::(parser_nodes::AMinusMethid::n_minus=)";
+void parser___parser_prod___AMinusMethid___n_minus__eq(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 = 3337;
+  fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___n_minus__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:3339 */
+  ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3340 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AMinusMethid::(parser_nodes::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 = 2645;
+  fra.me.line = 3344;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14676,26 +18248,26 @@ void parser___parser_prod___AMinusMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2647 */
+  /* parser/parser_prod.nit:3346 */
   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, 2647);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 3346);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos66 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos67]) return;
+  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 = 2651;
+  fra.me.line = 3350;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14703,19 +18275,19 @@ void parser___parser_prod___AStarMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos67] = 1;
+  init_table[itpos66] = 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;
+  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos68]) return;
+  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 = 2653;
+  fra.me.line = 3352;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___init_astarmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14725,28 +18297,28 @@ void parser___parser_prod___AStarMethid___init_astarmethid(val_t p0, val_t p1, i
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2653 */
+  /* parser/parser_prod.nit:3352 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2657 */
+  /* parser/parser_prod.nit:3356 */
   CALL_parser___parser_prod___AStarMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2658 */
+  /* parser/parser_prod.nit:3357 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2658);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3357);
   }
   ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2659 */
+  /* parser/parser_prod.nit:3358 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2659);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3358);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos67] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AStarMethid___replace_child[] = "parser_prod::AStarMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AStarMethid___replace_child[] = "parser_prod::AStarMethid::(parser_nodes::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;
@@ -14754,7 +18326,7 @@ 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 = 2662;
+  fra.me.line = 3361;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14766,11 +18338,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:2664 */
+  /* parser/parser_prod.nit:3363 */
   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, 2664);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 3363);
   }
   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]));
@@ -14780,7 +18352,7 @@ void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2665 */
+    /* parser/parser_prod.nit:3364 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14795,39 +18367,61 @@ 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:2666 */
+      /* parser/parser_prod.nit:3365 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2666);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3365);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2667 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3366 */
       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, 2667);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3366);
       }
-      /* parser/parser_prod.nit:2668 */
+      /* parser/parser_prod.nit:3367 */
       ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2670 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2670);
+      /* parser/parser_prod.nit:3369 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3369);
     }
-    /* parser/parser_prod.nit:2672 */
+    /* parser/parser_prod.nit:3371 */
     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)";
+static const char LOCATE_parser___parser_prod___AStarMethid___n_star__eq[] = "parser_prod::AStarMethid::(parser_nodes::AStarMethid::n_star=)";
+void parser___parser_prod___AStarMethid___n_star__eq(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 = 3375;
+  fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___n_star__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:3377 */
+  ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3378 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AStarMethid::(parser_nodes::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 = 2676;
+  fra.me.line = 3382;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14836,26 +18430,26 @@ void parser___parser_prod___AStarMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2678 */
+  /* parser/parser_prod.nit:3384 */
   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, 2678);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 3384);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASlashMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos69]) return;
+  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 = 2682;
+  fra.me.line = 3388;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14863,19 +18457,19 @@ void parser___parser_prod___ASlashMethid___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos69] = 1;
+  init_table[itpos68] = 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;
+  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASlashMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos70]) return;
+  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 = 2684;
+  fra.me.line = 3390;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___init_aslashmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14885,28 +18479,28 @@ void parser___parser_prod___ASlashMethid___init_aslashmethid(val_t p0, val_t p1,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2684 */
+  /* parser/parser_prod.nit:3390 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2688 */
+  /* parser/parser_prod.nit:3394 */
   CALL_parser___parser_prod___ASlashMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2689 */
+  /* parser/parser_prod.nit:3395 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2689);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3395);
   }
   ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2690 */
+  /* parser/parser_prod.nit:3396 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2690);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3396);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos69] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASlashMethid___replace_child[] = "parser_prod::ASlashMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ASlashMethid___replace_child[] = "parser_prod::ASlashMethid::(parser_nodes::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;
@@ -14914,7 +18508,7 @@ 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 = 2693;
+  fra.me.line = 3399;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14926,11 +18520,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:2695 */
+  /* parser/parser_prod.nit:3401 */
   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, 2695);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 3401);
   }
   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]));
@@ -14940,7 +18534,7 @@ void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2696 */
+    /* parser/parser_prod.nit:3402 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14955,39 +18549,61 @@ 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:2697 */
+      /* parser/parser_prod.nit:3403 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2697);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3403);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2698 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3404 */
       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, 2698);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3404);
       }
-      /* parser/parser_prod.nit:2699 */
+      /* parser/parser_prod.nit:3405 */
       ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2701 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2701);
+      /* parser/parser_prod.nit:3407 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3407);
     }
-    /* parser/parser_prod.nit:2703 */
+    /* parser/parser_prod.nit:3409 */
     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)";
+static const char LOCATE_parser___parser_prod___ASlashMethid___n_slash__eq[] = "parser_prod::ASlashMethid::(parser_nodes::ASlashMethid::n_slash=)";
+void parser___parser_prod___ASlashMethid___n_slash__eq(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 = 3413;
+  fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___n_slash__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:3415 */
+  ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3416 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ASlashMethid::(parser_nodes::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 = 2707;
+  fra.me.line = 3420;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14996,26 +18612,26 @@ void parser___parser_prod___ASlashMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2709 */
+  /* parser/parser_prod.nit:3422 */
   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, 2709);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 3422);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APercentMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos71]) return;
+  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 = 2713;
+  fra.me.line = 3426;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15023,19 +18639,19 @@ void parser___parser_prod___APercentMethid___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos71] = 1;
+  init_table[itpos70] = 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;
+  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APercentMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos72]) return;
+  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 = 2715;
+  fra.me.line = 3428;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___init_apercentmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15045,28 +18661,28 @@ void parser___parser_prod___APercentMethid___init_apercentmethid(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2715 */
+  /* parser/parser_prod.nit:3428 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2719 */
+  /* parser/parser_prod.nit:3432 */
   CALL_parser___parser_prod___APercentMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2720 */
+  /* parser/parser_prod.nit:3433 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2720);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3433);
   }
   ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2721 */
+  /* parser/parser_prod.nit:3434 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2721);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3434);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos71] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___APercentMethid___replace_child[] = "parser_prod::APercentMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___APercentMethid___replace_child[] = "parser_prod::APercentMethid::(parser_nodes::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;
@@ -15074,7 +18690,7 @@ 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 = 2724;
+  fra.me.line = 3437;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15086,11 +18702,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:2726 */
+  /* parser/parser_prod.nit:3439 */
   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, 2726);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 3439);
   }
   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]));
@@ -15100,7 +18716,7 @@ void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2727 */
+    /* parser/parser_prod.nit:3440 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15115,39 +18731,61 @@ 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:2728 */
+      /* parser/parser_prod.nit:3441 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2728);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3441);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2729 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3442 */
       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, 2729);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3442);
       }
-      /* parser/parser_prod.nit:2730 */
+      /* parser/parser_prod.nit:3443 */
       ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2732 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2732);
+      /* parser/parser_prod.nit:3445 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3445);
     }
-    /* parser/parser_prod.nit:2734 */
+    /* parser/parser_prod.nit:3447 */
     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)";
+static const char LOCATE_parser___parser_prod___APercentMethid___n_percent__eq[] = "parser_prod::APercentMethid::(parser_nodes::APercentMethid::n_percent=)";
+void parser___parser_prod___APercentMethid___n_percent__eq(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 = 3451;
+  fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___n_percent__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:3453 */
+  ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3454 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::APercentMethid::(parser_nodes::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 = 2738;
+  fra.me.line = 3458;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15156,26 +18794,26 @@ void parser___parser_prod___APercentMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2740 */
+  /* parser/parser_prod.nit:3460 */
   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, 2740);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 3460);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEqMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos73]) return;
+  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 = 2744;
+  fra.me.line = 3464;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15183,19 +18821,19 @@ void parser___parser_prod___AEqMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos73] = 1;
+  init_table[itpos72] = 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;
+  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEqMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos74]) return;
+  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 = 2746;
+  fra.me.line = 3466;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___init_aeqmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15205,28 +18843,28 @@ void parser___parser_prod___AEqMethid___init_aeqmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2746 */
+  /* parser/parser_prod.nit:3466 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2750 */
+  /* parser/parser_prod.nit:3470 */
   CALL_parser___parser_prod___AEqMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2751 */
+  /* parser/parser_prod.nit:3471 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2751);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3471);
   }
   ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2752 */
+  /* parser/parser_prod.nit:3472 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2752);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3472);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos73] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AEqMethid___replace_child[] = "parser_prod::AEqMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AEqMethid___replace_child[] = "parser_prod::AEqMethid::(parser_nodes::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;
@@ -15234,7 +18872,7 @@ 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 = 2755;
+  fra.me.line = 3475;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15246,11 +18884,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:2757 */
+  /* parser/parser_prod.nit:3477 */
   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, 2757);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 3477);
   }
   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]));
@@ -15260,7 +18898,7 @@ 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:2758 */
+    /* parser/parser_prod.nit:3478 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15275,39 +18913,61 @@ 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:2759 */
+      /* parser/parser_prod.nit:3479 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2759);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3479);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2760 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3480 */
       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, 2760);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3480);
       }
-      /* parser/parser_prod.nit:2761 */
+      /* parser/parser_prod.nit:3481 */
       ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2763 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2763);
+      /* parser/parser_prod.nit:3483 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3483);
     }
-    /* parser/parser_prod.nit:2765 */
+    /* parser/parser_prod.nit:3485 */
     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)";
+static const char LOCATE_parser___parser_prod___AEqMethid___n_eq__eq[] = "parser_prod::AEqMethid::(parser_nodes::AEqMethid::n_eq=)";
+void parser___parser_prod___AEqMethid___n_eq__eq(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 = 3489;
+  fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___n_eq__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:3491 */
+  ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3492 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AEqMethid::(parser_nodes::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 = 2769;
+  fra.me.line = 3496;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15316,26 +18976,26 @@ void parser___parser_prod___AEqMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2771 */
+  /* parser/parser_prod.nit:3498 */
   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, 2771);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 3498);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANeMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos75]) return;
+  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 = 2775;
+  fra.me.line = 3502;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15343,19 +19003,19 @@ void parser___parser_prod___ANeMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos75] = 1;
+  init_table[itpos74] = 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;
+  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANeMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos76]) return;
+  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 = 2777;
+  fra.me.line = 3504;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___init_anemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15365,28 +19025,28 @@ void parser___parser_prod___ANeMethid___init_anemethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2777 */
+  /* parser/parser_prod.nit:3504 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2781 */
+  /* parser/parser_prod.nit:3508 */
   CALL_parser___parser_prod___ANeMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2782 */
+  /* parser/parser_prod.nit:3509 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2782);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3509);
   }
   ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2783 */
+  /* parser/parser_prod.nit:3510 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2783);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3510);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos75] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ANeMethid___replace_child[] = "parser_prod::ANeMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ANeMethid___replace_child[] = "parser_prod::ANeMethid::(parser_nodes::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;
@@ -15394,7 +19054,7 @@ 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 = 2786;
+  fra.me.line = 3513;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15406,11 +19066,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:2788 */
+  /* parser/parser_prod.nit:3515 */
   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, 2788);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 3515);
   }
   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]));
@@ -15420,7 +19080,7 @@ 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:2789 */
+    /* parser/parser_prod.nit:3516 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15435,39 +19095,61 @@ 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:2790 */
+      /* parser/parser_prod.nit:3517 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2790);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3517);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2791 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3518 */
       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, 2791);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3518);
       }
-      /* parser/parser_prod.nit:2792 */
+      /* parser/parser_prod.nit:3519 */
       ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2794 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2794);
+      /* parser/parser_prod.nit:3521 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3521);
     }
-    /* parser/parser_prod.nit:2796 */
+    /* parser/parser_prod.nit:3523 */
     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)";
+static const char LOCATE_parser___parser_prod___ANeMethid___n_ne__eq[] = "parser_prod::ANeMethid::(parser_nodes::ANeMethid::n_ne=)";
+void parser___parser_prod___ANeMethid___n_ne__eq(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 = 3527;
+  fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___n_ne__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:3529 */
+  ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3530 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ANeMethid::(parser_nodes::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 = 2800;
+  fra.me.line = 3534;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15476,26 +19158,26 @@ void parser___parser_prod___ANeMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2802 */
+  /* parser/parser_prod.nit:3536 */
   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, 2802);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 3536);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALeMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos77]) return;
+  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 = 2806;
+  fra.me.line = 3540;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15503,19 +19185,19 @@ void parser___parser_prod___ALeMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos77] = 1;
+  init_table[itpos76] = 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;
+  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALeMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos78]) return;
+  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 = 2808;
+  fra.me.line = 3542;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___init_alemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15525,28 +19207,28 @@ void parser___parser_prod___ALeMethid___init_alemethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2808 */
+  /* parser/parser_prod.nit:3542 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2812 */
+  /* parser/parser_prod.nit:3546 */
   CALL_parser___parser_prod___ALeMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2813 */
+  /* parser/parser_prod.nit:3547 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=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, 3547);
   }
   ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2814 */
+  /* parser/parser_prod.nit:3548 */
   REGB0 = TAG_Bool(fra.me.REG[1]==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, 3548);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos77] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ALeMethid___replace_child[] = "parser_prod::ALeMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ALeMethid___replace_child[] = "parser_prod::ALeMethid::(parser_nodes::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;
@@ -15554,7 +19236,7 @@ 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 = 2817;
+  fra.me.line = 3551;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15566,11 +19248,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:2819 */
+  /* parser/parser_prod.nit:3553 */
   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, 2819);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 3553);
   }
   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]));
@@ -15580,7 +19262,7 @@ 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:2820 */
+    /* parser/parser_prod.nit:3554 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15595,39 +19277,61 @@ 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:2821 */
+      /* 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, 2821);
+        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]);
-      /* parser/parser_prod.nit:2822 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3556 */
       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, 2822);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3556);
       }
-      /* parser/parser_prod.nit:2823 */
+      /* parser/parser_prod.nit:3557 */
       ATTR_parser___parser_nodes___ALeMethid____n_le(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:3559 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3559);
     }
-    /* parser/parser_prod.nit:2827 */
+    /* parser/parser_prod.nit:3561 */
     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)";
+static const char LOCATE_parser___parser_prod___ALeMethid___n_le__eq[] = "parser_prod::ALeMethid::(parser_nodes::ALeMethid::n_le=)";
+void parser___parser_prod___ALeMethid___n_le__eq(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 = 3565;
+  fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___n_le__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:3567 */
+  ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3568 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ALeMethid::(parser_nodes::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 = 2831;
+  fra.me.line = 3572;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15636,26 +19340,26 @@ void parser___parser_prod___ALeMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2833 */
+  /* parser/parser_prod.nit:3574 */
   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, 2833);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 3574);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGeMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos79]) return;
+  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 = 2837;
+  fra.me.line = 3578;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15663,19 +19367,19 @@ void parser___parser_prod___AGeMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos79] = 1;
+  init_table[itpos78] = 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;
+  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGeMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos80]) return;
+  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 = 2839;
+  fra.me.line = 3580;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___init_agemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15685,28 +19389,28 @@ void parser___parser_prod___AGeMethid___init_agemethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2839 */
+  /* parser/parser_prod.nit:3580 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2843 */
+  /* parser/parser_prod.nit:3584 */
   CALL_parser___parser_prod___AGeMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2844 */
+  /* parser/parser_prod.nit:3585 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2844);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3585);
   }
   ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2845 */
+  /* parser/parser_prod.nit:3586 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2845);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3586);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos79] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AGeMethid___replace_child[] = "parser_prod::AGeMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AGeMethid___replace_child[] = "parser_prod::AGeMethid::(parser_nodes::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;
@@ -15714,7 +19418,7 @@ 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 = 2848;
+  fra.me.line = 3589;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15726,11 +19430,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:2850 */
+  /* parser/parser_prod.nit:3591 */
   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, 2850);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 3591);
   }
   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]));
@@ -15740,7 +19444,7 @@ 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:2851 */
+    /* parser/parser_prod.nit:3592 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15755,39 +19459,61 @@ 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:2852 */
+      /* parser/parser_prod.nit:3593 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2852);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3593);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2853 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3594 */
       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, 2853);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3594);
       }
-      /* parser/parser_prod.nit:2854 */
+      /* parser/parser_prod.nit:3595 */
       ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2856 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2856);
+      /* parser/parser_prod.nit:3597 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3597);
     }
-    /* parser/parser_prod.nit:2858 */
+    /* parser/parser_prod.nit:3599 */
     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)";
+static const char LOCATE_parser___parser_prod___AGeMethid___n_ge__eq[] = "parser_prod::AGeMethid::(parser_nodes::AGeMethid::n_ge=)";
+void parser___parser_prod___AGeMethid___n_ge__eq(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 = 3603;
+  fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___n_ge__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:3605 */
+  ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3606 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AGeMethid::(parser_nodes::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 = 2862;
+  fra.me.line = 3610;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15796,26 +19522,26 @@ void parser___parser_prod___AGeMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2864 */
+  /* parser/parser_prod.nit:3612 */
   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, 2864);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 3612);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos80 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALtMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos81]) return;
+  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 = 2868;
+  fra.me.line = 3616;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15823,19 +19549,19 @@ void parser___parser_prod___ALtMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos81] = 1;
+  init_table[itpos80] = 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;
+  int itpos81 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALtMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos82]) return;
+  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 = 2870;
+  fra.me.line = 3618;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___init_altmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15845,28 +19571,28 @@ void parser___parser_prod___ALtMethid___init_altmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2870 */
+  /* parser/parser_prod.nit:3618 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2874 */
+  /* parser/parser_prod.nit:3622 */
   CALL_parser___parser_prod___ALtMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2875 */
+  /* parser/parser_prod.nit:3623 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2875);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3623);
   }
   ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2876 */
+  /* parser/parser_prod.nit:3624 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2876);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3624);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos81] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ALtMethid___replace_child[] = "parser_prod::ALtMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ALtMethid___replace_child[] = "parser_prod::ALtMethid::(parser_nodes::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;
@@ -15874,7 +19600,7 @@ 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 = 2879;
+  fra.me.line = 3627;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15886,11 +19612,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:2881 */
+  /* parser/parser_prod.nit:3629 */
   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, 2881);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 3629);
   }
   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]));
@@ -15900,7 +19626,7 @@ 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:2882 */
+    /* parser/parser_prod.nit:3630 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15915,39 +19641,61 @@ 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:2883 */
+      /* parser/parser_prod.nit:3631 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2883);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3631);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2884 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3632 */
       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, 2884);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3632);
       }
-      /* parser/parser_prod.nit:2885 */
+      /* parser/parser_prod.nit:3633 */
       ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2887 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2887);
+      /* parser/parser_prod.nit:3635 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3635);
     }
-    /* parser/parser_prod.nit:2889 */
+    /* parser/parser_prod.nit:3637 */
     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)";
+static const char LOCATE_parser___parser_prod___ALtMethid___n_lt__eq[] = "parser_prod::ALtMethid::(parser_nodes::ALtMethid::n_lt=)";
+void parser___parser_prod___ALtMethid___n_lt__eq(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 = 3641;
+  fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___n_lt__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:3643 */
+  ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3644 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ALtMethid::(parser_nodes::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 = 2893;
+  fra.me.line = 3648;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15956,26 +19704,26 @@ void parser___parser_prod___ALtMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2895 */
+  /* parser/parser_prod.nit:3650 */
   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, 2895);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 3650);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos82 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGtMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos83]) return;
+  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 = 2899;
+  fra.me.line = 3654;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15983,19 +19731,19 @@ void parser___parser_prod___AGtMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos83] = 1;
+  init_table[itpos82] = 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;
+  int itpos83 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGtMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos84]) return;
+  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 = 2901;
+  fra.me.line = 3656;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___init_agtmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16005,28 +19753,28 @@ void parser___parser_prod___AGtMethid___init_agtmethid(val_t p0, val_t p1, int*
   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:3656 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2905 */
+  /* parser/parser_prod.nit:3660 */
   CALL_parser___parser_prod___AGtMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2906 */
+  /* parser/parser_prod.nit:3661 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2906);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3661);
   }
   ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2907 */
+  /* parser/parser_prod.nit:3662 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2907);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3662);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos83] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AGtMethid___replace_child[] = "parser_prod::AGtMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AGtMethid___replace_child[] = "parser_prod::AGtMethid::(parser_nodes::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;
@@ -16034,7 +19782,7 @@ 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 = 2910;
+  fra.me.line = 3665;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16046,11 +19794,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:2912 */
+  /* parser/parser_prod.nit:3667 */
   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, 2912);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 3667);
   }
   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]));
@@ -16060,7 +19808,7 @@ 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:2913 */
+    /* parser/parser_prod.nit:3668 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16075,39 +19823,61 @@ 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:2914 */
+      /* parser/parser_prod.nit:3669 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2914);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3669);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2915 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3670 */
       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, 2915);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3670);
       }
-      /* parser/parser_prod.nit:2916 */
+      /* parser/parser_prod.nit:3671 */
       ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2918 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2918);
+      /* parser/parser_prod.nit:3673 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3673);
     }
-    /* parser/parser_prod.nit:2920 */
+    /* parser/parser_prod.nit:3675 */
     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)";
+static const char LOCATE_parser___parser_prod___AGtMethid___n_gt__eq[] = "parser_prod::AGtMethid::(parser_nodes::AGtMethid::n_gt=)";
+void parser___parser_prod___AGtMethid___n_gt__eq(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 = 3679;
+  fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___n_gt__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:3681 */
+  ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3682 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AGtMethid::(parser_nodes::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 = 2924;
+  fra.me.line = 3686;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16116,26 +19886,26 @@ void parser___parser_prod___AGtMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2926 */
+  /* parser/parser_prod.nit:3688 */
   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, 2926);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 3688);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos84 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALlMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos85]) return;
+  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 = 2930;
+  fra.me.line = 3692;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -16143,19 +19913,19 @@ void parser___parser_prod___ALlMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos85] = 1;
+  init_table[itpos84] = 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;
+  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALlMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos86]) return;
+  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 = 2932;
+  fra.me.line = 3694;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___init_allmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16165,28 +19935,28 @@ void parser___parser_prod___ALlMethid___init_allmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2932 */
+  /* parser/parser_prod.nit:3694 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2936 */
+  /* parser/parser_prod.nit:3698 */
   CALL_parser___parser_prod___ALlMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2937 */
+  /* parser/parser_prod.nit:3699 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2937);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3699);
   }
   ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2938 */
+  /* parser/parser_prod.nit:3700 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2938);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3700);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos85] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ALlMethid___replace_child[] = "parser_prod::ALlMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ALlMethid___replace_child[] = "parser_prod::ALlMethid::(parser_nodes::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;
@@ -16194,7 +19964,7 @@ 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 = 2941;
+  fra.me.line = 3703;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16206,11 +19976,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:2943 */
+  /* parser/parser_prod.nit:3705 */
   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, 2943);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 3705);
   }
   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]));
@@ -16220,7 +19990,7 @@ 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:2944 */
+    /* parser/parser_prod.nit:3706 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16235,39 +20005,61 @@ 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:2945 */
+      /* 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, 2945);
+        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:2946 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3708 */
       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, 2946);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3708);
       }
-      /* parser/parser_prod.nit:2947 */
+      /* parser/parser_prod.nit:3709 */
       ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2949 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2949);
+      /* parser/parser_prod.nit:3711 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3711);
     }
-    /* parser/parser_prod.nit:2951 */
+    /* parser/parser_prod.nit:3713 */
     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)";
+static const char LOCATE_parser___parser_prod___ALlMethid___n_ll__eq[] = "parser_prod::ALlMethid::(parser_nodes::ALlMethid::n_ll=)";
+void parser___parser_prod___ALlMethid___n_ll__eq(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 = 3717;
+  fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___n_ll__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:3719 */
+  ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3720 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ALlMethid::(parser_nodes::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 = 2955;
+  fra.me.line = 3724;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16276,26 +20068,26 @@ void parser___parser_prod___ALlMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2957 */
+  /* parser/parser_prod.nit:3726 */
   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, 2957);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 3726);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGgMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos87]) return;
+  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 = 2961;
+  fra.me.line = 3730;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -16303,19 +20095,19 @@ void parser___parser_prod___AGgMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos87] = 1;
+  init_table[itpos86] = 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;
+  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGgMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos88]) return;
+  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 = 2963;
+  fra.me.line = 3732;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___init_aggmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16325,28 +20117,28 @@ void parser___parser_prod___AGgMethid___init_aggmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2963 */
+  /* parser/parser_prod.nit:3732 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2967 */
+  /* parser/parser_prod.nit:3736 */
   CALL_parser___parser_prod___AGgMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2968 */
+  /* parser/parser_prod.nit:3737 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2968);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3737);
   }
   ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2969 */
+  /* parser/parser_prod.nit:3738 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2969);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3738);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos87] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AGgMethid___replace_child[] = "parser_prod::AGgMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AGgMethid___replace_child[] = "parser_prod::AGgMethid::(parser_nodes::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;
@@ -16354,7 +20146,7 @@ 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 = 2972;
+  fra.me.line = 3741;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16366,11 +20158,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:2974 */
+  /* parser/parser_prod.nit:3743 */
   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, 2974);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 3743);
   }
   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]));
@@ -16380,7 +20172,7 @@ 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:2975 */
+    /* parser/parser_prod.nit:3744 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16395,39 +20187,61 @@ 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:2976 */
+      /* parser/parser_prod.nit:3745 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2976);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3745);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2977 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3746 */
       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, 2977);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3746);
       }
-      /* parser/parser_prod.nit:2978 */
+      /* parser/parser_prod.nit:3747 */
       ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2980 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2980);
+      /* parser/parser_prod.nit:3749 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3749);
     }
-    /* parser/parser_prod.nit:2982 */
+    /* parser/parser_prod.nit:3751 */
     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)";
+static const char LOCATE_parser___parser_prod___AGgMethid___n_gg__eq[] = "parser_prod::AGgMethid::(parser_nodes::AGgMethid::n_gg=)";
+void parser___parser_prod___AGgMethid___n_gg__eq(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 = 3755;
+  fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___n_gg__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:3757 */
+  ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3758 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AGgMethid::(parser_nodes::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 = 2986;
+  fra.me.line = 3762;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16436,26 +20250,26 @@ void parser___parser_prod___AGgMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2988 */
+  /* parser/parser_prod.nit:3764 */
   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, 2988);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 3764);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos89]) return;
+  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 = 2992;
+  fra.me.line = 3768;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -16463,19 +20277,19 @@ void parser___parser_prod___ABraMethid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos89] = 1;
+  init_table[itpos88] = 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;
+  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos90]) return;
+  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 = 2994;
+  fra.me.line = 3770;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___init_abramethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16487,41 +20301,41 @@ void parser___parser_prod___ABraMethid___init_abramethid(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:2994 */
+  /* parser/parser_prod.nit:3770 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2999 */
+  /* parser/parser_prod.nit:3775 */
   CALL_parser___parser_prod___ABraMethid___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:3000 */
+  /* parser/parser_prod.nit:3776 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3000);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3776);
   }
   ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3001 */
+  /* parser/parser_prod.nit:3777 */
   REGB0 = TAG_Bool(fra.me.REG[1]==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, 3777);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3002 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3778 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3002);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3778);
   }
   ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3003 */
+  /* parser/parser_prod.nit:3779 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3003);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3779);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos89] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ABraMethid___replace_child[] = "parser_prod::ABraMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ABraMethid___replace_child[] = "parser_prod::ABraMethid::(parser_nodes::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;
@@ -16529,7 +20343,7 @@ 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 = 3006;
+  fra.me.line = 3782;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16541,11 +20355,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:3008 */
+  /* parser/parser_prod.nit:3784 */
   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, 3008);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 3784);
   }
   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]));
@@ -16555,7 +20369,7 @@ 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:3009 */
+    /* parser/parser_prod.nit:3785 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16570,32 +20384,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:3010 */
+      /* parser/parser_prod.nit:3786 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3010);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3786);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3011 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3787 */
       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, 3011);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3787);
       }
-      /* parser/parser_prod.nit:3012 */
+      /* parser/parser_prod.nit:3788 */
       ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3014 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3014);
+      /* parser/parser_prod.nit:3790 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3790);
     }
-    /* parser/parser_prod.nit:3016 */
+    /* parser/parser_prod.nit:3792 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3018 */
+  /* parser/parser_prod.nit:3794 */
   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, 3018);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 3794);
   }
   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]));
@@ -16605,7 +20419,7 @@ 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:3019 */
+    /* parser/parser_prod.nit:3795 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16620,39 +20434,83 @@ 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:3020 */
+      /* parser/parser_prod.nit:3796 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3020);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3796);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3021 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3797 */
       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, 3021);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3797);
       }
-      /* parser/parser_prod.nit:3022 */
+      /* parser/parser_prod.nit:3798 */
       ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3024 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3024);
+      /* parser/parser_prod.nit:3800 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3800);
     }
-    /* parser/parser_prod.nit:3026 */
+    /* parser/parser_prod.nit:3802 */
     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)";
+static const char LOCATE_parser___parser_prod___ABraMethid___n_obra__eq[] = "parser_prod::ABraMethid::(parser_nodes::ABraMethid::n_obra=)";
+void parser___parser_prod___ABraMethid___n_obra__eq(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 = 3806;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___n_obra__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:3808 */
+  ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3809 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_cbra__eq[] = "parser_prod::ABraMethid::(parser_nodes::ABraMethid::n_cbra=)";
+void parser___parser_prod___ABraMethid___n_cbra__eq(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 = 3811;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___n_cbra__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:3813 */
+  ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3814 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ABraMethid::(parser_nodes::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 = 3030;
+  fra.me.line = 3818;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16662,34 +20520,34 @@ void parser___parser_prod___ABraMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3032 */
+  /* parser/parser_prod.nit:3820 */
   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, 3032);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 3820);
   }
   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:3033 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:3821 */
   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, 3033);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 3821);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarshipMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos91]) return;
+  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 = 3037;
+  fra.me.line = 3825;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -16697,19 +20555,19 @@ void parser___parser_prod___AStarshipMethid___empty_init(val_t p0, int* init_tab
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos91] = 1;
+  init_table[itpos90] = 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;
+  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarshipMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos92]) return;
+  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 = 3039;
+  fra.me.line = 3827;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___init_astarshipmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16719,28 +20577,28 @@ void parser___parser_prod___AStarshipMethid___init_astarshipmethid(val_t p0, val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3039 */
+  /* parser/parser_prod.nit:3827 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3043 */
+  /* parser/parser_prod.nit:3831 */
   CALL_parser___parser_prod___AStarshipMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:3044 */
+  /* parser/parser_prod.nit:3832 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3044);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3832);
   }
   ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3045 */
+  /* parser/parser_prod.nit:3833 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3045);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3833);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos91] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AStarshipMethid___replace_child[] = "parser_prod::AStarshipMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AStarshipMethid___replace_child[] = "parser_prod::AStarshipMethid::(parser_nodes::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;
@@ -16748,7 +20606,7 @@ 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 = 3048;
+  fra.me.line = 3836;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16760,11 +20618,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:3050 */
+  /* parser/parser_prod.nit:3838 */
   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, 3050);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 3838);
   }
   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]));
@@ -16774,7 +20632,7 @@ void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3051 */
+    /* parser/parser_prod.nit:3839 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16789,39 +20647,61 @@ 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:3052 */
+      /* parser/parser_prod.nit:3840 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3052);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3840);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3053 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3841 */
       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, 3053);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3841);
       }
-      /* parser/parser_prod.nit:3054 */
+      /* parser/parser_prod.nit:3842 */
       ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3056 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3056);
+      /* parser/parser_prod.nit:3844 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3844);
     }
-    /* parser/parser_prod.nit:3058 */
+    /* parser/parser_prod.nit:3846 */
     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)";
+static const char LOCATE_parser___parser_prod___AStarshipMethid___n_starship__eq[] = "parser_prod::AStarshipMethid::(parser_nodes::AStarshipMethid::n_starship=)";
+void parser___parser_prod___AStarshipMethid___n_starship__eq(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 = 3850;
+  fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___n_starship__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:3852 */
+  ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3853 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AStarshipMethid::(parser_nodes::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 = 3062;
+  fra.me.line = 3857;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16830,26 +20710,26 @@ void parser___parser_prod___AStarshipMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3064 */
+  /* parser/parser_prod.nit:3859 */
   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, 3064);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 3859);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos92 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAssignMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos93]) return;
+  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 = 3068;
+  fra.me.line = 3863;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -16857,19 +20737,19 @@ void parser___parser_prod___AAssignMethid___empty_init(val_t p0, int* init_table
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos93] = 1;
+  init_table[itpos92] = 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;
+  int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAssignMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos94]) return;
+  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 = 3070;
+  fra.me.line = 3865;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___init_aassignmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16881,41 +20761,41 @@ void parser___parser_prod___AAssignMethid___init_aassignmethid(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:3070 */
+  /* parser/parser_prod.nit:3865 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3075 */
+  /* parser/parser_prod.nit:3870 */
   CALL_parser___parser_prod___AAssignMethid___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:3076 */
+  /* parser/parser_prod.nit:3871 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3076);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3871);
   }
   ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3077 */
+  /* parser/parser_prod.nit:3872 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3077);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3872);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3078 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:3873 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3078);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3873);
   }
   ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3079 */
+  /* parser/parser_prod.nit:3874 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3079);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3874);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos93] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAssignMethid___replace_child[] = "parser_prod::AAssignMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAssignMethid___replace_child[] = "parser_prod::AAssignMethid::(parser_nodes::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;
@@ -16923,7 +20803,7 @@ 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 = 3082;
+  fra.me.line = 3877;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16935,11 +20815,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:3084 */
+  /* parser/parser_prod.nit:3879 */
   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, 3084);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3879);
   }
   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]));
@@ -16949,7 +20829,7 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3085 */
+    /* parser/parser_prod.nit:3880 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16964,32 +20844,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:3086 */
+      /* parser/parser_prod.nit:3881 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3086);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3881);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3087 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3882 */
       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, 3087);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3882);
       }
-      /* parser/parser_prod.nit:3088 */
+      /* parser/parser_prod.nit:3883 */
       ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3090 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3090);
+      /* parser/parser_prod.nit:3885 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3885);
     }
-    /* parser/parser_prod.nit:3092 */
+    /* parser/parser_prod.nit:3887 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3094 */
+  /* parser/parser_prod.nit:3889 */
   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, 3094);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 3889);
   }
   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]));
@@ -16999,7 +20879,7 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3095 */
+    /* parser/parser_prod.nit:3890 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17014,39 +20894,83 @@ 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:3096 */
+      /* parser/parser_prod.nit:3891 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3096);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3891);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3097 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3892 */
       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, 3097);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3892);
       }
-      /* parser/parser_prod.nit:3098 */
+      /* parser/parser_prod.nit:3893 */
       ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3100 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3100);
+      /* parser/parser_prod.nit:3895 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3895);
     }
-    /* parser/parser_prod.nit:3102 */
+    /* parser/parser_prod.nit:3897 */
     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)";
+static const char LOCATE_parser___parser_prod___AAssignMethid___n_id__eq[] = "parser_prod::AAssignMethid::(parser_nodes::AAssignMethid::n_id=)";
+void parser___parser_prod___AAssignMethid___n_id__eq(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 = 3901;
+  fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___n_id__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:3903 */
+  ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3904 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_assign__eq[] = "parser_prod::AAssignMethid::(parser_nodes::AAssignMethid::n_assign=)";
+void parser___parser_prod___AAssignMethid___n_assign__eq(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 = 3906;
+  fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___n_assign__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:3908 */
+  ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3909 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AAssignMethid::(parser_nodes::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 = 3106;
+  fra.me.line = 3913;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -17056,34 +20980,34 @@ void parser___parser_prod___AAssignMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3108 */
+  /* parser/parser_prod.nit:3915 */
   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, 3108);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3915);
   }
   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:3109 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:3916 */
   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, 3109);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 3916);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos94 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraassignMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos95]) return;
+  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 = 3113;
+  fra.me.line = 3920;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -17091,19 +21015,19 @@ void parser___parser_prod___ABraassignMethid___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos95] = 1;
+  init_table[itpos94] = 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;
+  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraassignMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos96]) return;
+  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 = 3115;
+  fra.me.line = 3922;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___init_abraassignmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -17117,54 +21041,54 @@ void parser___parser_prod___ABraassignMethid___init_abraassignmethid(val_t p0, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:3115 */
+  /* parser/parser_prod.nit:3922 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3121 */
+  /* parser/parser_prod.nit:3928 */
   CALL_parser___parser_prod___ABraassignMethid___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:3122 */
+  /* parser/parser_prod.nit:3929 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3122);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3929);
   }
   ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3123 */
+  /* parser/parser_prod.nit:3930 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3123);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3930);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:3124 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:3931 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3124);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3931);
   }
   ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3125 */
+  /* parser/parser_prod.nit:3932 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3125);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3932);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:3126 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:3933 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3126);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3933);
   }
   ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3127 */
+  /* parser/parser_prod.nit:3934 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3127);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3934);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos95] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ABraassignMethid___replace_child[] = "parser_prod::ABraassignMethid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ABraassignMethid___replace_child[] = "parser_prod::ABraassignMethid::(parser_nodes::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;
@@ -17172,7 +21096,7 @@ 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 = 3130;
+  fra.me.line = 3937;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17184,11 +21108,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:3132 */
+  /* parser/parser_prod.nit:3939 */
   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, 3132);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 3939);
   }
   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]));
@@ -17198,7 +21122,7 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3133 */
+    /* parser/parser_prod.nit:3940 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17213,32 +21137,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:3134 */
+      /* 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, 3134);
+        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:3135 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3942 */
       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, 3135);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3942);
       }
-      /* parser/parser_prod.nit:3136 */
+      /* parser/parser_prod.nit:3943 */
       ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3138 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3138);
+      /* parser/parser_prod.nit:3945 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3945);
     }
-    /* parser/parser_prod.nit:3140 */
+    /* parser/parser_prod.nit:3947 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3142 */
+  /* parser/parser_prod.nit:3949 */
   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, 3142);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 3949);
   }
   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]));
@@ -17248,7 +21172,7 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3143 */
+    /* parser/parser_prod.nit:3950 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17263,32 +21187,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:3144 */
+      /* 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, 3144);
+        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:3145 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3952 */
       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, 3145);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3952);
       }
-      /* parser/parser_prod.nit:3146 */
+      /* parser/parser_prod.nit:3953 */
       ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3148 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3148);
+      /* parser/parser_prod.nit:3955 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3955);
     }
-    /* parser/parser_prod.nit:3150 */
+    /* parser/parser_prod.nit:3957 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3152 */
+  /* parser/parser_prod.nit:3959 */
   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, 3152);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 3959);
   }
   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]));
@@ -17298,7 +21222,7 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3153 */
+    /* parser/parser_prod.nit:3960 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17313,39 +21237,105 @@ 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:3154 */
+      /* 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, 3154);
+        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:3155 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3962 */
       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, 3155);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3962);
       }
-      /* parser/parser_prod.nit:3156 */
+      /* parser/parser_prod.nit:3963 */
       ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3158 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3158);
+      /* parser/parser_prod.nit:3965 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3965);
     }
-    /* parser/parser_prod.nit:3160 */
+    /* parser/parser_prod.nit:3967 */
     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)";
+static const char LOCATE_parser___parser_prod___ABraassignMethid___n_obra__eq[] = "parser_prod::ABraassignMethid::(parser_nodes::ABraassignMethid::n_obra=)";
+void parser___parser_prod___ABraassignMethid___n_obra__eq(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 = 3971;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___n_obra__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:3973 */
+  ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3974 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_cbra__eq[] = "parser_prod::ABraassignMethid::(parser_nodes::ABraassignMethid::n_cbra=)";
+void parser___parser_prod___ABraassignMethid___n_cbra__eq(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 = 3976;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___n_cbra__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:3978 */
+  ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3979 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_assign__eq[] = "parser_prod::ABraassignMethid::(parser_nodes::ABraassignMethid::n_assign=)";
+void parser___parser_prod___ABraassignMethid___n_assign__eq(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 = 3981;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___n_assign__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:3983 */
+  ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3984 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ABraassignMethid::(parser_nodes::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 = 3164;
+  fra.me.line = 3988;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -17355,42 +21345,42 @@ void parser___parser_prod___ABraassignMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3166 */
+  /* parser/parser_prod.nit:3990 */
   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, 3166);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 3990);
   }
   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:3167 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:3991 */
   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, 3167);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 3991);
   }
   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:3168 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:3992 */
   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, 3168);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 3992);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos96 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASignature].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos97]) return;
+  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 = 3172;
+  fra.me.line = 3996;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -17398,20 +21388,20 @@ void parser___parser_prod___ASignature___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos97] = 1;
+  init_table[itpos96] = 1;
   return;
 }
 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;
+  int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASignature].i;
   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;
+  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 = 3174;
+  fra.me.line = 3998;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___init_asignature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -17428,11 +21418,11 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:3182 */
+  /* parser/parser_prod.nit:4006 */
   CALL_parser___parser_prod___ASignature___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:3183 */
+  /* parser/parser_prod.nit:4007 */
   ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3184 */
+  /* parser/parser_prod.nit:4008 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17447,17 +21437,17 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3185 */
+    /* parser/parser_prod.nit:4009 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3185);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4009);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_nodes___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:3192 */
+  /* parser/parser_prod.nit:4016 */
   ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3193 */
+  /* parser/parser_prod.nit:4017 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17472,16 +21462,16 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3194 */
+    /* parser/parser_prod.nit:4018 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3194);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4018);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:3196 */
+  /* parser/parser_prod.nit:4020 */
   ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3197 */
+  /* parser/parser_prod.nit:4021 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17496,16 +21486,16 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3198 */
+    /* parser/parser_prod.nit:4022 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3198);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4022);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos97] = 1;
   return;
 }
   void OC_parser___parser_prod___ASignature___init_asignature_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -17513,7 +21503,7 @@ 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:3187 */
+    /* parser/parser_prod.nit:4011 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -17527,22 +21517,22 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3188 */
+    /* parser/parser_prod.nit:4012 */
     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, 3188);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4012);
     }
-    /* parser/parser_prod.nit:3189 */
+    /* parser/parser_prod.nit:4013 */
     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, 3189);
+      nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 4013);
     }
     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:3190 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:4014 */
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -17551,7 +21541,7 @@ 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:3200 */
+    /* parser/parser_prod.nit:4024 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -17565,26 +21555,26 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3201 */
+    /* parser/parser_prod.nit:4025 */
     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, 3201);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4025);
     }
-    /* parser/parser_prod.nit:3202 */
+    /* parser/parser_prod.nit:4026 */
     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, 3202);
+      nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 4026);
     }
     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:3203 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:4027 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___ASignature___replace_child[] = "parser_prod::ASignature::(parser_nodes::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;
@@ -17595,7 +21585,7 @@ 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 = 3207;
+  fra.me.line = 4031;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17607,7 +21597,7 @@ 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:3209 */
+  /* parser/parser_prod.nit:4033 */
   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)) {
@@ -17622,7 +21612,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3210 */
+    /* parser/parser_prod.nit:4034 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17637,71 +21627,65 @@ 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:3211 */
+      /* parser/parser_prod.nit:4035 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3211);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4035);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3212 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4036 */
       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, 3212);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4036);
       }
-      /* parser/parser_prod.nit:3213 */
+      /* parser/parser_prod.nit:4037 */
       ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3215 */
+      /* parser/parser_prod.nit:4039 */
       ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3217 */
+    /* parser/parser_prod.nit:4041 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3219 */
+  /* parser/parser_prod.nit:4043 */
   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, 3219);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 4043);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:3219 */
+      /* parser/parser_prod.nit:4043 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:3220 */
+      /* parser/parser_prod.nit:4044 */
       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, 3220);
+        nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 4044);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:3221 */
+        /* parser/parser_prod.nit:4045 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -17716,52 +21700,52 @@ 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:3222 */
+          /* parser/parser_prod.nit:4046 */
           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, 3222);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4046);
           }
-          /* parser/parser_prod.nit:3223 */
+          /* parser/parser_prod.nit:4047 */
           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, 3223);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 4047);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(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:3224 */
+          /* parser/parser_prod.nit:4048 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3224);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4048);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:3226 */
+          /* parser/parser_prod.nit:4050 */
           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, 3226);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 4050);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(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:3228 */
+        /* parser/parser_prod.nit:4052 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:3231 */
+  /* parser/parser_prod.nit:4055 */
   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)) {
@@ -17776,7 +21760,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3232 */
+    /* parser/parser_prod.nit:4056 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17791,28 +21775,28 @@ 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:3233 */
+      /* parser/parser_prod.nit:4057 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3233);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4057);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3234 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4058 */
       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, 3234);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4058);
       }
-      /* parser/parser_prod.nit:3235 */
+      /* parser/parser_prod.nit:4059 */
       ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3237 */
+      /* parser/parser_prod.nit:4061 */
       ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3239 */
+    /* parser/parser_prod.nit:4063 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3241 */
+  /* parser/parser_prod.nit:4065 */
   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)) {
@@ -17827,7 +21811,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3242 */
+    /* parser/parser_prod.nit:4066 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17842,71 +21826,65 @@ 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:3243 */
+      /* parser/parser_prod.nit:4067 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3243);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4067);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3244 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4068 */
       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, 3244);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4068);
       }
-      /* parser/parser_prod.nit:3245 */
+      /* parser/parser_prod.nit:4069 */
       ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3247 */
+      /* parser/parser_prod.nit:4071 */
       ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3249 */
+    /* parser/parser_prod.nit:4073 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3251 */
+  /* parser/parser_prod.nit:4075 */
   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, 3251);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 4075);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:3251 */
+      /* parser/parser_prod.nit:4075 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:3252 */
+      /* parser/parser_prod.nit:4076 */
       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, 3252);
+        nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 4076);
       }
       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___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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:3253 */
+        /* parser/parser_prod.nit:4077 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -17921,47 +21899,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:3254 */
+          /* parser/parser_prod.nit:4078 */
           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, 3254);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4078);
           }
-          /* parser/parser_prod.nit:3255 */
+          /* parser/parser_prod.nit:4079 */
           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, 3255);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 4079);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(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:3256 */
+          /* parser/parser_prod.nit:4080 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3256);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4080);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:3258 */
+          /* parser/parser_prod.nit:4082 */
           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, 3258);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 4082);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(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:3260 */
+        /* parser/parser_prod.nit:4084 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label3;
     }
   }
@@ -17970,7 +21948,139 @@ 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)";
+static const char LOCATE_parser___parser_prod___ASignature___n_opar__eq[] = "parser_prod::ASignature::(parser_nodes::ASignature::n_opar=)";
+void parser___parser_prod___ASignature___n_opar__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4089;
+  fra.me.meth = LOCATE_parser___parser_prod___ASignature___n_opar__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:4091 */
+  ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4092 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4093 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4093);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_cpar__eq[] = "parser_prod::ASignature::(parser_nodes::ASignature::n_cpar=)";
+void parser___parser_prod___ASignature___n_cpar__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4096;
+  fra.me.meth = LOCATE_parser___parser_prod___ASignature___n_cpar__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:4098 */
+  ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4099 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4100 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4100);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_type__eq[] = "parser_prod::ASignature::(parser_nodes::ASignature::n_type=)";
+void parser___parser_prod___ASignature___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4103;
+  fra.me.meth = LOCATE_parser___parser_prod___ASignature___n_type__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:4105 */
+  ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4106 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4107 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4107);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ASignature::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -17978,7 +22088,7 @@ void parser___parser_prod___ASignature___visit_all(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 = 3265;
+  fra.me.line = 4112;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17989,9 +22099,9 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3265 */
+  /* parser/parser_prod.nit:4112 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3267 */
+  /* parser/parser_prod.nit:4114 */
   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)) {
@@ -18007,24 +22117,24 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3268 */
+    /* parser/parser_prod.nit:4115 */
     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, 3268);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4115);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3270 */
+  /* parser/parser_prod.nit:4117 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3270);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 4117);
   }
   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:3273 */
+  /* parser/parser_prod.nit:4120 */
   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)) {
@@ -18040,16 +22150,16 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3274 */
+    /* parser/parser_prod.nit:4121 */
     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, 3274);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4121);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3276 */
+  /* parser/parser_prod.nit:4123 */
   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)) {
@@ -18065,20 +22175,20 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3277 */
+    /* parser/parser_prod.nit:4124 */
     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, 3277);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4124);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3279 */
+  /* parser/parser_prod.nit:4126 */
   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, 3279);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 4126);
   }
   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));
@@ -18101,8 +22211,8 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3271 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:4118 */
+    CALL_parser___parser_nodes___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -18122,20 +22232,20 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3280 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:4127 */
+    CALL_parser___parser_nodes___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;
+  int itpos98 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParam].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos99]) return;
+  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 = 3285;
+  fra.me.line = 4132;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -18143,20 +22253,20 @@ void parser___parser_prod___AParam___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos99] = 1;
+  init_table[itpos98] = 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, val_t p4, int* init_table){
-  int itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParam].i;
+  int itpos99 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParam].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos100]) return;
+  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 = 3287;
+  fra.me.line = 4134;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___init_aparam;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -18172,26 +22282,26 @@ void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, v
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:3287 */
+  /* parser/parser_prod.nit:4134 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3294 */
+  /* parser/parser_prod.nit:4141 */
   CALL_parser___parser_prod___AParam___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:3295 */
+  /* parser/parser_prod.nit:4142 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3295);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4142);
   }
   ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3296 */
+  /* parser/parser_prod.nit:4143 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3296);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4143);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:3297 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:4144 */
   ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3298 */
+  /* parser/parser_prod.nit:4145 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18206,16 +22316,16 @@ 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:3299 */
+    /* parser/parser_prod.nit:4146 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3299);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4146);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:3301 */
+  /* parser/parser_prod.nit:4148 */
   ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3302 */
+  /* parser/parser_prod.nit:4149 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18230,16 +22340,16 @@ 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:3303 */
+    /* parser/parser_prod.nit:4150 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3303);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4150);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:3305 */
+  /* parser/parser_prod.nit:4152 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3306 */
+  /* parser/parser_prod.nit:4153 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18254,18 +22364,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:3307 */
+    /* parser/parser_prod.nit:4154 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3307);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4154);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos100] = 1;
+  init_table[itpos99] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AParam___replace_child[] = "parser_prod::AParam::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AParam___replace_child[] = "parser_prod::AParam::(parser_nodes::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;
@@ -18273,7 +22383,7 @@ 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 = 3311;
+  fra.me.line = 4158;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18285,11 +22395,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:3313 */
+  /* parser/parser_prod.nit:4160 */
   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, 3313);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4160);
   }
   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]));
@@ -18299,7 +22409,7 @@ 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:3314 */
+    /* parser/parser_prod.nit:4161 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18314,28 +22424,28 @@ 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:3315 */
+      /* parser/parser_prod.nit:4162 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3315);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4162);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3316 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4163 */
       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, 3316);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4163);
       }
-      /* parser/parser_prod.nit:3317 */
+      /* parser/parser_prod.nit:4164 */
       ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3319 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3319);
+      /* parser/parser_prod.nit:4166 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4166);
     }
-    /* parser/parser_prod.nit:3321 */
+    /* parser/parser_prod.nit:4168 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3323 */
+  /* parser/parser_prod.nit:4170 */
   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)) {
@@ -18350,7 +22460,7 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3324 */
+    /* parser/parser_prod.nit:4171 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18365,28 +22475,28 @@ 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:3325 */
+      /* parser/parser_prod.nit:4172 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3325);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4172);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3326 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4173 */
       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, 3326);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4173);
       }
-      /* parser/parser_prod.nit:3327 */
+      /* parser/parser_prod.nit:4174 */
       ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3329 */
+      /* parser/parser_prod.nit:4176 */
       ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3331 */
+    /* parser/parser_prod.nit:4178 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3333 */
+  /* parser/parser_prod.nit:4180 */
   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)) {
@@ -18401,7 +22511,7 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3334 */
+    /* parser/parser_prod.nit:4181 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18416,28 +22526,28 @@ 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:3335 */
+      /* parser/parser_prod.nit:4182 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3335);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4182);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3336 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4183 */
       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, 3336);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4183);
       }
-      /* parser/parser_prod.nit:3337 */
+      /* parser/parser_prod.nit:4184 */
       ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3339 */
+      /* parser/parser_prod.nit:4186 */
       ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3341 */
+    /* parser/parser_prod.nit:4188 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3343 */
+  /* parser/parser_prod.nit:4190 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -18452,7 +22562,7 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3344 */
+    /* parser/parser_prod.nit:4191 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18467,32 +22577,186 @@ 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:3345 */
+      /* parser/parser_prod.nit:4192 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3345);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4192);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3346 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4193 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3346);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4193);
       }
-      /* parser/parser_prod.nit:3347 */
+      /* parser/parser_prod.nit:4194 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3349 */
+      /* parser/parser_prod.nit:4196 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3351 */
+    /* parser/parser_prod.nit:4198 */
     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)";
+static const char LOCATE_parser___parser_prod___AParam___n_id__eq[] = "parser_prod::AParam::(parser_nodes::AParam::n_id=)";
+void parser___parser_prod___AParam___n_id__eq(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 = 4202;
+  fra.me.meth = LOCATE_parser___parser_prod___AParam___n_id__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:4204 */
+  ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4205 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AParam___n_type__eq[] = "parser_prod::AParam::(parser_nodes::AParam::n_type=)";
+void parser___parser_prod___AParam___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4207;
+  fra.me.meth = LOCATE_parser___parser_prod___AParam___n_type__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:4209 */
+  ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4210 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4211 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4211);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AParam___n_dotdotdot__eq[] = "parser_prod::AParam::(parser_nodes::AParam::n_dotdotdot=)";
+void parser___parser_prod___AParam___n_dotdotdot__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4214;
+  fra.me.meth = LOCATE_parser___parser_prod___AParam___n_dotdotdot__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:4216 */
+  ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4217 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4218 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4218);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AParam___n_annotations__eq[] = "parser_prod::AParam::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AParam___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4221;
+  fra.me.meth = LOCATE_parser___parser_prod___AParam___n_annotations__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:4223 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4224 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4225 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4225);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AParam___visit_all[] = "parser_prod::AParam::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -18500,7 +22764,7 @@ void parser___parser_prod___AParam___visit_all(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 = 3355;
+  fra.me.line = 4230;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18511,17 +22775,17 @@ void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3355 */
+  /* parser/parser_prod.nit:4230 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3357 */
+  /* parser/parser_prod.nit:4232 */
   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, 3357);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4232);
   }
   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:3358 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4233 */
   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)) {
@@ -18537,16 +22801,16 @@ void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3359 */
+    /* parser/parser_prod.nit:4234 */
     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, 3359);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4234);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3361 */
+  /* parser/parser_prod.nit:4236 */
   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)) {
@@ -18562,16 +22826,16 @@ void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3362 */
+    /* parser/parser_prod.nit:4237 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], 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, 3362);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4237);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3364 */
+  /* parser/parser_prod.nit:4239 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -18587,27 +22851,27 @@ void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3365 */
+    /* parser/parser_prod.nit:4240 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3365);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4240);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDecl].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos101]) return;
+  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 = 3370;
+  fra.me.line = 4245;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -18615,20 +22879,20 @@ void parser___parser_prod___AClosureDecl___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos101] = 1;
+  init_table[itpos100] = 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;
+  int itpos101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDecl].i;
   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;
+  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 = 3372;
+  fra.me.line = 4247;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___init_aclosuredecl;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -18646,13 +22910,13 @@ void parser___parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1,
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:3372 */
+  /* parser/parser_prod.nit:4247 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3380 */
+  /* parser/parser_prod.nit:4255 */
   CALL_parser___parser_prod___AClosureDecl___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:3381 */
+  /* parser/parser_prod.nit:4256 */
   ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3382 */
+  /* parser/parser_prod.nit:4257 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18667,55 +22931,55 @@ 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:3383 */
+    /* parser/parser_prod.nit:4258 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3383);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4258);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
   }
-  /* parser/parser_prod.nit:3385 */
+  /* parser/parser_prod.nit:4260 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3385);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4260);
   }
   ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3386 */
+  /* parser/parser_prod.nit:4261 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3386);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4261);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:3387 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:4262 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3387);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4262);
   }
   ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3388 */
+  /* parser/parser_prod.nit:4263 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3388);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4263);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:3389 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:4264 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3389);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4264);
   }
   ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3390 */
+  /* parser/parser_prod.nit:4265 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3390);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4265);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:3391 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:4266 */
   ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:3392 */
+  /* parser/parser_prod.nit:4267 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18730,18 +22994,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:3393 */
+    /* parser/parser_prod.nit:4268 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3393);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4268);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos101] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AClosureDecl___replace_child[] = "parser_prod::AClosureDecl::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AClosureDecl___replace_child[] = "parser_prod::AClosureDecl::(parser_nodes::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;
@@ -18749,7 +23013,7 @@ 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 = 3397;
+  fra.me.line = 4272;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18761,7 +23025,7 @@ 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:3399 */
+  /* parser/parser_prod.nit:4274 */
   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)) {
@@ -18776,7 +23040,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3400 */
+    /* parser/parser_prod.nit:4275 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18791,32 +23055,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:3401 */
+      /* parser/parser_prod.nit:4276 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3401);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4276);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3402 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4277 */
       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, 3402);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4277);
       }
-      /* parser/parser_prod.nit:3403 */
+      /* parser/parser_prod.nit:4278 */
       ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3405 */
+      /* parser/parser_prod.nit:4280 */
       ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3407 */
+    /* parser/parser_prod.nit:4282 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3409 */
+  /* parser/parser_prod.nit:4284 */
   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, 3409);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 4284);
   }
   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]));
@@ -18826,7 +23090,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3410 */
+    /* parser/parser_prod.nit:4285 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18841,32 +23105,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:3411 */
+      /* parser/parser_prod.nit:4286 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3411);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4286);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3412 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4287 */
       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, 3412);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4287);
       }
-      /* parser/parser_prod.nit:3413 */
+      /* parser/parser_prod.nit:4288 */
       ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3415 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3415);
+      /* parser/parser_prod.nit:4290 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4290);
     }
-    /* parser/parser_prod.nit:3417 */
+    /* parser/parser_prod.nit:4292 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3419 */
+  /* parser/parser_prod.nit:4294 */
   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, 3419);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4294);
   }
   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]));
@@ -18876,7 +23140,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3420 */
+    /* parser/parser_prod.nit:4295 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18891,32 +23155,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:3421 */
+      /* parser/parser_prod.nit:4296 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3421);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4296);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3422 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4297 */
       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, 3422);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4297);
       }
-      /* parser/parser_prod.nit:3423 */
+      /* parser/parser_prod.nit:4298 */
       ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3425 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3425);
+      /* parser/parser_prod.nit:4300 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4300);
     }
-    /* parser/parser_prod.nit:3427 */
+    /* parser/parser_prod.nit:4302 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3429 */
+  /* parser/parser_prod.nit:4304 */
   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, 3429);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 4304);
   }
   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]));
@@ -18926,7 +23190,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3430 */
+    /* parser/parser_prod.nit:4305 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18941,28 +23205,28 @@ 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:3431 */
+      /* parser/parser_prod.nit:4306 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3431);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4306);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3432 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4307 */
       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, 3432);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4307);
       }
-      /* parser/parser_prod.nit:3433 */
+      /* parser/parser_prod.nit:4308 */
       ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3435 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3435);
+      /* parser/parser_prod.nit:4310 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4310);
     }
-    /* parser/parser_prod.nit:3437 */
+    /* parser/parser_prod.nit:4312 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3439 */
+  /* parser/parser_prod.nit:4314 */
   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)) {
@@ -18977,7 +23241,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3440 */
+    /* parser/parser_prod.nit:4315 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18992,32 +23256,186 @@ 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:3441 */
+      /* parser/parser_prod.nit:4316 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3441);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4316);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3442 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4317 */
       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, 3442);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4317);
       }
-      /* parser/parser_prod.nit:3443 */
+      /* parser/parser_prod.nit:4318 */
       ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3445 */
+      /* parser/parser_prod.nit:4320 */
       ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3447 */
+    /* parser/parser_prod.nit:4322 */
     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)";
+static const char LOCATE_parser___parser_prod___AClosureDecl___n_kwbreak__eq[] = "parser_prod::AClosureDecl::(parser_nodes::AClosureDecl::n_kwbreak=)";
+void parser___parser_prod___AClosureDecl___n_kwbreak__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4326;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___n_kwbreak__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:4328 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4329 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4330 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4330);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AClosureDecl___n_bang__eq[] = "parser_prod::AClosureDecl::(parser_nodes::AClosureDecl::n_bang=)";
+void parser___parser_prod___AClosureDecl___n_bang__eq(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 = 4333;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___n_bang__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:4335 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4336 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AClosureDecl___n_id__eq[] = "parser_prod::AClosureDecl::(parser_nodes::AClosureDecl::n_id=)";
+void parser___parser_prod___AClosureDecl___n_id__eq(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 = 4338;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___n_id__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:4340 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4341 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AClosureDecl___n_signature__eq[] = "parser_prod::AClosureDecl::(parser_nodes::AClosureDecl::n_signature=)";
+void parser___parser_prod___AClosureDecl___n_signature__eq(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 = 4343;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___n_signature__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:4345 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4346 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AClosureDecl___n_expr__eq[] = "parser_prod::AClosureDecl::(parser_nodes::AClosureDecl::n_expr=)";
+void parser___parser_prod___AClosureDecl___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4348;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___n_expr__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:4350 */
+  ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4351 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4352 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4352);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AClosureDecl___visit_all[] = "parser_prod::AClosureDecl::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -19025,7 +23443,7 @@ void parser___parser_prod___AClosureDecl___visit_all(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 = 3451;
+  fra.me.line = 4357;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19036,9 +23454,9 @@ void parser___parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3451 */
+  /* parser/parser_prod.nit:4357 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3453 */
+  /* parser/parser_prod.nit:4359 */
   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)) {
@@ -19054,40 +23472,40 @@ void parser___parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3454 */
+    /* parser/parser_prod.nit:4360 */
     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, 3454);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4360);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3456 */
+  /* parser/parser_prod.nit:4362 */
   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, 3456);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 4362);
   }
   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:3457 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4363 */
   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, 3457);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4363);
   }
   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:3458 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4364 */
   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, 3458);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 4364);
   }
   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:3459 */
+  CALL_parser___parser_nodes___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___AClosureDecl____n_expr(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19103,27 +23521,27 @@ void parser___parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3460 */
+    /* parser/parser_prod.nit:4366 */
     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, 3460);
+      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[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos102 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AType].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos103]) return;
+  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 = 3465;
+  fra.me.line = 4371;
   fra.me.meth = LOCATE_parser___parser_prod___AType___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -19131,20 +23549,20 @@ void parser___parser_prod___AType___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos103] = 1;
+  init_table[itpos102] = 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, val_t p4, int* init_table){
-  int itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AType].i;
+  int itpos103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AType].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos104]) return;
+  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 = 3467;
+  fra.me.line = 4373;
   fra.me.meth = LOCATE_parser___parser_prod___AType___init_atype;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -19160,13 +23578,13 @@ void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:3467 */
+  /* parser/parser_prod.nit:4373 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3474 */
+  /* parser/parser_prod.nit:4380 */
   CALL_parser___parser_prod___AType___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:3475 */
+  /* parser/parser_prod.nit:4381 */
   ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3476 */
+  /* parser/parser_prod.nit:4382 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19181,30 +23599,30 @@ 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:3477 */
+    /* parser/parser_prod.nit:4383 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3477);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4383);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:3479 */
+  /* parser/parser_prod.nit:4385 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3479);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4385);
   }
   ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3480 */
+  /* parser/parser_prod.nit:4386 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3480);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4386);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
   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));
-  /* parser/parser_prod.nit:3486 */
+  /* parser/parser_prod.nit:4392 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3487 */
+  /* parser/parser_prod.nit:4393 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19219,15 +23637,15 @@ 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:3488 */
+    /* parser/parser_prod.nit:4394 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3488);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4394);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos104] = 1;
+  init_table[itpos103] = 1;
   return;
 }
   void OC_parser___parser_prod___AType___init_atype_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -19235,7 +23653,7 @@ 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:3481 */
+    /* parser/parser_prod.nit:4387 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -19249,26 +23667,26 @@ void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3482 */
+    /* parser/parser_prod.nit:4388 */
     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, 3482);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4388);
     }
-    /* parser/parser_prod.nit:3483 */
+    /* parser/parser_prod.nit:4389 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(closctx->REG[5])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3483);
+      nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 4389);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AType____n_types(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:3484 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[5]);
+    /* parser/parser_prod.nit:4390 */
+    CALL_parser___parser_nodes___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___AType___replace_child[] = "parser_prod::AType::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AType___replace_child[] = "parser_prod::AType::(parser_nodes::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;
@@ -19279,7 +23697,7 @@ 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 = 3492;
+  fra.me.line = 4398;
   fra.me.meth = LOCATE_parser___parser_prod___AType___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19291,7 +23709,7 @@ 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:3494 */
+  /* parser/parser_prod.nit:4400 */
   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)) {
@@ -19306,7 +23724,7 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3495 */
+    /* parser/parser_prod.nit:4401 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19321,32 +23739,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:3496 */
+      /* parser/parser_prod.nit:4402 */
       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, 4402);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3497 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4403 */
       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, 3497);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4403);
       }
-      /* parser/parser_prod.nit:3498 */
+      /* parser/parser_prod.nit:4404 */
       ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3500 */
+      /* parser/parser_prod.nit:4406 */
       ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3502 */
+    /* parser/parser_prod.nit:4408 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3504 */
+  /* parser/parser_prod.nit:4410 */
   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, 3504);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4410);
   }
   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]));
@@ -19356,7 +23774,7 @@ 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:3505 */
+    /* parser/parser_prod.nit:4411 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19371,71 +23789,65 @@ 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:3506 */
+      /* parser/parser_prod.nit:4412 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3506);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4412);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3507 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4413 */
       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, 3507);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4413);
       }
-      /* parser/parser_prod.nit:3508 */
+      /* parser/parser_prod.nit:4414 */
       ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3510 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3510);
+      /* parser/parser_prod.nit:4416 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4416);
     }
-    /* parser/parser_prod.nit:3512 */
+    /* parser/parser_prod.nit:4418 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3514 */
+  /* parser/parser_prod.nit:4420 */
   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, 3514);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 4420);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:3514 */
+      /* parser/parser_prod.nit:4420 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:3515 */
+      /* parser/parser_prod.nit:4421 */
       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, 3515);
+        nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 4421);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:3516 */
+        /* parser/parser_prod.nit:4422 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -19450,52 +23862,52 @@ 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:3517 */
+          /* parser/parser_prod.nit:4423 */
           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, 3517);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4423);
           }
-          /* parser/parser_prod.nit:3518 */
+          /* parser/parser_prod.nit:4424 */
           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, 3518);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 4424);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(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:3519 */
+          /* parser/parser_prod.nit:4425 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3519);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4425);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:3521 */
+          /* parser/parser_prod.nit:4427 */
           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, 3521);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 4427);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(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:3523 */
+        /* parser/parser_prod.nit:4429 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:3526 */
+  /* parser/parser_prod.nit:4432 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -19510,7 +23922,7 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3527 */
+    /* parser/parser_prod.nit:4433 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19525,32 +23937,142 @@ 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:3528 */
+      /* parser/parser_prod.nit:4434 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3528);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4434);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3529 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4435 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3529);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4435);
       }
-      /* parser/parser_prod.nit:3530 */
+      /* parser/parser_prod.nit:4436 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3532 */
+      /* parser/parser_prod.nit:4438 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3534 */
+    /* parser/parser_prod.nit:4440 */
     goto label1;
   }
   label1: while(0);
   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)";
+static const char LOCATE_parser___parser_prod___AType___n_kwnullable__eq[] = "parser_prod::AType::(parser_nodes::AType::n_kwnullable=)";
+void parser___parser_prod___AType___n_kwnullable__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4444;
+  fra.me.meth = LOCATE_parser___parser_prod___AType___n_kwnullable__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:4446 */
+  ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4447 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4448 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4448);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AType___n_id__eq[] = "parser_prod::AType::(parser_nodes::AType::n_id=)";
+void parser___parser_prod___AType___n_id__eq(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 = 4451;
+  fra.me.meth = LOCATE_parser___parser_prod___AType___n_id__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:4453 */
+  ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4454 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AType___n_annotations__eq[] = "parser_prod::AType::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AType___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4456;
+  fra.me.meth = LOCATE_parser___parser_prod___AType___n_annotations__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:4458 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4459 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4460 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4460);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AType___visit_all[] = "parser_prod::AType::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -19558,7 +24080,7 @@ void parser___parser_prod___AType___visit_all(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 = 3538;
+  fra.me.line = 4465;
   fra.me.meth = LOCATE_parser___parser_prod___AType___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19569,9 +24091,9 @@ void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3538 */
+  /* parser/parser_prod.nit:4465 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3540 */
+  /* parser/parser_prod.nit:4467 */
   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)) {
@@ -19587,32 +24109,32 @@ void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3541 */
+    /* parser/parser_prod.nit:4468 */
     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, 3541);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4468);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3543 */
+  /* parser/parser_prod.nit:4470 */
   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, 3543);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4470);
   }
   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:3544 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4471 */
   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, 3544);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 4471);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(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___AType___visit_all_1));
-  /* parser/parser_prod.nit:3547 */
+  /* parser/parser_prod.nit:4474 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19628,14 +24150,14 @@ void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3548 */
+    /* parser/parser_prod.nit:4475 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3548);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4475);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -19656,20 +24178,20 @@ void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3545 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:4472 */
+    CALL_parser___parser_nodes___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;
+  int itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALabel].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos105]) return;
+  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 = 3553;
+  fra.me.line = 4480;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -19677,19 +24199,19 @@ void parser___parser_prod___ALabel___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos105] = 1;
+  init_table[itpos104] = 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;
+  int itpos105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALabel].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos106]) return;
+  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 = 3555;
+  fra.me.line = 4482;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___init_alabel;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19701,41 +24223,41 @@ void parser___parser_prod___ALabel___init_alabel(val_t p0, val_t p1, val_t p2, i
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3555 */
+  /* parser/parser_prod.nit:4482 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3560 */
+  /* parser/parser_prod.nit:4487 */
   CALL_parser___parser_prod___ALabel___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:3561 */
+  /* parser/parser_prod.nit:4488 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3561);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4488);
   }
   ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3562 */
+  /* parser/parser_prod.nit:4489 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3562);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4489);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3563 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4490 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3563);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4490);
   }
   ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3564 */
+  /* parser/parser_prod.nit:4491 */
   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, 4491);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos105] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ALabel___replace_child[] = "parser_prod::ALabel::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ALabel___replace_child[] = "parser_prod::ALabel::(parser_nodes::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;
@@ -19743,7 +24265,7 @@ 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 = 3567;
+  fra.me.line = 4494;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19755,11 +24277,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:3569 */
+  /* parser/parser_prod.nit:4496 */
   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, 3569);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 4496);
   }
   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]));
@@ -19769,7 +24291,7 @@ 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:3570 */
+    /* parser/parser_prod.nit:4497 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19784,32 +24306,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:3571 */
+      /* parser/parser_prod.nit:4498 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3571);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4498);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3572 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4499 */
       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, 3572);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4499);
       }
-      /* parser/parser_prod.nit:3573 */
+      /* parser/parser_prod.nit:4500 */
       ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3575 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3575);
+      /* parser/parser_prod.nit:4502 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4502);
     }
-    /* parser/parser_prod.nit:3577 */
+    /* parser/parser_prod.nit:4504 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3579 */
+  /* parser/parser_prod.nit:4506 */
   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, 3579);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4506);
   }
   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]));
@@ -19819,7 +24341,7 @@ 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:3580 */
+    /* parser/parser_prod.nit:4507 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19834,39 +24356,83 @@ 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:3581 */
+      /* parser/parser_prod.nit:4508 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3581);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4508);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3582 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4509 */
       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, 3582);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4509);
       }
-      /* parser/parser_prod.nit:3583 */
+      /* parser/parser_prod.nit:4510 */
       ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3585 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3585);
+      /* parser/parser_prod.nit:4512 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4512);
     }
-    /* parser/parser_prod.nit:3587 */
+    /* parser/parser_prod.nit:4514 */
     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)";
+static const char LOCATE_parser___parser_prod___ALabel___n_kwlabel__eq[] = "parser_prod::ALabel::(parser_nodes::ALabel::n_kwlabel=)";
+void parser___parser_prod___ALabel___n_kwlabel__eq(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 = 4518;
+  fra.me.meth = LOCATE_parser___parser_prod___ALabel___n_kwlabel__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:4520 */
+  ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4521 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ALabel___n_id__eq[] = "parser_prod::ALabel::(parser_nodes::ALabel::n_id=)";
+void parser___parser_prod___ALabel___n_id__eq(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 = 4523;
+  fra.me.meth = LOCATE_parser___parser_prod___ALabel___n_id__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:4525 */
+  ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4526 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ALabel___visit_all[] = "parser_prod::ALabel::(parser_nodes::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 = 3591;
+  fra.me.line = 4530;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -19876,34 +24442,34 @@ void parser___parser_prod___ALabel___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3593 */
+  /* parser/parser_prod.nit:4532 */
   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, 3593);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 4532);
   }
   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:3594 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:4533 */
   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, 3594);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4533);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos106 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABlockExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos107]) return;
+  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 = 3598;
+  fra.me.line = 4537;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -19911,20 +24477,20 @@ void parser___parser_prod___ABlockExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos107] = 1;
+  init_table[itpos106] = 1;
   return;
 }
 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;
+  int itpos107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABlockExpr].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[itpos108]) return;
+  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 = 3600;
+  fra.me.line = 4539;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___init_ablockexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -19935,12 +24501,12 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(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:3605 */
+  /* parser/parser_prod.nit:4544 */
   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:3611 */
+  /* parser/parser_prod.nit:4550 */
   ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3612 */
+  /* parser/parser_prod.nit:4551 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19955,15 +24521,15 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3613 */
+    /* parser/parser_prod.nit:4552 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3613);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4552);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos107] = 1;
   return;
 }
   void OC_parser___parser_prod___ABlockExpr___init_ablockexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -19971,7 +24537,7 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:3606 */
+    /* parser/parser_prod.nit:4545 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -19985,26 +24551,26 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3607 */
+    /* parser/parser_prod.nit:4546 */
     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, 3607);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4546);
     }
-    /* parser/parser_prod.nit:3608 */
+    /* parser/parser_prod.nit:4547 */
     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, 3608);
+      nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4547);
     }
     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:3609 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:4548 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___ABlockExpr___replace_child[] = "parser_prod::ABlockExpr::(parser_nodes::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;
@@ -20015,7 +24581,7 @@ 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 = 3617;
+  fra.me.line = 4556;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20027,50 +24593,44 @@ 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:3619 */
+  /* parser/parser_prod.nit:4558 */
   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, 3619);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4558);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:3619 */
+      /* parser/parser_prod.nit:4558 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:3620 */
+      /* parser/parser_prod.nit:4559 */
       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, 3620);
+        nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4559);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:3621 */
+        /* parser/parser_prod.nit:4560 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -20085,52 +24645,52 @@ 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:3622 */
+          /* parser/parser_prod.nit:4561 */
           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, 3622);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4561);
           }
-          /* parser/parser_prod.nit:3623 */
+          /* parser/parser_prod.nit:4562 */
           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, 3623);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4562);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(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:3624 */
+          /* parser/parser_prod.nit:4563 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3624);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4563);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:3626 */
+          /* parser/parser_prod.nit:4565 */
           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, 3626);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4565);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(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:3628 */
+        /* parser/parser_prod.nit:4567 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:3631 */
+  /* parser/parser_prod.nit:4570 */
   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)) {
@@ -20145,7 +24705,7 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3632 */
+    /* parser/parser_prod.nit:4571 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20160,32 +24720,76 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3633 */
+      /* parser/parser_prod.nit:4572 */
       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, 4572);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3634 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4573 */
       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, 3634);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4573);
       }
-      /* parser/parser_prod.nit:3635 */
+      /* parser/parser_prod.nit:4574 */
       ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3637 */
+      /* parser/parser_prod.nit:4576 */
       ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3639 */
+    /* parser/parser_prod.nit:4578 */
     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)";
+static const char LOCATE_parser___parser_prod___ABlockExpr___n_kwend__eq[] = "parser_prod::ABlockExpr::(parser_nodes::ABlockExpr::n_kwend=)";
+void parser___parser_prod___ABlockExpr___n_kwend__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4582;
+  fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___n_kwend__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:4584 */
+  ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4585 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4586 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4586);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ABlockExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -20193,7 +24797,7 @@ void parser___parser_prod___ABlockExpr___visit_all(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 = 3643;
+  fra.me.line = 4591;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20204,17 +24808,17 @@ void parser___parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3643 */
+  /* parser/parser_prod.nit:4591 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3645 */
+  /* parser/parser_prod.nit:4593 */
   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, 3645);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4593);
   }
   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:3648 */
+  /* parser/parser_prod.nit:4596 */
   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)) {
@@ -20230,14 +24834,14 @@ void parser___parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3649 */
+    /* parser/parser_prod.nit:4597 */
     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, 3649);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4597);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -20258,20 +24862,20 @@ void parser___parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3646 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:4594 */
+    CALL_parser___parser_nodes___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;
+  int itpos108 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVardeclExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos109]) return;
+  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 = 3654;
+  fra.me.line = 4602;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -20279,20 +24883,20 @@ void parser___parser_prod___AVardeclExpr___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos109] = 1;
+  init_table[itpos108] = 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, val_t p6, int* init_table){
-  int itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVardeclExpr].i;
+  int itpos109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVardeclExpr].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[itpos110]) return;
+  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 = 3656;
+  fra.me.line = 4604;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___init_avardeclexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -20312,39 +24916,39 @@ void parser___parser_prod___AVardeclExpr___init_avardeclexpr(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:3656 */
+  /* parser/parser_prod.nit:4604 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3665 */
+  /* parser/parser_prod.nit:4613 */
   CALL_parser___parser_prod___AVardeclExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:3666 */
+  /* parser/parser_prod.nit:4614 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3666);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4614);
   }
   ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3667 */
+  /* parser/parser_prod.nit:4615 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3667);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4615);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-  /* parser/parser_prod.nit:3668 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+  /* parser/parser_prod.nit:4616 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3668);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4616);
   }
   ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3669 */
+  /* parser/parser_prod.nit:4617 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3669);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4617);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
-  /* parser/parser_prod.nit:3670 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+  /* parser/parser_prod.nit:4618 */
   ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3671 */
+  /* parser/parser_prod.nit:4619 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20359,16 +24963,16 @@ 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:3672 */
+    /* parser/parser_prod.nit:4620 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3672);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4620);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:3674 */
+  /* parser/parser_prod.nit:4622 */
   ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3675 */
+  /* parser/parser_prod.nit:4623 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20383,16 +24987,16 @@ 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:3676 */
+    /* parser/parser_prod.nit:4624 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3676);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4624);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:3678 */
+  /* parser/parser_prod.nit:4626 */
   ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:3679 */
+  /* parser/parser_prod.nit:4627 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20407,16 +25011,16 @@ 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:3680 */
+    /* parser/parser_prod.nit:4628 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3680);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4628);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:3682 */
+  /* parser/parser_prod.nit:4630 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:3683 */
+  /* parser/parser_prod.nit:4631 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20431,18 +25035,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:3684 */
+    /* parser/parser_prod.nit:4632 */
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3684);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4632);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos110] = 1;
+  init_table[itpos109] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AVardeclExpr___replace_child[] = "parser_prod::AVardeclExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AVardeclExpr___replace_child[] = "parser_prod::AVardeclExpr::(parser_nodes::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;
@@ -20450,7 +25054,7 @@ 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 = 3688;
+  fra.me.line = 4636;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20462,11 +25066,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:3690 */
+  /* parser/parser_prod.nit:4638 */
   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, 3690);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 4638);
   }
   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]));
@@ -20476,7 +25080,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3691 */
+    /* parser/parser_prod.nit:4639 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20491,32 +25095,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:3692 */
+      /* parser/parser_prod.nit:4640 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3692);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4640);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3693 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4641 */
       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, 3693);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4641);
       }
-      /* parser/parser_prod.nit:3694 */
+      /* parser/parser_prod.nit:4642 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3696 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3696);
+      /* parser/parser_prod.nit:4644 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4644);
     }
-    /* parser/parser_prod.nit:3698 */
+    /* parser/parser_prod.nit:4646 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3700 */
+  /* parser/parser_prod.nit:4648 */
   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, 3700);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4648);
   }
   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]));
@@ -20526,7 +25130,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3701 */
+    /* parser/parser_prod.nit:4649 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20541,28 +25145,28 @@ 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:3702 */
+      /* parser/parser_prod.nit:4650 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3702);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4650);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3703 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4651 */
       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, 3703);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4651);
       }
-      /* parser/parser_prod.nit:3704 */
+      /* parser/parser_prod.nit:4652 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3706 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3706);
+      /* parser/parser_prod.nit:4654 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4654);
     }
-    /* parser/parser_prod.nit:3708 */
+    /* parser/parser_prod.nit:4656 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3710 */
+  /* parser/parser_prod.nit:4658 */
   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)) {
@@ -20577,7 +25181,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3711 */
+    /* parser/parser_prod.nit:4659 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20592,28 +25196,28 @@ 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:3712 */
+      /* parser/parser_prod.nit:4660 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3712);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4660);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3713 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4661 */
       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, 3713);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4661);
       }
-      /* parser/parser_prod.nit:3714 */
+      /* parser/parser_prod.nit:4662 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3716 */
+      /* parser/parser_prod.nit:4664 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3718 */
+    /* parser/parser_prod.nit:4666 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3720 */
+  /* parser/parser_prod.nit:4668 */
   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)) {
@@ -20628,7 +25232,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3721 */
+    /* parser/parser_prod.nit:4669 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20643,28 +25247,28 @@ 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:3722 */
+      /* parser/parser_prod.nit:4670 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3722);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4670);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3723 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4671 */
       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, 3723);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4671);
       }
-      /* parser/parser_prod.nit:3724 */
+      /* parser/parser_prod.nit:4672 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3726 */
+      /* parser/parser_prod.nit:4674 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3728 */
+    /* parser/parser_prod.nit:4676 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3730 */
+  /* parser/parser_prod.nit:4678 */
   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)) {
@@ -20679,7 +25283,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3731 */
+    /* parser/parser_prod.nit:4679 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20694,28 +25298,28 @@ 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:3732 */
+      /* parser/parser_prod.nit:4680 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3732);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4680);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3733 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4681 */
       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, 3733);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4681);
       }
-      /* parser/parser_prod.nit:3734 */
+      /* parser/parser_prod.nit:4682 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3736 */
+      /* parser/parser_prod.nit:4684 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3738 */
+    /* parser/parser_prod.nit:4686 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3740 */
+  /* parser/parser_prod.nit:4688 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -20730,7 +25334,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3741 */
+    /* parser/parser_prod.nit:4689 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20745,32 +25349,252 @@ 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:3742 */
+      /* 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, 3742);
+        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:3743 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4691 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3743);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4691);
       }
-      /* parser/parser_prod.nit:3744 */
+      /* parser/parser_prod.nit:4692 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3746 */
+      /* parser/parser_prod.nit:4694 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3748 */
+    /* parser/parser_prod.nit:4696 */
     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)";
+static const char LOCATE_parser___parser_prod___AVardeclExpr___n_kwvar__eq[] = "parser_prod::AVardeclExpr::(parser_nodes::AVardeclExpr::n_kwvar=)";
+void parser___parser_prod___AVardeclExpr___n_kwvar__eq(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 = 4700;
+  fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___n_kwvar__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:4702 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4703 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AVardeclExpr___n_id__eq[] = "parser_prod::AVardeclExpr::(parser_nodes::AVardeclExpr::n_id=)";
+void parser___parser_prod___AVardeclExpr___n_id__eq(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 = 4705;
+  fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___n_id__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:4707 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4708 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AVardeclExpr___n_type__eq[] = "parser_prod::AVardeclExpr::(parser_nodes::AVardeclExpr::n_type=)";
+void parser___parser_prod___AVardeclExpr___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4710;
+  fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___n_type__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:4712 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4713 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4714 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4714);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AVardeclExpr___n_assign__eq[] = "parser_prod::AVardeclExpr::(parser_nodes::AVardeclExpr::n_assign=)";
+void parser___parser_prod___AVardeclExpr___n_assign__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4717;
+  fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___n_assign__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:4719 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4720 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4721 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4721);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AVardeclExpr___n_expr__eq[] = "parser_prod::AVardeclExpr::(parser_nodes::AVardeclExpr::n_expr=)";
+void parser___parser_prod___AVardeclExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4724;
+  fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___n_expr__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:4726 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4727 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4728 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4728);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AVardeclExpr___n_annotations__eq[] = "parser_prod::AVardeclExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AVardeclExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4731;
+  fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___n_annotations__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:4733 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4734 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4735 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4735);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AVardeclExpr___visit_all[] = "parser_prod::AVardeclExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -20778,7 +25602,7 @@ void parser___parser_prod___AVardeclExpr___visit_all(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 = 3752;
+  fra.me.line = 4740;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20789,25 +25613,25 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3752 */
+  /* parser/parser_prod.nit:4740 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3754 */
+  /* parser/parser_prod.nit:4742 */
   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, 3754);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 4742);
   }
   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:3755 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4743 */
   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, 3755);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 4743);
   }
   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:3756 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4744 */
   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)) {
@@ -20823,16 +25647,16 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3757 */
+    /* parser/parser_prod.nit:4745 */
     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, 3757);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4745);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3759 */
+  /* parser/parser_prod.nit:4747 */
   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)) {
@@ -20848,16 +25672,16 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3760 */
+    /* parser/parser_prod.nit:4748 */
     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, 3760);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4748);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3762 */
+  /* parser/parser_prod.nit:4750 */
   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)) {
@@ -20873,16 +25697,16 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3763 */
+    /* parser/parser_prod.nit:4751 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____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, 3763);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4751);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3765 */
+  /* parser/parser_prod.nit:4753 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20898,27 +25722,27 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3766 */
+    /* parser/parser_prod.nit:4754 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3766);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4754);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AReturnExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos111]) return;
+  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 = 3771;
+  fra.me.line = 4759;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -20926,20 +25750,20 @@ void parser___parser_prod___AReturnExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos111] = 1;
+  init_table[itpos110] = 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;
+  int itpos111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AReturnExpr].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[itpos112]) return;
+  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 = 3773;
+  fra.me.line = 4761;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___init_areturnexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -20950,11 +25774,11 @@ void parser___parser_prod___AReturnExpr___init_areturnexpr(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:3778 */
+  /* parser/parser_prod.nit:4766 */
   CALL_parser___parser_prod___AReturnExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:3779 */
+  /* parser/parser_prod.nit:4767 */
   ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3780 */
+  /* parser/parser_prod.nit:4768 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20969,16 +25793,16 @@ 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:3781 */
+    /* parser/parser_prod.nit:4769 */
     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, 4769);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:3783 */
+  /* parser/parser_prod.nit:4771 */
   ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3784 */
+  /* parser/parser_prod.nit:4772 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20993,18 +25817,18 @@ 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:3785 */
+    /* 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, 3785);
+      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_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos112] = 1;
+  init_table[itpos111] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AReturnExpr___replace_child[] = "parser_prod::AReturnExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AReturnExpr___replace_child[] = "parser_prod::AReturnExpr::(parser_nodes::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;
@@ -21012,7 +25836,7 @@ 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 = 3789;
+  fra.me.line = 4777;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21024,7 +25848,7 @@ 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:3791 */
+  /* parser/parser_prod.nit:4779 */
   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)) {
@@ -21039,7 +25863,7 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3792 */
+    /* parser/parser_prod.nit:4780 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21054,28 +25878,28 @@ 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:3793 */
+      /* parser/parser_prod.nit:4781 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3793);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4781);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3794 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4782 */
       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, 3794);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4782);
       }
-      /* parser/parser_prod.nit:3795 */
+      /* parser/parser_prod.nit:4783 */
       ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3797 */
+      /* parser/parser_prod.nit:4785 */
       ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3799 */
+    /* parser/parser_prod.nit:4787 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3801 */
+  /* parser/parser_prod.nit:4789 */
   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)) {
@@ -21090,7 +25914,7 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3802 */
+    /* parser/parser_prod.nit:4790 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21105,32 +25929,120 @@ 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:3803 */
+      /* parser/parser_prod.nit:4791 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3803);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4791);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3804 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4792 */
       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, 3804);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4792);
       }
-      /* parser/parser_prod.nit:3805 */
+      /* parser/parser_prod.nit:4793 */
       ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3807 */
+      /* parser/parser_prod.nit:4795 */
       ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3809 */
+    /* parser/parser_prod.nit:4797 */
     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)";
+static const char LOCATE_parser___parser_prod___AReturnExpr___n_kwreturn__eq[] = "parser_prod::AReturnExpr::(parser_nodes::AReturnExpr::n_kwreturn=)";
+void parser___parser_prod___AReturnExpr___n_kwreturn__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4801;
+  fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___n_kwreturn__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:4803 */
+  ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4804 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4805 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4805);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AReturnExpr___n_expr__eq[] = "parser_prod::AReturnExpr::(parser_nodes::AReturnExpr::n_expr=)";
+void parser___parser_prod___AReturnExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4808;
+  fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___n_expr__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:4810 */
+  ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4811 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4812 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4812);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AReturnExpr___visit_all[] = "parser_prod::AReturnExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -21138,7 +26050,7 @@ void parser___parser_prod___AReturnExpr___visit_all(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 = 3813;
+  fra.me.line = 4817;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21149,9 +26061,9 @@ void parser___parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3813 */
+  /* parser/parser_prod.nit:4817 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3815 */
+  /* parser/parser_prod.nit:4819 */
   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)) {
@@ -21167,16 +26079,16 @@ void parser___parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3816 */
+    /* parser/parser_prod.nit:4820 */
     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, 3816);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4820);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3818 */
+  /* parser/parser_prod.nit:4822 */
   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)) {
@@ -21192,27 +26104,27 @@ void parser___parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3819 */
+    /* parser/parser_prod.nit:4823 */
     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, 3819);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4823);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos112 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABreakExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos113]) return;
+  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 = 3824;
+  fra.me.line = 4828;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -21220,20 +26132,20 @@ void parser___parser_prod___ABreakExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos113] = 1;
+  init_table[itpos112] = 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;
+  int itpos113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABreakExpr].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[itpos114]) return;
+  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 = 3826;
+  fra.me.line = 4830;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___init_abreakexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -21247,26 +26159,26 @@ void parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:3826 */
+  /* parser/parser_prod.nit:4830 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3832 */
+  /* parser/parser_prod.nit:4836 */
   CALL_parser___parser_prod___ABreakExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:3833 */
+  /* parser/parser_prod.nit:4837 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3833);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4837);
   }
   ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3834 */
+  /* parser/parser_prod.nit:4838 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3834);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4838);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:3835 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:4839 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3836 */
+  /* parser/parser_prod.nit:4840 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21281,16 +26193,16 @@ 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:3837 */
+    /* parser/parser_prod.nit:4841 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3837);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4841);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:3839 */
+  /* parser/parser_prod.nit:4843 */
   ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3840 */
+  /* parser/parser_prod.nit:4844 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21305,18 +26217,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:3841 */
+    /* parser/parser_prod.nit:4845 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3841);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4845);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos113] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ABreakExpr___replace_child[] = "parser_prod::ABreakExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ABreakExpr___replace_child[] = "parser_prod::ABreakExpr::(parser_nodes::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;
@@ -21324,7 +26236,7 @@ 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 = 3845;
+  fra.me.line = 4849;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21336,11 +26248,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:3847 */
+  /* parser/parser_prod.nit:4851 */
   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, 3847);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 4851);
   }
   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]));
@@ -21350,7 +26262,7 @@ 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:3848 */
+    /* parser/parser_prod.nit:4852 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21365,28 +26277,28 @@ 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:3849 */
+      /* parser/parser_prod.nit:4853 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3849);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4853);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3850 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4854 */
       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, 3850);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4854);
       }
-      /* parser/parser_prod.nit:3851 */
+      /* parser/parser_prod.nit:4855 */
       ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3853 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3853);
+      /* parser/parser_prod.nit:4857 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4857);
     }
-    /* parser/parser_prod.nit:3855 */
+    /* parser/parser_prod.nit:4859 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3857 */
+  /* parser/parser_prod.nit:4861 */
   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)) {
@@ -21401,7 +26313,7 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3858 */
+    /* parser/parser_prod.nit:4862 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21416,28 +26328,28 @@ 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:3859 */
+      /* 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, 3859);
+        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]);
-      /* parser/parser_prod.nit:3860 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4864 */
       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, 3860);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4864);
       }
-      /* parser/parser_prod.nit:3861 */
+      /* parser/parser_prod.nit:4865 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3863 */
+      /* parser/parser_prod.nit:4867 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3865 */
+    /* parser/parser_prod.nit:4869 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3867 */
+  /* parser/parser_prod.nit:4871 */
   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)) {
@@ -21452,7 +26364,7 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3868 */
+    /* parser/parser_prod.nit:4872 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21467,32 +26379,142 @@ 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:3869 */
+      /* parser/parser_prod.nit:4873 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3869);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4873);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3870 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4874 */
       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, 3870);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4874);
       }
-      /* parser/parser_prod.nit:3871 */
+      /* parser/parser_prod.nit:4875 */
       ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3873 */
+      /* parser/parser_prod.nit:4877 */
       ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3875 */
+    /* parser/parser_prod.nit:4879 */
     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)";
+static const char LOCATE_parser___parser_prod___ABreakExpr___n_kwbreak__eq[] = "parser_prod::ABreakExpr::(parser_nodes::ABreakExpr::n_kwbreak=)";
+void parser___parser_prod___ABreakExpr___n_kwbreak__eq(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 = 4883;
+  fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___n_kwbreak__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:4885 */
+  ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4886 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABreakExpr___n_label__eq[] = "parser_prod::ABreakExpr::(parser_nodes::ALabelable::n_label=)";
+void parser___parser_prod___ABreakExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4888;
+  fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___n_label__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:4890 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4891 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4892 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4892);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ABreakExpr___n_expr__eq[] = "parser_prod::ABreakExpr::(parser_nodes::ABreakExpr::n_expr=)";
+void parser___parser_prod___ABreakExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 4895;
+  fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___n_expr__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:4897 */
+  ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4898 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:4899 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4899);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ABreakExpr___visit_all[] = "parser_prod::ABreakExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -21500,7 +26522,7 @@ void parser___parser_prod___ABreakExpr___visit_all(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 = 3879;
+  fra.me.line = 4904;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21511,17 +26533,17 @@ void parser___parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3879 */
+  /* parser/parser_prod.nit:4904 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3881 */
+  /* parser/parser_prod.nit:4906 */
   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, 3881);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 4906);
   }
   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:3882 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:4907 */
   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)) {
@@ -21537,16 +26559,16 @@ void parser___parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3883 */
+    /* parser/parser_prod.nit:4908 */
     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, 3883);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4908);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3885 */
+  /* parser/parser_prod.nit:4910 */
   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)) {
@@ -21562,27 +26584,27 @@ void parser___parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3886 */
+    /* parser/parser_prod.nit:4911 */
     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, 3886);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4911);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos114 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAbortExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos115]) return;
+  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 = 3891;
+  fra.me.line = 4916;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -21590,19 +26612,19 @@ void parser___parser_prod___AAbortExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos115] = 1;
+  init_table[itpos114] = 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;
+  int itpos115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAbortExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos116]) return;
+  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 = 3893;
+  fra.me.line = 4918;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___init_aabortexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -21612,28 +26634,28 @@ void parser___parser_prod___AAbortExpr___init_aabortexpr(val_t p0, val_t p1, int
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3893 */
+  /* parser/parser_prod.nit:4918 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3897 */
+  /* parser/parser_prod.nit:4922 */
   CALL_parser___parser_prod___AAbortExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:3898 */
+  /* parser/parser_prod.nit:4923 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3898);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4923);
   }
   ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3899 */
+  /* parser/parser_prod.nit:4924 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3899);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4924);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos115] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAbortExpr___replace_child[] = "parser_prod::AAbortExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAbortExpr___replace_child[] = "parser_prod::AAbortExpr::(parser_nodes::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;
@@ -21641,7 +26663,7 @@ 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 = 3902;
+  fra.me.line = 4927;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21653,11 +26675,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:3904 */
+  /* parser/parser_prod.nit:4929 */
   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, 3904);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 4929);
   }
   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]));
@@ -21667,7 +26689,7 @@ 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:3905 */
+    /* parser/parser_prod.nit:4930 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21682,39 +26704,61 @@ 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:3906 */
+      /* parser/parser_prod.nit:4931 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3906);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4931);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3907 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4932 */
       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, 3907);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4932);
       }
-      /* parser/parser_prod.nit:3908 */
+      /* parser/parser_prod.nit:4933 */
       ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3910 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3910);
+      /* parser/parser_prod.nit:4935 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4935);
     }
-    /* parser/parser_prod.nit:3912 */
+    /* parser/parser_prod.nit:4937 */
     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)";
+static const char LOCATE_parser___parser_prod___AAbortExpr___n_kwabort__eq[] = "parser_prod::AAbortExpr::(parser_nodes::AAbortExpr::n_kwabort=)";
+void parser___parser_prod___AAbortExpr___n_kwabort__eq(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 = 4941;
+  fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___n_kwabort__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:4943 */
+  ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:4944 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAbortExpr___visit_all[] = "parser_prod::AAbortExpr::(parser_nodes::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 = 3916;
+  fra.me.line = 4948;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21723,26 +26767,26 @@ void parser___parser_prod___AAbortExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3918 */
+  /* parser/parser_prod.nit:4950 */
   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, 3918);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 4950);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos116 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AContinueExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos117]) return;
+  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 = 3922;
+  fra.me.line = 4954;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -21750,20 +26794,20 @@ void parser___parser_prod___AContinueExpr___empty_init(val_t p0, int* init_table
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos117] = 1;
+  init_table[itpos116] = 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;
+  int itpos117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AContinueExpr].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[itpos118]) return;
+  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 = 3924;
+  fra.me.line = 4956;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___init_acontinueexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21776,11 +26820,11 @@ 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:3930 */
+  /* parser/parser_prod.nit:4962 */
   CALL_parser___parser_prod___AContinueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:3931 */
+  /* parser/parser_prod.nit:4963 */
   ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3932 */
+  /* parser/parser_prod.nit:4964 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21795,16 +26839,16 @@ 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:3933 */
+    /* parser/parser_prod.nit:4965 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3933);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4965);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:3935 */
+  /* parser/parser_prod.nit:4967 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3936 */
+  /* parser/parser_prod.nit:4968 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21819,16 +26863,16 @@ 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:3937 */
+    /* parser/parser_prod.nit:4969 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3937);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4969);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:3939 */
+  /* parser/parser_prod.nit:4971 */
   ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3940 */
+  /* parser/parser_prod.nit:4972 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21843,18 +26887,18 @@ 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:3941 */
+    /* parser/parser_prod.nit:4973 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3941);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4973);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos118] = 1;
+  init_table[itpos117] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AContinueExpr___replace_child[] = "parser_prod::AContinueExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AContinueExpr___replace_child[] = "parser_prod::AContinueExpr::(parser_nodes::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;
@@ -21862,7 +26906,7 @@ 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 = 3945;
+  fra.me.line = 4977;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21874,7 +26918,7 @@ 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:3947 */
+  /* parser/parser_prod.nit:4979 */
   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)) {
@@ -21889,7 +26933,7 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3948 */
+    /* parser/parser_prod.nit:4980 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21904,28 +26948,28 @@ 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:3949 */
+      /* parser/parser_prod.nit:4981 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3949);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4981);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3950 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4982 */
       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, 3950);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4982);
       }
-      /* parser/parser_prod.nit:3951 */
+      /* parser/parser_prod.nit:4983 */
       ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3953 */
+      /* parser/parser_prod.nit:4985 */
       ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3955 */
+    /* parser/parser_prod.nit:4987 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3957 */
+  /* parser/parser_prod.nit:4989 */
   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)) {
@@ -21940,7 +26984,7 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3958 */
+    /* parser/parser_prod.nit:4990 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21955,28 +26999,28 @@ 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:3959 */
+      /* parser/parser_prod.nit:4991 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3959);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4991);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3960 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:4992 */
       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, 3960);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4992);
       }
-      /* parser/parser_prod.nit:3961 */
+      /* parser/parser_prod.nit:4993 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3963 */
+      /* parser/parser_prod.nit:4995 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3965 */
+    /* parser/parser_prod.nit:4997 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3967 */
+  /* parser/parser_prod.nit:4999 */
   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)) {
@@ -21991,7 +27035,7 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3968 */
+    /* parser/parser_prod.nit:5000 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22006,32 +27050,164 @@ 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:3969 */
+      /* parser/parser_prod.nit:5001 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3969);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5001);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3970 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5002 */
       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, 3970);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5002);
       }
-      /* parser/parser_prod.nit:3971 */
+      /* parser/parser_prod.nit:5003 */
       ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3973 */
+      /* parser/parser_prod.nit:5005 */
       ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3975 */
+    /* parser/parser_prod.nit:5007 */
     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)";
+static const char LOCATE_parser___parser_prod___AContinueExpr___n_kwcontinue__eq[] = "parser_prod::AContinueExpr::(parser_nodes::AContinueExpr::n_kwcontinue=)";
+void parser___parser_prod___AContinueExpr___n_kwcontinue__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5011;
+  fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___n_kwcontinue__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:5013 */
+  ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5014 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5015 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5015);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_label__eq[] = "parser_prod::AContinueExpr::(parser_nodes::ALabelable::n_label=)";
+void parser___parser_prod___AContinueExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5018;
+  fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___n_label__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:5020 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5021 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5022 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5022);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr__eq[] = "parser_prod::AContinueExpr::(parser_nodes::AContinueExpr::n_expr=)";
+void parser___parser_prod___AContinueExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5025;
+  fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___n_expr__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:5027 */
+  ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5028 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5029 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5029);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AContinueExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -22039,7 +27215,7 @@ void parser___parser_prod___AContinueExpr___visit_all(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 = 3979;
+  fra.me.line = 5034;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22050,9 +27226,9 @@ void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3979 */
+  /* parser/parser_prod.nit:5034 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3981 */
+  /* parser/parser_prod.nit:5036 */
   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)) {
@@ -22068,16 +27244,16 @@ void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3982 */
+    /* parser/parser_prod.nit:5037 */
     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, 3982);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5037);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3984 */
+  /* parser/parser_prod.nit:5039 */
   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)) {
@@ -22093,16 +27269,16 @@ void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3985 */
+    /* parser/parser_prod.nit:5040 */
     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, 3985);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5040);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3987 */
+  /* parser/parser_prod.nit:5042 */
   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)) {
@@ -22118,27 +27294,27 @@ void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3988 */
+    /* parser/parser_prod.nit:5043 */
     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, 3988);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5043);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos118 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos119]) return;
+  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 = 3993;
+  fra.me.line = 5048;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -22146,20 +27322,20 @@ void parser___parser_prod___ADoExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos119] = 1;
+  init_table[itpos118] = 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;
+  int itpos119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoExpr].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[itpos120]) return;
+  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 = 3995;
+  fra.me.line = 5050;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___init_adoexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -22173,26 +27349,26 @@ void parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:3995 */
+  /* parser/parser_prod.nit:5050 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4001 */
+  /* parser/parser_prod.nit:5056 */
   CALL_parser___parser_prod___ADoExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:4002 */
+  /* parser/parser_prod.nit:5057 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4002);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5057);
   }
   ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4003 */
+  /* parser/parser_prod.nit:5058 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4003);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5058);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:4004 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:5059 */
   ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4005 */
+  /* parser/parser_prod.nit:5060 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -22207,16 +27383,16 @@ 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:4006 */
+    /* parser/parser_prod.nit:5061 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4006);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5061);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:4008 */
+  /* parser/parser_prod.nit:5063 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4009 */
+  /* parser/parser_prod.nit:5064 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -22231,18 +27407,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:4010 */
+    /* parser/parser_prod.nit:5065 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4010);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5065);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos119] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ADoExpr___replace_child[] = "parser_prod::ADoExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ADoExpr___replace_child[] = "parser_prod::ADoExpr::(parser_nodes::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;
@@ -22250,7 +27426,7 @@ 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 = 4014;
+  fra.me.line = 5069;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22262,11 +27438,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:4016 */
+  /* parser/parser_prod.nit:5071 */
   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, 4016);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 5071);
   }
   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]));
@@ -22276,7 +27452,7 @@ 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:4017 */
+    /* parser/parser_prod.nit:5072 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22291,28 +27467,28 @@ 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:4018 */
+      /* parser/parser_prod.nit:5073 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4018);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5073);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4019 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5074 */
       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, 4019);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5074);
       }
-      /* parser/parser_prod.nit:4020 */
+      /* parser/parser_prod.nit:5075 */
       ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4022 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4022);
+      /* parser/parser_prod.nit:5077 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5077);
     }
-    /* parser/parser_prod.nit:4024 */
+    /* parser/parser_prod.nit:5079 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4026 */
+  /* parser/parser_prod.nit:5081 */
   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)) {
@@ -22327,7 +27503,7 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4027 */
+    /* parser/parser_prod.nit:5082 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22342,28 +27518,28 @@ 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:4028 */
+      /* parser/parser_prod.nit:5083 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4028);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5083);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4029 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5084 */
       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, 4029);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5084);
       }
-      /* parser/parser_prod.nit:4030 */
+      /* parser/parser_prod.nit:5085 */
       ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4032 */
+      /* parser/parser_prod.nit:5087 */
       ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4034 */
+    /* parser/parser_prod.nit:5089 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4036 */
+  /* parser/parser_prod.nit:5091 */
   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)) {
@@ -22378,7 +27554,7 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4037 */
+    /* parser/parser_prod.nit:5092 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22393,32 +27569,142 @@ 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:4038 */
+      /* parser/parser_prod.nit:5093 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4038);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5093);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4039 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5094 */
       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, 4039);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5094);
       }
-      /* parser/parser_prod.nit:4040 */
+      /* parser/parser_prod.nit:5095 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4042 */
+      /* parser/parser_prod.nit:5097 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4044 */
+    /* parser/parser_prod.nit:5099 */
     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)";
+static const char LOCATE_parser___parser_prod___ADoExpr___n_kwdo__eq[] = "parser_prod::ADoExpr::(parser_nodes::ADoExpr::n_kwdo=)";
+void parser___parser_prod___ADoExpr___n_kwdo__eq(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 = 5103;
+  fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___n_kwdo__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:5105 */
+  ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5106 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ADoExpr___n_block__eq[] = "parser_prod::ADoExpr::(parser_nodes::ADoExpr::n_block=)";
+void parser___parser_prod___ADoExpr___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5108;
+  fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___n_block__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:5110 */
+  ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5111 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5112 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5112);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ADoExpr___n_label__eq[] = "parser_prod::ADoExpr::(parser_nodes::ALabelable::n_label=)";
+void parser___parser_prod___ADoExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5115;
+  fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___n_label__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:5117 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5118 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5119 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5119);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ADoExpr___visit_all[] = "parser_prod::ADoExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -22426,7 +27712,7 @@ void parser___parser_prod___ADoExpr___visit_all(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 = 4048;
+  fra.me.line = 5124;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22437,17 +27723,17 @@ void parser___parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4048 */
+  /* parser/parser_prod.nit:5124 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4050 */
+  /* parser/parser_prod.nit:5126 */
   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, 4050);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 5126);
   }
   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:4051 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5127 */
   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)) {
@@ -22463,16 +27749,16 @@ void parser___parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4052 */
+    /* parser/parser_prod.nit:5128 */
     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, 4052);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5128);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4054 */
+  /* parser/parser_prod.nit:5130 */
   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)) {
@@ -22488,27 +27774,27 @@ void parser___parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4055 */
+    /* parser/parser_prod.nit:5131 */
     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, 4055);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5131);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos120 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIfExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos121]) return;
+  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 = 4060;
+  fra.me.line = 5136;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -22516,20 +27802,20 @@ void parser___parser_prod___AIfExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos121] = 1;
+  init_table[itpos120] = 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;
+  int itpos121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIfExpr].i;
   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;
+  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 = 4062;
+  fra.me.line = 5138;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___init_aifexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -22545,39 +27831,39 @@ void parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2,
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:4062 */
+  /* parser/parser_prod.nit:5138 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4069 */
+  /* parser/parser_prod.nit:5145 */
   CALL_parser___parser_prod___AIfExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:4070 */
+  /* parser/parser_prod.nit:5146 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4070);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5146);
   }
   ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4071 */
+  /* parser/parser_prod.nit:5147 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4071);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5147);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:4072 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5148 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4072);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5148);
   }
   ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4073 */
+  /* parser/parser_prod.nit:5149 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4073);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5149);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:4074 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5150 */
   ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4075 */
+  /* parser/parser_prod.nit:5151 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -22592,16 +27878,16 @@ 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:4076 */
+    /* parser/parser_prod.nit:5152 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4076);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5152);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:4078 */
+  /* parser/parser_prod.nit:5154 */
   ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:4079 */
+  /* parser/parser_prod.nit:5155 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -22616,18 +27902,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:4080 */
+    /* parser/parser_prod.nit:5156 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4080);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5156);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos121] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AIfExpr___replace_child[] = "parser_prod::AIfExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AIfExpr___replace_child[] = "parser_prod::AIfExpr::(parser_nodes::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;
@@ -22635,7 +27921,7 @@ 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 = 4084;
+  fra.me.line = 5160;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22647,11 +27933,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:4086 */
+  /* parser/parser_prod.nit:5162 */
   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, 4086);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 5162);
   }
   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]));
@@ -22661,7 +27947,7 @@ 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:4087 */
+    /* parser/parser_prod.nit:5163 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22676,32 +27962,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:4088 */
+      /* parser/parser_prod.nit:5164 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4088);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5164);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4089 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5165 */
       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, 4089);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5165);
       }
-      /* parser/parser_prod.nit:4090 */
+      /* parser/parser_prod.nit:5166 */
       ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4092 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4092);
+      /* parser/parser_prod.nit:5168 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5168);
     }
-    /* parser/parser_prod.nit:4094 */
+    /* parser/parser_prod.nit:5170 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4096 */
+  /* parser/parser_prod.nit:5172 */
   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, 4096);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5172);
   }
   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]));
@@ -22711,7 +27997,7 @@ 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:4097 */
+    /* parser/parser_prod.nit:5173 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22726,28 +28012,28 @@ 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:4098 */
+      /* parser/parser_prod.nit:5174 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4098);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5174);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4099 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5175 */
       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, 4099);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5175);
       }
-      /* parser/parser_prod.nit:4100 */
+      /* parser/parser_prod.nit:5176 */
       ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4102 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4102);
+      /* parser/parser_prod.nit:5178 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5178);
     }
-    /* parser/parser_prod.nit:4104 */
+    /* parser/parser_prod.nit:5180 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4106 */
+  /* parser/parser_prod.nit:5182 */
   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)) {
@@ -22762,7 +28048,7 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4107 */
+    /* parser/parser_prod.nit:5183 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22777,28 +28063,28 @@ 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:4108 */
+      /* parser/parser_prod.nit:5184 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4108);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5184);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4109 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5185 */
       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, 4109);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5185);
       }
-      /* parser/parser_prod.nit:4110 */
+      /* parser/parser_prod.nit:5186 */
       ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4112 */
+      /* parser/parser_prod.nit:5188 */
       ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4114 */
+    /* parser/parser_prod.nit:5190 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4116 */
+  /* parser/parser_prod.nit:5192 */
   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)) {
@@ -22813,7 +28099,7 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4117 */
+    /* parser/parser_prod.nit:5193 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22828,32 +28114,164 @@ 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:4118 */
+      /* parser/parser_prod.nit:5194 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4118);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5194);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4119 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5195 */
       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, 4119);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5195);
       }
-      /* parser/parser_prod.nit:4120 */
+      /* parser/parser_prod.nit:5196 */
       ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4122 */
+      /* parser/parser_prod.nit:5198 */
       ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4124 */
+    /* parser/parser_prod.nit:5200 */
     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)";
+static const char LOCATE_parser___parser_prod___AIfExpr___n_kwif__eq[] = "parser_prod::AIfExpr::(parser_nodes::AIfExpr::n_kwif=)";
+void parser___parser_prod___AIfExpr___n_kwif__eq(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 = 5204;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___n_kwif__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:5206 */
+  ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5207 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIfExpr___n_expr__eq[] = "parser_prod::AIfExpr::(parser_nodes::AIfExpr::n_expr=)";
+void parser___parser_prod___AIfExpr___n_expr__eq(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 = 5209;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___n_expr__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:5211 */
+  ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5212 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIfExpr___n_then__eq[] = "parser_prod::AIfExpr::(parser_nodes::AIfExpr::n_then=)";
+void parser___parser_prod___AIfExpr___n_then__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5214;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___n_then__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:5216 */
+  ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5217 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5218 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5218);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AIfExpr___n_else__eq[] = "parser_prod::AIfExpr::(parser_nodes::AIfExpr::n_else=)";
+void parser___parser_prod___AIfExpr___n_else__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5221;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___n_else__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:5223 */
+  ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5224 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5225 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5225);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AIfExpr___visit_all[] = "parser_prod::AIfExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -22861,7 +28279,7 @@ void parser___parser_prod___AIfExpr___visit_all(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 = 4128;
+  fra.me.line = 5230;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22872,25 +28290,25 @@ void parser___parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4128 */
+  /* parser/parser_prod.nit:5230 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4130 */
+  /* parser/parser_prod.nit:5232 */
   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, 4130);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 5232);
   }
   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:4131 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5233 */
   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, 4131);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5233);
   }
   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:4132 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5234 */
   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)) {
@@ -22906,16 +28324,16 @@ void parser___parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4133 */
+    /* parser/parser_prod.nit:5235 */
     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, 4133);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5235);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4135 */
+  /* parser/parser_prod.nit:5237 */
   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)) {
@@ -22931,27 +28349,27 @@ void parser___parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4136 */
+    /* parser/parser_prod.nit:5238 */
     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, 4136);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5238);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos122 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIfexprExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos123]) return;
+  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 = 4141;
+  fra.me.line = 5243;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -22959,19 +28377,19 @@ void parser___parser_prod___AIfexprExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos123] = 1;
+  init_table[itpos122] = 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;
+  int itpos123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIfexprExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos124]) return;
+  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 = 4143;
+  fra.me.line = 5245;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___init_aifexprexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -22991,93 +28409,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:4143 */
+  /* parser/parser_prod.nit:5245 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4152 */
+  /* parser/parser_prod.nit:5254 */
   CALL_parser___parser_prod___AIfexprExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:4153 */
+  /* parser/parser_prod.nit:5255 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4153);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5255);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4154 */
+  /* parser/parser_prod.nit:5256 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4154);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5256);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-  /* parser/parser_prod.nit:4155 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+  /* parser/parser_prod.nit:5257 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4155);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5257);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4156 */
+  /* parser/parser_prod.nit:5258 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4156);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5258);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
-  /* parser/parser_prod.nit:4157 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+  /* parser/parser_prod.nit:5259 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=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, 5259);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4158 */
+  /* parser/parser_prod.nit:5260 */
   REGB0 = TAG_Bool(fra.me.REG[3]==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, 5260);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:4159 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:5261 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4159);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5261);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:4160 */
+  /* parser/parser_prod.nit:5262 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4160);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5262);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:4161 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:5263 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4161);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5263);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:4162 */
+  /* parser/parser_prod.nit:5264 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4162);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5264);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
-  /* parser/parser_prod.nit:4163 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+  /* parser/parser_prod.nit:5265 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=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, 5265);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:4164 */
+  /* parser/parser_prod.nit:5266 */
   REGB0 = TAG_Bool(fra.me.REG[6]==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, 5266);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos123] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AIfexprExpr___replace_child[] = "parser_prod::AIfexprExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AIfexprExpr___replace_child[] = "parser_prod::AIfexprExpr::(parser_nodes::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;
@@ -23085,7 +28503,7 @@ 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 = 4167;
+  fra.me.line = 5269;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23097,11 +28515,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:4169 */
+  /* parser/parser_prod.nit:5271 */
   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, 4169);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 5271);
   }
   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]));
@@ -23111,7 +28529,57 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4170 */
+    /* parser/parser_prod.nit:5272 */
+    REGB0 = TAG_Bool(fra.me.REG[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:5273 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5273);
+      }
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5274 */
+      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, 5274);
+      }
+      /* parser/parser_prod.nit:5275 */
+      ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:5277 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5277);
+    }
+    /* parser/parser_prod.nit:5279 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:5281 */
+  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, 5281);
+  }
+  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]));
+  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:5282 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23126,82 +28594,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:4171 */
+      /* parser/parser_prod.nit:5283 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4171);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5283);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4172 */
-      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, 4172);
-      }
-      /* parser/parser_prod.nit:4173 */
-      ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* parser/parser_prod.nit:4175 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4175);
-    }
-    /* parser/parser_prod.nit:4177 */
-    goto label1;
-  }
-  /* parser/parser_prod.nit:4179 */
-  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, 4179);
-  }
-  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]));
-  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:4180 */
-    REGB0 = TAG_Bool(fra.me.REG[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:4181 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4181);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4182 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5284 */
       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, 4182);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5284);
       }
-      /* parser/parser_prod.nit:4183 */
+      /* parser/parser_prod.nit:5285 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4185 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4185);
+      /* parser/parser_prod.nit:5287 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5287);
     }
-    /* parser/parser_prod.nit:4187 */
+    /* parser/parser_prod.nit:5289 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4189 */
+  /* parser/parser_prod.nit:5291 */
   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, 4189);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 5291);
   }
   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]));
@@ -23211,7 +28629,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4190 */
+    /* parser/parser_prod.nit:5292 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23226,32 +28644,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:4191 */
+      /* parser/parser_prod.nit:5293 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4191);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5293);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4192 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5294 */
       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, 4192);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5294);
       }
-      /* parser/parser_prod.nit:4193 */
+      /* parser/parser_prod.nit:5295 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4195 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4195);
+      /* parser/parser_prod.nit:5297 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5297);
     }
-    /* parser/parser_prod.nit:4197 */
+    /* parser/parser_prod.nit:5299 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4199 */
+  /* parser/parser_prod.nit:5301 */
   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, 4199);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 5301);
   }
   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]));
@@ -23261,7 +28679,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4200 */
+    /* parser/parser_prod.nit:5302 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23276,32 +28694,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:4201 */
+      /* parser/parser_prod.nit:5303 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4201);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5303);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4202 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5304 */
       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, 4202);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5304);
       }
-      /* parser/parser_prod.nit:4203 */
+      /* parser/parser_prod.nit:5305 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4205 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4205);
+      /* parser/parser_prod.nit:5307 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5307);
     }
-    /* parser/parser_prod.nit:4207 */
+    /* parser/parser_prod.nit:5309 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4209 */
+  /* parser/parser_prod.nit:5311 */
   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, 4209);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 5311);
   }
   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]));
@@ -23311,7 +28729,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4210 */
+    /* parser/parser_prod.nit:5312 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23326,32 +28744,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:4211 */
+      /* 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, 4211);
+        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]);
-      /* parser/parser_prod.nit:4212 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5314 */
       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, 4212);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5314);
       }
-      /* parser/parser_prod.nit:4213 */
+      /* parser/parser_prod.nit:5315 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4215 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4215);
+      /* parser/parser_prod.nit:5317 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5317);
     }
-    /* parser/parser_prod.nit:4217 */
+    /* parser/parser_prod.nit:5319 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4219 */
+  /* parser/parser_prod.nit:5321 */
   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, 4219);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 5321);
   }
   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]));
@@ -23361,7 +28779,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4220 */
+    /* parser/parser_prod.nit:5322 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23376,39 +28794,171 @@ 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:4221 */
+      /* parser/parser_prod.nit:5323 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4221);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5323);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4222 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5324 */
       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, 4222);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5324);
       }
-      /* parser/parser_prod.nit:4223 */
+      /* parser/parser_prod.nit:5325 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4225 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4225);
+      /* parser/parser_prod.nit:5327 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5327);
     }
-    /* parser/parser_prod.nit:4227 */
+    /* parser/parser_prod.nit:5329 */
     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)";
+static const char LOCATE_parser___parser_prod___AIfexprExpr___n_kwif__eq[] = "parser_prod::AIfexprExpr::(parser_nodes::AIfexprExpr::n_kwif=)";
+void parser___parser_prod___AIfexprExpr___n_kwif__eq(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 = 5333;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___n_kwif__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:5335 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5336 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIfexprExpr___n_expr__eq[] = "parser_prod::AIfexprExpr::(parser_nodes::AIfexprExpr::n_expr=)";
+void parser___parser_prod___AIfexprExpr___n_expr__eq(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 = 5338;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___n_expr__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:5340 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5341 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIfexprExpr___n_kwthen__eq[] = "parser_prod::AIfexprExpr::(parser_nodes::AIfexprExpr::n_kwthen=)";
+void parser___parser_prod___AIfexprExpr___n_kwthen__eq(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 = 5343;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___n_kwthen__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:5345 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5346 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIfexprExpr___n_then__eq[] = "parser_prod::AIfexprExpr::(parser_nodes::AIfexprExpr::n_then=)";
+void parser___parser_prod___AIfexprExpr___n_then__eq(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 = 5348;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___n_then__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:5350 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5351 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIfexprExpr___n_kwelse__eq[] = "parser_prod::AIfexprExpr::(parser_nodes::AIfexprExpr::n_kwelse=)";
+void parser___parser_prod___AIfexprExpr___n_kwelse__eq(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 = 5353;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___n_kwelse__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:5355 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5356 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIfexprExpr___n_else__eq[] = "parser_prod::AIfexprExpr::(parser_nodes::AIfexprExpr::n_else=)";
+void parser___parser_prod___AIfexprExpr___n_else__eq(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 = 5358;
+  fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___n_else__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:5360 */
+  ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5361 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIfexprExpr___visit_all[] = "parser_prod::AIfexprExpr::(parser_nodes::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 = 4231;
+  fra.me.line = 5365;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23418,66 +28968,66 @@ void parser___parser_prod___AIfexprExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4233 */
+  /* parser/parser_prod.nit:5367 */
   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, 4233);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 5367);
   }
   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:4234 */
+  CALL_parser___parser_nodes___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___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, 4234);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5368);
   }
   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:4235 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:5369 */
   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, 4235);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 5369);
   }
   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:4236 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:5370 */
   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, 4236);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 5370);
   }
   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:4237 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:5371 */
   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, 4237);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 5371);
   }
   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:4238 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:5372 */
   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, 4238);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 5372);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos124 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AWhileExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos125]) return;
+  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 = 4242;
+  fra.me.line = 5376;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -23485,20 +29035,20 @@ void parser___parser_prod___AWhileExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos125] = 1;
+  init_table[itpos124] = 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;
+  int itpos125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AWhileExpr].i;
   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;
+  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 = 4244;
+  fra.me.line = 5378;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___init_awhileexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -23516,52 +29066,52 @@ void parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:4244 */
+  /* parser/parser_prod.nit:5378 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4252 */
+  /* parser/parser_prod.nit:5386 */
   CALL_parser___parser_prod___AWhileExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:4253 */
+  /* parser/parser_prod.nit:5387 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4253);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5387);
   }
   ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4254 */
+  /* parser/parser_prod.nit:5388 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4254);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5388);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:4255 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5389 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4255);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5389);
   }
   ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4256 */
+  /* parser/parser_prod.nit:5390 */
   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, 5390);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:4257 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5391 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4257);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5391);
   }
   ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4258 */
+  /* parser/parser_prod.nit:5392 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4258);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5392);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:4259 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:5393 */
   ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:4260 */
+  /* parser/parser_prod.nit:5394 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -23576,16 +29126,16 @@ 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:4261 */
+    /* parser/parser_prod.nit:5395 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4261);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5395);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
   }
-  /* parser/parser_prod.nit:4263 */
+  /* parser/parser_prod.nit:5397 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:4264 */
+  /* parser/parser_prod.nit:5398 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -23600,18 +29150,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:4265 */
+    /* parser/parser_prod.nit:5399 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4265);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5399);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos125] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AWhileExpr___replace_child[] = "parser_prod::AWhileExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AWhileExpr___replace_child[] = "parser_prod::AWhileExpr::(parser_nodes::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;
@@ -23619,7 +29169,7 @@ 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 = 4269;
+  fra.me.line = 5403;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23631,11 +29181,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:4271 */
+  /* parser/parser_prod.nit:5405 */
   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, 4271);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 5405);
   }
   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]));
@@ -23645,7 +29195,7 @@ 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:4272 */
+    /* parser/parser_prod.nit:5406 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23660,32 +29210,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:4273 */
+      /* parser/parser_prod.nit:5407 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4273);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5407);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4274 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5408 */
       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, 4274);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5408);
       }
-      /* parser/parser_prod.nit:4275 */
+      /* parser/parser_prod.nit:5409 */
       ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4277 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4277);
+      /* parser/parser_prod.nit:5411 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5411);
     }
-    /* parser/parser_prod.nit:4279 */
+    /* parser/parser_prod.nit:5413 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4281 */
+  /* parser/parser_prod.nit:5415 */
   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, 4281);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5415);
   }
   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]));
@@ -23695,7 +29245,7 @@ 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:4282 */
+    /* parser/parser_prod.nit:5416 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23710,32 +29260,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:4283 */
+      /* parser/parser_prod.nit:5417 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4283);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5417);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4284 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5418 */
       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, 4284);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5418);
       }
-      /* parser/parser_prod.nit:4285 */
+      /* parser/parser_prod.nit:5419 */
       ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4287 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4287);
+      /* parser/parser_prod.nit:5421 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5421);
     }
-    /* parser/parser_prod.nit:4289 */
+    /* parser/parser_prod.nit:5423 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4291 */
+  /* parser/parser_prod.nit:5425 */
   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, 4291);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 5425);
   }
   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]));
@@ -23745,7 +29295,7 @@ 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:4292 */
+    /* parser/parser_prod.nit:5426 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23760,28 +29310,28 @@ 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:4293 */
+      /* parser/parser_prod.nit:5427 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4293);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5427);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4294 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5428 */
       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, 4294);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5428);
       }
-      /* parser/parser_prod.nit:4295 */
+      /* parser/parser_prod.nit:5429 */
       ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4297 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4297);
+      /* parser/parser_prod.nit:5431 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5431);
     }
-    /* parser/parser_prod.nit:4299 */
+    /* parser/parser_prod.nit:5433 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4301 */
+  /* parser/parser_prod.nit:5435 */
   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)) {
@@ -23796,7 +29346,7 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4302 */
+    /* parser/parser_prod.nit:5436 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23811,28 +29361,28 @@ 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:4303 */
+      /* parser/parser_prod.nit:5437 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4303);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5437);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4304 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5438 */
       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, 4304);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5438);
       }
-      /* parser/parser_prod.nit:4305 */
+      /* parser/parser_prod.nit:5439 */
       ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4307 */
+      /* parser/parser_prod.nit:5441 */
       ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4309 */
+    /* parser/parser_prod.nit:5443 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4311 */
+  /* parser/parser_prod.nit:5445 */
   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)) {
@@ -23847,7 +29397,7 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4312 */
+    /* parser/parser_prod.nit:5446 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23862,32 +29412,186 @@ 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:4313 */
+      /* parser/parser_prod.nit:5447 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 5447);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4314 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5448 */
       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, 4314);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5448);
       }
-      /* parser/parser_prod.nit:4315 */
+      /* parser/parser_prod.nit:5449 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4317 */
+      /* parser/parser_prod.nit:5451 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4319 */
+    /* parser/parser_prod.nit:5453 */
     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)";
+static const char LOCATE_parser___parser_prod___AWhileExpr___n_kwwhile__eq[] = "parser_prod::AWhileExpr::(parser_nodes::AWhileExpr::n_kwwhile=)";
+void parser___parser_prod___AWhileExpr___n_kwwhile__eq(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 = 5457;
+  fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___n_kwwhile__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:5459 */
+  ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5460 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr__eq[] = "parser_prod::AWhileExpr::(parser_nodes::AWhileExpr::n_expr=)";
+void parser___parser_prod___AWhileExpr___n_expr__eq(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 = 5462;
+  fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___n_expr__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:5464 */
+  ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5465 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwdo__eq[] = "parser_prod::AWhileExpr::(parser_nodes::AWhileExpr::n_kwdo=)";
+void parser___parser_prod___AWhileExpr___n_kwdo__eq(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 = 5467;
+  fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___n_kwdo__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:5469 */
+  ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5470 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_block__eq[] = "parser_prod::AWhileExpr::(parser_nodes::AWhileExpr::n_block=)";
+void parser___parser_prod___AWhileExpr___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5472;
+  fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___n_block__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:5474 */
+  ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5475 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5476 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5476);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_label__eq[] = "parser_prod::AWhileExpr::(parser_nodes::ALabelable::n_label=)";
+void parser___parser_prod___AWhileExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5479;
+  fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___n_label__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:5481 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5482 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5483 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5483);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AWhileExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -23895,7 +29599,7 @@ void parser___parser_prod___AWhileExpr___visit_all(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 = 4323;
+  fra.me.line = 5488;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23906,33 +29610,33 @@ void parser___parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4323 */
+  /* parser/parser_prod.nit:5488 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4325 */
+  /* parser/parser_prod.nit:5490 */
   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, 4325);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 5490);
   }
   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:4326 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5491 */
   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, 4326);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5491);
   }
   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:4327 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5492 */
   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, 4327);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 5492);
   }
   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:4328 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5493 */
   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)) {
@@ -23948,16 +29652,16 @@ void parser___parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4329 */
+    /* parser/parser_prod.nit:5494 */
     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, 4329);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5494);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4331 */
+  /* parser/parser_prod.nit:5496 */
   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)) {
@@ -23973,27 +29677,27 @@ void parser___parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4332 */
+    /* parser/parser_prod.nit:5497 */
     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, 4332);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5497);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos126 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALoopExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos127]) return;
+  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 = 4337;
+  fra.me.line = 5502;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -24001,20 +29705,20 @@ void parser___parser_prod___ALoopExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos127] = 1;
+  init_table[itpos126] = 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;
+  int itpos127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALoopExpr].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[itpos128]) return;
+  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 = 4339;
+  fra.me.line = 5504;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___init_aloopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -24028,26 +29732,26 @@ void parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:4339 */
+  /* parser/parser_prod.nit:5504 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4345 */
+  /* parser/parser_prod.nit:5510 */
   CALL_parser___parser_prod___ALoopExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:4346 */
+  /* parser/parser_prod.nit:5511 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4346);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5511);
   }
   ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4347 */
+  /* parser/parser_prod.nit:5512 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4347);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5512);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:4348 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:5513 */
   ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4349 */
+  /* parser/parser_prod.nit:5514 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -24062,16 +29766,16 @@ 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:4350 */
+    /* parser/parser_prod.nit:5515 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4350);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5515);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:4352 */
+  /* parser/parser_prod.nit:5517 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4353 */
+  /* parser/parser_prod.nit:5518 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -24086,18 +29790,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:4354 */
+    /* parser/parser_prod.nit:5519 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4354);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5519);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos127] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ALoopExpr___replace_child[] = "parser_prod::ALoopExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ALoopExpr___replace_child[] = "parser_prod::ALoopExpr::(parser_nodes::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;
@@ -24105,7 +29809,7 @@ 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 = 4358;
+  fra.me.line = 5523;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24117,11 +29821,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:4360 */
+  /* parser/parser_prod.nit:5525 */
   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, 4360);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 5525);
   }
   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]));
@@ -24131,7 +29835,7 @@ 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:4361 */
+    /* parser/parser_prod.nit:5526 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24146,28 +29850,28 @@ 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:4362 */
+      /* parser/parser_prod.nit:5527 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4362);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5527);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4363 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5528 */
       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, 4363);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5528);
       }
-      /* parser/parser_prod.nit:4364 */
+      /* parser/parser_prod.nit:5529 */
       ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4366 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4366);
+      /* parser/parser_prod.nit:5531 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5531);
     }
-    /* parser/parser_prod.nit:4368 */
+    /* parser/parser_prod.nit:5533 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4370 */
+  /* parser/parser_prod.nit:5535 */
   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)) {
@@ -24182,7 +29886,7 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4371 */
+    /* parser/parser_prod.nit:5536 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24197,28 +29901,28 @@ 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:4372 */
+      /* parser/parser_prod.nit:5537 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4372);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5537);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4373 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5538 */
       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, 4373);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5538);
       }
-      /* parser/parser_prod.nit:4374 */
+      /* parser/parser_prod.nit:5539 */
       ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4376 */
+      /* parser/parser_prod.nit:5541 */
       ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4378 */
+    /* parser/parser_prod.nit:5543 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4380 */
+  /* parser/parser_prod.nit:5545 */
   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)) {
@@ -24233,7 +29937,7 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4381 */
+    /* parser/parser_prod.nit:5546 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24248,32 +29952,142 @@ 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:4382 */
+      /* parser/parser_prod.nit:5547 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4382);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5547);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4383 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5548 */
       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, 4383);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5548);
       }
-      /* parser/parser_prod.nit:4384 */
+      /* parser/parser_prod.nit:5549 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4386 */
+      /* parser/parser_prod.nit:5551 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4388 */
+    /* parser/parser_prod.nit:5553 */
     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)";
+static const char LOCATE_parser___parser_prod___ALoopExpr___n_kwloop__eq[] = "parser_prod::ALoopExpr::(parser_nodes::ALoopExpr::n_kwloop=)";
+void parser___parser_prod___ALoopExpr___n_kwloop__eq(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 = 5557;
+  fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___n_kwloop__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:5559 */
+  ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5560 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ALoopExpr___n_block__eq[] = "parser_prod::ALoopExpr::(parser_nodes::ALoopExpr::n_block=)";
+void parser___parser_prod___ALoopExpr___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5562;
+  fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___n_block__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:5564 */
+  ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5565 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5566 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5566);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ALoopExpr___n_label__eq[] = "parser_prod::ALoopExpr::(parser_nodes::ALabelable::n_label=)";
+void parser___parser_prod___ALoopExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5569;
+  fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___n_label__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:5571 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5572 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5573 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5573);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ALoopExpr___visit_all[] = "parser_prod::ALoopExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -24281,7 +30095,7 @@ void parser___parser_prod___ALoopExpr___visit_all(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 = 4392;
+  fra.me.line = 5578;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24292,17 +30106,17 @@ void parser___parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4392 */
+  /* parser/parser_prod.nit:5578 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4394 */
+  /* parser/parser_prod.nit:5580 */
   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, 4394);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 5580);
   }
   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:4395 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5581 */
   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)) {
@@ -24318,16 +30132,16 @@ void parser___parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4396 */
+    /* parser/parser_prod.nit:5582 */
     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, 4396);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5582);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4398 */
+  /* parser/parser_prod.nit:5584 */
   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)) {
@@ -24343,27 +30157,27 @@ void parser___parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4399 */
+    /* parser/parser_prod.nit:5585 */
     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, 4399);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5585);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos128 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AForExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos129]) return;
+  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 = 4404;
+  fra.me.line = 5590;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -24371,20 +30185,20 @@ void parser___parser_prod___AForExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos129] = 1;
+  init_table[itpos128] = 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;
+  int itpos129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AForExpr].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[itpos130]) return;
+  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 = 4406;
+  fra.me.line = 5592;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___init_aforexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -24404,53 +30218,53 @@ 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:4406 */
+  /* parser/parser_prod.nit:5592 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4415 */
+  /* parser/parser_prod.nit:5601 */
   CALL_parser___parser_prod___AForExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:5602 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4416);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5602);
   }
   ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4417 */
+  /* parser/parser_prod.nit:5603 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4417);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5603);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+  CALL_parser___parser_nodes___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:4423 */
+  /* parser/parser_prod.nit:5609 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4423);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5609);
   }
   ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4424 */
+  /* parser/parser_prod.nit:5610 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4424);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5610);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:4425 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:5611 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4425);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5611);
   }
   ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:4426 */
+  /* parser/parser_prod.nit:5612 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4426);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5612);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:4427 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:5613 */
   ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:4428 */
+  /* parser/parser_prod.nit:5614 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -24465,16 +30279,16 @@ 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:4429 */
+    /* parser/parser_prod.nit:5615 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4429);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5615);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:4431 */
+  /* parser/parser_prod.nit:5617 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:4432 */
+  /* parser/parser_prod.nit:5618 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -24489,15 +30303,15 @@ 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:4433 */
+    /* parser/parser_prod.nit:5619 */
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4433);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5619);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos129] = 1;
   return;
 }
   void OC_parser___parser_prod___AForExpr___init_aforexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -24505,7 +30319,7 @@ 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:4418 */
+    /* parser/parser_prod.nit:5604 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -24519,26 +30333,26 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:4419 */
+    /* parser/parser_prod.nit:5605 */
     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, 4419);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5605);
     }
-    /* parser/parser_prod.nit:4420 */
+    /* parser/parser_prod.nit:5606 */
     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, 4420);
+      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 5606);
     }
     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:4421 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[7]);
+    /* parser/parser_prod.nit:5607 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AForExpr___replace_child[] = "parser_prod::AForExpr::(parser_nodes::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;
@@ -24549,7 +30363,7 @@ 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 = 4437;
+  fra.me.line = 5623;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24561,11 +30375,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:4439 */
+  /* parser/parser_prod.nit:5625 */
   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, 4439);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 5625);
   }
   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]));
@@ -24575,7 +30389,7 @@ 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:4440 */
+    /* parser/parser_prod.nit:5626 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24590,71 +30404,65 @@ 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:4441 */
+      /* parser/parser_prod.nit:5627 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4441);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5627);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4442 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5628 */
       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, 4442);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5628);
       }
-      /* parser/parser_prod.nit:4443 */
+      /* parser/parser_prod.nit:5629 */
       ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4445 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4445);
+      /* parser/parser_prod.nit:5631 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5631);
     }
-    /* parser/parser_prod.nit:4447 */
+    /* parser/parser_prod.nit:5633 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:5635 */
   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, 4449);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 5635);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:4449 */
+      /* parser/parser_prod.nit:5635 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:4450 */
+      /* parser/parser_prod.nit:5636 */
       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, 4450);
+        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 5636);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:4451 */
+        /* parser/parser_prod.nit:5637 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -24669,56 +30477,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:4452 */
+          /* parser/parser_prod.nit:5638 */
           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, 4452);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5638);
           }
-          /* parser/parser_prod.nit:4453 */
+          /* parser/parser_prod.nit:5639 */
           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, 4453);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 5639);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(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:4454 */
+          /* parser/parser_prod.nit:5640 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4454);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5640);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:4456 */
+          /* parser/parser_prod.nit:5642 */
           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, 4456);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 5642);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(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:4458 */
+        /* parser/parser_prod.nit:5644 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:4461 */
+  /* parser/parser_prod.nit:5647 */
   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, 4461);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5647);
   }
   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]));
@@ -24728,7 +30536,7 @@ 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:4462 */
+    /* parser/parser_prod.nit:5648 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24743,32 +30551,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:4463 */
+      /* parser/parser_prod.nit:5649 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4463);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5649);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4464 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5650 */
       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, 4464);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5650);
       }
-      /* parser/parser_prod.nit:4465 */
+      /* parser/parser_prod.nit:5651 */
       ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4467 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4467);
+      /* parser/parser_prod.nit:5653 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5653);
     }
-    /* parser/parser_prod.nit:4469 */
+    /* parser/parser_prod.nit:5655 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4471 */
+  /* parser/parser_prod.nit:5657 */
   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, 4471);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 5657);
   }
   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]));
@@ -24778,7 +30586,7 @@ 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:4472 */
+    /* parser/parser_prod.nit:5658 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24793,28 +30601,28 @@ 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:4473 */
+      /* parser/parser_prod.nit:5659 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4473);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5659);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4474 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5660 */
       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, 4474);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5660);
       }
-      /* parser/parser_prod.nit:4475 */
+      /* parser/parser_prod.nit:5661 */
       ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4477 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4477);
+      /* parser/parser_prod.nit:5663 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5663);
     }
-    /* parser/parser_prod.nit:4479 */
+    /* parser/parser_prod.nit:5665 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4481 */
+  /* parser/parser_prod.nit:5667 */
   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)) {
@@ -24829,7 +30637,7 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4482 */
+    /* parser/parser_prod.nit:5668 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24844,28 +30652,28 @@ 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:4483 */
+      /* parser/parser_prod.nit:5669 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4483);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5669);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4484 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5670 */
       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, 4484);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5670);
       }
-      /* parser/parser_prod.nit:4485 */
+      /* parser/parser_prod.nit:5671 */
       ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4487 */
+      /* parser/parser_prod.nit:5673 */
       ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4489 */
+    /* parser/parser_prod.nit:5675 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4491 */
+  /* parser/parser_prod.nit:5677 */
   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)) {
@@ -24880,7 +30688,7 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4492 */
+    /* parser/parser_prod.nit:5678 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24895,32 +30703,186 @@ 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:4493 */
+      /* parser/parser_prod.nit:5679 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 5679);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4494 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5680 */
       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, 4494);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5680);
       }
-      /* parser/parser_prod.nit:4495 */
+      /* parser/parser_prod.nit:5681 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4497 */
+      /* parser/parser_prod.nit:5683 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4499 */
+    /* parser/parser_prod.nit:5685 */
     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)";
+static const char LOCATE_parser___parser_prod___AForExpr___n_kwfor__eq[] = "parser_prod::AForExpr::(parser_nodes::AForExpr::n_kwfor=)";
+void parser___parser_prod___AForExpr___n_kwfor__eq(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 = 5689;
+  fra.me.meth = LOCATE_parser___parser_prod___AForExpr___n_kwfor__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:5691 */
+  ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5692 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AForExpr___n_expr__eq[] = "parser_prod::AForExpr::(parser_nodes::AForExpr::n_expr=)";
+void parser___parser_prod___AForExpr___n_expr__eq(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 = 5694;
+  fra.me.meth = LOCATE_parser___parser_prod___AForExpr___n_expr__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:5696 */
+  ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5697 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AForExpr___n_kwdo__eq[] = "parser_prod::AForExpr::(parser_nodes::AForExpr::n_kwdo=)";
+void parser___parser_prod___AForExpr___n_kwdo__eq(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 = 5699;
+  fra.me.meth = LOCATE_parser___parser_prod___AForExpr___n_kwdo__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:5701 */
+  ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5702 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AForExpr___n_block__eq[] = "parser_prod::AForExpr::(parser_nodes::AForExpr::n_block=)";
+void parser___parser_prod___AForExpr___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5704;
+  fra.me.meth = LOCATE_parser___parser_prod___AForExpr___n_block__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:5706 */
+  ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5707 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5708 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5708);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AForExpr___n_label__eq[] = "parser_prod::AForExpr::(parser_nodes::ALabelable::n_label=)";
+void parser___parser_prod___AForExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5711;
+  fra.me.meth = LOCATE_parser___parser_prod___AForExpr___n_label__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:5713 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5714 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5715 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5715);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AForExpr___visit_all[] = "parser_prod::AForExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -24928,7 +30890,7 @@ void parser___parser_prod___AForExpr___visit_all(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 = 4503;
+  fra.me.line = 5720;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24939,41 +30901,41 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4503 */
+  /* parser/parser_prod.nit:5720 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4505 */
+  /* parser/parser_prod.nit:5722 */
   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, 4505);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 5722);
   }
   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:4506 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5723 */
   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, 4506);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 5723);
   }
   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:4509 */
+  /* parser/parser_prod.nit:5726 */
   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, 4509);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5726);
   }
   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:4510 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5727 */
   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, 4510);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 5727);
   }
   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:4511 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5728 */
   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)) {
@@ -24989,16 +30951,16 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4512 */
+    /* parser/parser_prod.nit:5729 */
     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, 4512);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5729);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4514 */
+  /* parser/parser_prod.nit:5731 */
   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)) {
@@ -25014,14 +30976,14 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4515 */
+    /* parser/parser_prod.nit:5732 */
     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, 4515);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5732);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -25042,20 +31004,20 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:4507 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:5724 */
+    CALL_parser___parser_nodes___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;
+  int itpos130 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAssertExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos131]) return;
+  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 = 4520;
+  fra.me.line = 5737;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -25063,20 +31025,20 @@ void parser___parser_prod___AAssertExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos131] = 1;
+  init_table[itpos130] = 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;
+  int itpos131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAssertExpr].i;
   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;
+  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 = 4522;
+  fra.me.line = 5739;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___init_aassertexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -25092,26 +31054,26 @@ void parser___parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, v
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:4522 */
+  /* parser/parser_prod.nit:5739 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4529 */
+  /* parser/parser_prod.nit:5746 */
   CALL_parser___parser_prod___AAssertExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:4530 */
+  /* parser/parser_prod.nit:5747 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4530);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5747);
   }
   ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4531 */
+  /* parser/parser_prod.nit:5748 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4531);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5748);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:4532 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5749 */
   ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4533 */
+  /* parser/parser_prod.nit:5750 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -25126,29 +31088,29 @@ 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:4534 */
+    /* parser/parser_prod.nit:5751 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4534);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5751);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:4536 */
+  /* parser/parser_prod.nit:5753 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4536);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5753);
   }
   ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4537 */
+  /* parser/parser_prod.nit:5754 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4537);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5754);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:4538 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:5755 */
   ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:4539 */
+  /* parser/parser_prod.nit:5756 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -25163,18 +31125,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:4540 */
+    /* parser/parser_prod.nit:5757 */
     REGB0 = TAG_Bool(fra.me.REG[4]==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, 5757);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_parser___parser_nodes___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;
+  init_table[itpos131] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAssertExpr___replace_child[] = "parser_prod::AAssertExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAssertExpr___replace_child[] = "parser_prod::AAssertExpr::(parser_nodes::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;
@@ -25182,7 +31144,7 @@ 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 = 4544;
+  fra.me.line = 5761;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25194,11 +31156,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:4546 */
+  /* parser/parser_prod.nit:5763 */
   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, 4546);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 5763);
   }
   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]));
@@ -25208,7 +31170,7 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4547 */
+    /* parser/parser_prod.nit:5764 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25223,28 +31185,28 @@ 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:4548 */
+      /* parser/parser_prod.nit:5765 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4548);
+        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]);
-      /* parser/parser_prod.nit:4549 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5766 */
       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, 4549);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5766);
       }
-      /* parser/parser_prod.nit:4550 */
+      /* parser/parser_prod.nit:5767 */
       ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4552 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4552);
+      /* parser/parser_prod.nit:5769 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5769);
     }
-    /* parser/parser_prod.nit:4554 */
+    /* parser/parser_prod.nit:5771 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4556 */
+  /* parser/parser_prod.nit:5773 */
   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)) {
@@ -25259,7 +31221,7 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4557 */
+    /* parser/parser_prod.nit:5774 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25274,32 +31236,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:4558 */
+      /* parser/parser_prod.nit:5775 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4558);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5775);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4559 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5776 */
       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, 4559);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5776);
       }
-      /* parser/parser_prod.nit:4560 */
+      /* parser/parser_prod.nit:5777 */
       ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4562 */
+      /* parser/parser_prod.nit:5779 */
       ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4564 */
+    /* parser/parser_prod.nit:5781 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4566 */
+  /* parser/parser_prod.nit:5783 */
   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, 4566);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5783);
   }
   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]));
@@ -25309,7 +31271,7 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4567 */
+    /* parser/parser_prod.nit:5784 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25324,28 +31286,28 @@ 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:4568 */
+      /* parser/parser_prod.nit:5785 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4568);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5785);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4569 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5786 */
       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, 4569);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5786);
       }
-      /* parser/parser_prod.nit:4570 */
+      /* parser/parser_prod.nit:5787 */
       ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4572 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4572);
+      /* parser/parser_prod.nit:5789 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5789);
     }
-    /* parser/parser_prod.nit:4574 */
+    /* parser/parser_prod.nit:5791 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4576 */
+  /* parser/parser_prod.nit:5793 */
   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)) {
@@ -25360,7 +31322,7 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4577 */
+    /* parser/parser_prod.nit:5794 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25375,32 +31337,164 @@ 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:4578 */
+      /* parser/parser_prod.nit:5795 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4578);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5795);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4579 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5796 */
       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, 4579);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5796);
       }
-      /* parser/parser_prod.nit:4580 */
+      /* parser/parser_prod.nit:5797 */
       ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4582 */
+      /* parser/parser_prod.nit:5799 */
       ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4584 */
+    /* parser/parser_prod.nit:5801 */
     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)";
+static const char LOCATE_parser___parser_prod___AAssertExpr___n_kwassert__eq[] = "parser_prod::AAssertExpr::(parser_nodes::AAssertExpr::n_kwassert=)";
+void parser___parser_prod___AAssertExpr___n_kwassert__eq(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 = 5805;
+  fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___n_kwassert__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:5807 */
+  ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5808 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAssertExpr___n_id__eq[] = "parser_prod::AAssertExpr::(parser_nodes::AAssertExpr::n_id=)";
+void parser___parser_prod___AAssertExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5810;
+  fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___n_id__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:5812 */
+  ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5813 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5814 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5814);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAssertExpr___n_expr__eq[] = "parser_prod::AAssertExpr::(parser_nodes::AAssertExpr::n_expr=)";
+void parser___parser_prod___AAssertExpr___n_expr__eq(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 = 5817;
+  fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___n_expr__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:5819 */
+  ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5820 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAssertExpr___n_else__eq[] = "parser_prod::AAssertExpr::(parser_nodes::AAssertExpr::n_else=)";
+void parser___parser_prod___AAssertExpr___n_else__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 5822;
+  fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___n_else__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:5824 */
+  ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5825 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:5826 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5826);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAssertExpr___visit_all[] = "parser_prod::AAssertExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -25408,7 +31502,7 @@ void parser___parser_prod___AAssertExpr___visit_all(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 = 4588;
+  fra.me.line = 5831;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25419,17 +31513,17 @@ void parser___parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4588 */
+  /* parser/parser_prod.nit:5831 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4590 */
+  /* parser/parser_prod.nit:5833 */
   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, 4590);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 5833);
   }
   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:4591 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5834 */
   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)) {
@@ -25445,24 +31539,24 @@ void parser___parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4592 */
+    /* parser/parser_prod.nit:5835 */
     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, 4592);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5835);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4594 */
+  /* parser/parser_prod.nit:5837 */
   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, 4594);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5837);
   }
   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:4595 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5838 */
   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)) {
@@ -25478,27 +31572,27 @@ void parser___parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4596 */
+    /* parser/parser_prod.nit:5839 */
     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, 4596);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5839);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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;
+  int itpos132 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOnceExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos133]) return;
+  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 = 4601;
+  fra.me.line = 5844;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -25506,19 +31600,19 @@ void parser___parser_prod___AOnceExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos133] = 1;
+  init_table[itpos132] = 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;
+  int itpos133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOnceExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos134]) return;
+  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 = 4603;
+  fra.me.line = 5846;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___init_aonceexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25530,41 +31624,41 @@ void parser___parser_prod___AOnceExpr___init_aonceexpr(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:4603 */
+  /* parser/parser_prod.nit:5846 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4608 */
+  /* parser/parser_prod.nit:5851 */
   CALL_parser___parser_prod___AOnceExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4609 */
+  /* parser/parser_prod.nit:5852 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4609);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5852);
   }
   ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4610 */
+  /* parser/parser_prod.nit:5853 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4610);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5853);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4611 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5854 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4611);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5854);
   }
   ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4612 */
+  /* parser/parser_prod.nit:5855 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4612);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5855);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos133] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AOnceExpr___replace_child[] = "parser_prod::AOnceExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AOnceExpr___replace_child[] = "parser_prod::AOnceExpr::(parser_nodes::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;
@@ -25572,7 +31666,7 @@ 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 = 4615;
+  fra.me.line = 5858;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25584,11 +31678,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:4617 */
+  /* parser/parser_prod.nit:5860 */
   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, 4617);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 5860);
   }
   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]));
@@ -25598,7 +31692,7 @@ 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:4618 */
+    /* parser/parser_prod.nit:5861 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25613,32 +31707,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:4619 */
+      /* parser/parser_prod.nit:5862 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4619);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5862);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4620 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5863 */
       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, 4620);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5863);
       }
-      /* parser/parser_prod.nit:4621 */
+      /* parser/parser_prod.nit:5864 */
       ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4623 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4623);
+      /* parser/parser_prod.nit:5866 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5866);
     }
-    /* parser/parser_prod.nit:4625 */
+    /* parser/parser_prod.nit:5868 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4627 */
+  /* parser/parser_prod.nit:5870 */
   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, 4627);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5870);
   }
   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]));
@@ -25648,7 +31742,7 @@ 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:4628 */
+    /* parser/parser_prod.nit:5871 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25663,39 +31757,83 @@ 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:4629 */
+      /* parser/parser_prod.nit:5872 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4629);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5872);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4630 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5873 */
       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, 4630);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5873);
       }
-      /* parser/parser_prod.nit:4631 */
+      /* parser/parser_prod.nit:5874 */
       ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4633 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4633);
+      /* parser/parser_prod.nit:5876 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5876);
     }
-    /* parser/parser_prod.nit:4635 */
+    /* parser/parser_prod.nit:5878 */
     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)";
+static const char LOCATE_parser___parser_prod___AOnceExpr___n_kwonce__eq[] = "parser_prod::AOnceExpr::(parser_nodes::AOnceExpr::n_kwonce=)";
+void parser___parser_prod___AOnceExpr___n_kwonce__eq(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 = 5882;
+  fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___n_kwonce__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:5884 */
+  ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5885 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AOnceExpr___n_expr__eq[] = "parser_prod::AOnceExpr::(parser_nodes::AProxyExpr::n_expr=)";
+void parser___parser_prod___AOnceExpr___n_expr__eq(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 = 5887;
+  fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___n_expr__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:5889 */
+  ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5890 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AOnceExpr___visit_all[] = "parser_prod::AOnceExpr::(parser_nodes::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 = 4639;
+  fra.me.line = 5894;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25705,34 +31843,34 @@ void parser___parser_prod___AOnceExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4641 */
+  /* parser/parser_prod.nit:5896 */
   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, 4641);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 5896);
   }
   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:4642 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:5897 */
   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, 4642);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5897);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos134 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASendExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos135]) return;
+  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 = 4646;
+  fra.me.line = 5901;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -25740,19 +31878,19 @@ void parser___parser_prod___ASendExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos135] = 1;
+  init_table[itpos134] = 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;
+  int itpos135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASendExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos136]) return;
+  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 = 4648;
+  fra.me.line = 5903;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25762,28 +31900,28 @@ void parser___parser_prod___ASendExpr___init_asendexpr(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4648 */
+  /* parser/parser_prod.nit:5903 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4652 */
+  /* parser/parser_prod.nit:5907 */
   CALL_parser___parser_prod___ASendExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:4653 */
+  /* parser/parser_prod.nit:5908 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4653);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5908);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4654 */
+  /* parser/parser_prod.nit:5909 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4654);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5909);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos135] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASendExpr___replace_child[] = "parser_prod::ASendExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ASendExpr___replace_child[] = "parser_prod::ASendExpr::(parser_nodes::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;
@@ -25791,7 +31929,7 @@ 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 = 4657;
+  fra.me.line = 5912;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25803,11 +31941,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:4659 */
+  /* parser/parser_prod.nit:5914 */
   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, 5914);
   }
   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]));
@@ -25817,7 +31955,7 @@ 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:4660 */
+    /* parser/parser_prod.nit:5915 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25832,39 +31970,61 @@ 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:4661 */
+      /* parser/parser_prod.nit:5916 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4661);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5916);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4662 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5917 */
       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, 4662);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5917);
       }
-      /* parser/parser_prod.nit:4663 */
+      /* parser/parser_prod.nit:5918 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4665 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4665);
+      /* parser/parser_prod.nit:5920 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5920);
     }
-    /* parser/parser_prod.nit:4667 */
+    /* parser/parser_prod.nit:5922 */
     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)";
+static const char LOCATE_parser___parser_prod___ASendExpr___n_expr__eq[] = "parser_prod::ASendExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ASendExpr___n_expr__eq(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 = 5926;
+  fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___n_expr__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:5928 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5929 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ASendExpr::(parser_nodes::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 = 4671;
+  fra.me.line = 5933;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25873,26 +32033,26 @@ void parser___parser_prod___ASendExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4673 */
+  /* parser/parser_prod.nit:5935 */
   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, 4673);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5935);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos136 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABinopExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos137]) return;
+  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 = 4677;
+  fra.me.line = 5939;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -25900,19 +32060,19 @@ void parser___parser_prod___ABinopExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos137] = 1;
+  init_table[itpos136] = 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;
+  int itpos137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABinopExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos138]) return;
+  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 = 4679;
+  fra.me.line = 5941;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25924,41 +32084,41 @@ void parser___parser_prod___ABinopExpr___init_abinopexpr(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:4679 */
+  /* parser/parser_prod.nit:5941 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4684 */
+  /* parser/parser_prod.nit:5946 */
   CALL_parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4685 */
+  /* parser/parser_prod.nit:5947 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4685);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5947);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4686 */
+  /* parser/parser_prod.nit:5948 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4686);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5948);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4687 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:5949 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4687);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5949);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4688 */
+  /* parser/parser_prod.nit:5950 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4688);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5950);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos137] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ABinopExpr___replace_child[] = "parser_prod::ABinopExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ABinopExpr___replace_child[] = "parser_prod::ABinopExpr::(parser_nodes::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;
@@ -25966,7 +32126,7 @@ 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 = 4691;
+  fra.me.line = 5953;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25978,11 +32138,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:4693 */
+  /* parser/parser_prod.nit:5955 */
   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, 4693);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5955);
   }
   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]));
@@ -25992,7 +32152,7 @@ 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:4694 */
+    /* parser/parser_prod.nit:5956 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26007,32 +32167,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:4695 */
+      /* parser/parser_prod.nit:5957 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4695);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5957);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4696 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5958 */
       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, 4696);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5958);
       }
-      /* parser/parser_prod.nit:4697 */
+      /* parser/parser_prod.nit:5959 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4699 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4699);
+      /* parser/parser_prod.nit:5961 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5961);
     }
-    /* parser/parser_prod.nit:4701 */
+    /* parser/parser_prod.nit:5963 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4703 */
+  /* parser/parser_prod.nit:5965 */
   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, 4703);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5965);
   }
   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]));
@@ -26042,7 +32202,7 @@ 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:4704 */
+    /* parser/parser_prod.nit:5966 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26057,39 +32217,83 @@ 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:4705 */
+      /* parser/parser_prod.nit:5967 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4705);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5967);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4706 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:5968 */
       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, 4706);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5968);
       }
-      /* parser/parser_prod.nit:4707 */
+      /* parser/parser_prod.nit:5969 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4709 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4709);
+      /* parser/parser_prod.nit:5971 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5971);
     }
-    /* parser/parser_prod.nit:4711 */
+    /* parser/parser_prod.nit:5973 */
     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)";
+static const char LOCATE_parser___parser_prod___ABinopExpr___n_expr__eq[] = "parser_prod::ABinopExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ABinopExpr___n_expr__eq(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 = 5977;
+  fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___n_expr__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:5979 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5980 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::ABinopExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___ABinopExpr___n_expr2__eq(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 = 5982;
+  fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___n_expr2__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:5984 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:5985 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ABinopExpr::(parser_nodes::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 = 4715;
+  fra.me.line = 5989;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26099,34 +32303,34 @@ void parser___parser_prod___ABinopExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4717 */
+  /* parser/parser_prod.nit:5991 */
   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, 4717);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5991);
   }
   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:4718 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:5992 */
   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, 4718);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5992);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos138 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos139]) return;
+  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 = 4722;
+  fra.me.line = 5996;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -26134,19 +32338,19 @@ void parser___parser_prod___AOrExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos139] = 1;
+  init_table[itpos138] = 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;
+  int itpos139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos140]) return;
+  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 = 4724;
+  fra.me.line = 5998;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___init_aorexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26158,41 +32362,41 @@ void parser___parser_prod___AOrExpr___init_aorexpr(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:4724 */
+  /* parser/parser_prod.nit:5998 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4729 */
+  /* parser/parser_prod.nit:6003 */
   CALL_parser___parser_prod___AOrExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4730 */
+  /* parser/parser_prod.nit:6004 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4730);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6004);
   }
   ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4731 */
+  /* parser/parser_prod.nit:6005 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4731);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6005);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4732 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6006 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4732);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6006);
   }
   ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4733 */
+  /* parser/parser_prod.nit:6007 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4733);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6007);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos139] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AOrExpr___replace_child[] = "parser_prod::AOrExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AOrExpr___replace_child[] = "parser_prod::AOrExpr::(parser_nodes::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;
@@ -26200,7 +32404,7 @@ 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 = 4736;
+  fra.me.line = 6010;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26212,11 +32416,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:4738 */
+  /* parser/parser_prod.nit:6012 */
   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, 4738);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6012);
   }
   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]));
@@ -26226,7 +32430,7 @@ 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:4739 */
+    /* parser/parser_prod.nit:6013 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26241,32 +32445,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:4740 */
+      /* parser/parser_prod.nit:6014 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4740);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6014);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4741 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6015 */
       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, 4741);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6015);
       }
-      /* parser/parser_prod.nit:4742 */
+      /* parser/parser_prod.nit:6016 */
       ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4744 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4744);
+      /* parser/parser_prod.nit:6018 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6018);
     }
-    /* parser/parser_prod.nit:4746 */
+    /* parser/parser_prod.nit:6020 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4748 */
+  /* parser/parser_prod.nit:6022 */
   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, 4748);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6022);
   }
   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]));
@@ -26276,7 +32480,7 @@ 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:4749 */
+    /* parser/parser_prod.nit:6023 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26291,39 +32495,83 @@ 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:4750 */
+      /* parser/parser_prod.nit:6024 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4750);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6024);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4751 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6025 */
       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, 4751);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6025);
       }
-      /* parser/parser_prod.nit:4752 */
+      /* parser/parser_prod.nit:6026 */
       ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4754 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4754);
+      /* parser/parser_prod.nit:6028 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6028);
     }
-    /* parser/parser_prod.nit:4756 */
+    /* parser/parser_prod.nit:6030 */
     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)";
+static const char LOCATE_parser___parser_prod___AOrExpr___n_expr__eq[] = "parser_prod::AOrExpr::(parser_nodes::AOrExpr::n_expr=)";
+void parser___parser_prod___AOrExpr___n_expr__eq(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 = 6034;
+  fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___n_expr__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:6036 */
+  ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6037 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AOrExpr::(parser_nodes::AOrExpr::n_expr2=)";
+void parser___parser_prod___AOrExpr___n_expr2__eq(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 = 6039;
+  fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___n_expr2__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:6041 */
+  ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6042 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AOrExpr::(parser_nodes::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 = 4760;
+  fra.me.line = 6046;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26333,34 +32581,34 @@ void parser___parser_prod___AOrExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4762 */
+  /* parser/parser_prod.nit:6048 */
   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, 4762);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6048);
   }
   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:4763 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6049 */
   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, 4763);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6049);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos140 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAndExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos141]) return;
+  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 = 4767;
+  fra.me.line = 6053;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -26368,19 +32616,19 @@ void parser___parser_prod___AAndExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos141] = 1;
+  init_table[itpos140] = 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;
+  int itpos141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAndExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos142]) return;
+  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 = 4769;
+  fra.me.line = 6055;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___init_aandexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26392,41 +32640,41 @@ void parser___parser_prod___AAndExpr___init_aandexpr(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:4769 */
+  /* parser/parser_prod.nit:6055 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4774 */
+  /* parser/parser_prod.nit:6060 */
   CALL_parser___parser_prod___AAndExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4775 */
+  /* parser/parser_prod.nit:6061 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4775);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6061);
   }
   ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4776 */
+  /* parser/parser_prod.nit:6062 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4776);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6062);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4777 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6063 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4777);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6063);
   }
   ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4778 */
+  /* parser/parser_prod.nit:6064 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4778);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6064);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos141] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAndExpr___replace_child[] = "parser_prod::AAndExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAndExpr___replace_child[] = "parser_prod::AAndExpr::(parser_nodes::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;
@@ -26434,7 +32682,7 @@ 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 = 4781;
+  fra.me.line = 6067;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26446,11 +32694,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:4783 */
+  /* parser/parser_prod.nit:6069 */
   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, 4783);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6069);
   }
   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]));
@@ -26460,7 +32708,7 @@ 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:4784 */
+    /* parser/parser_prod.nit:6070 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26475,32 +32723,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:4785 */
+      /* parser/parser_prod.nit:6071 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4785);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6071);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4786 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6072 */
       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, 4786);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6072);
       }
-      /* parser/parser_prod.nit:4787 */
+      /* parser/parser_prod.nit:6073 */
       ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4789 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4789);
+      /* parser/parser_prod.nit:6075 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6075);
     }
-    /* parser/parser_prod.nit:4791 */
+    /* parser/parser_prod.nit:6077 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4793 */
+  /* parser/parser_prod.nit:6079 */
   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, 4793);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6079);
   }
   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]));
@@ -26510,7 +32758,7 @@ 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:4794 */
+    /* parser/parser_prod.nit:6080 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26525,39 +32773,83 @@ 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:4795 */
+      /* parser/parser_prod.nit:6081 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4795);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6081);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4796 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6082 */
       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, 4796);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6082);
       }
-      /* parser/parser_prod.nit:4797 */
+      /* parser/parser_prod.nit:6083 */
       ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4799 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4799);
+      /* parser/parser_prod.nit:6085 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6085);
     }
-    /* parser/parser_prod.nit:4801 */
+    /* parser/parser_prod.nit:6087 */
     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)";
+static const char LOCATE_parser___parser_prod___AAndExpr___n_expr__eq[] = "parser_prod::AAndExpr::(parser_nodes::AAndExpr::n_expr=)";
+void parser___parser_prod___AAndExpr___n_expr__eq(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 = 6091;
+  fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___n_expr__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:6093 */
+  ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6094 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AAndExpr::(parser_nodes::AAndExpr::n_expr2=)";
+void parser___parser_prod___AAndExpr___n_expr2__eq(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 = 6096;
+  fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___n_expr2__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:6098 */
+  ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6099 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AAndExpr::(parser_nodes::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 = 4805;
+  fra.me.line = 6103;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26567,34 +32859,34 @@ void parser___parser_prod___AAndExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4807 */
+  /* parser/parser_prod.nit:6105 */
   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, 4807);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6105);
   }
   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:4808 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6106 */
   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, 4808);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6106);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos142 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrElseExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos143]) return;
+  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 = 4812;
+  fra.me.line = 6110;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -26602,19 +32894,19 @@ void parser___parser_prod___AOrElseExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos143] = 1;
+  init_table[itpos142] = 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;
+  int itpos143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrElseExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos144]) return;
+  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 = 4814;
+  fra.me.line = 6112;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___init_aorelseexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26626,41 +32918,41 @@ void parser___parser_prod___AOrElseExpr___init_aorelseexpr(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:4814 */
+  /* parser/parser_prod.nit:6112 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4819 */
+  /* parser/parser_prod.nit:6117 */
   CALL_parser___parser_prod___AOrElseExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4820 */
+  /* parser/parser_prod.nit:6118 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4820);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6118);
   }
   ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4821 */
+  /* parser/parser_prod.nit:6119 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4821);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6119);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4822 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6120 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4822);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6120);
   }
   ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4823 */
+  /* parser/parser_prod.nit:6121 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4823);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6121);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos143] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AOrElseExpr___replace_child[] = "parser_prod::AOrElseExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AOrElseExpr___replace_child[] = "parser_prod::AOrElseExpr::(parser_nodes::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;
@@ -26668,7 +32960,7 @@ 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 = 4826;
+  fra.me.line = 6124;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26680,11 +32972,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:4828 */
+  /* parser/parser_prod.nit:6126 */
   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, 4828);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6126);
   }
   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]));
@@ -26694,7 +32986,7 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4829 */
+    /* parser/parser_prod.nit:6127 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26709,32 +33001,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:4830 */
+      /* parser/parser_prod.nit:6128 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4830);
+        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]);
-      /* parser/parser_prod.nit:4831 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6129 */
       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, 4831);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6129);
       }
-      /* parser/parser_prod.nit:4832 */
+      /* parser/parser_prod.nit:6130 */
       ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4834 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4834);
+      /* parser/parser_prod.nit:6132 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6132);
     }
-    /* parser/parser_prod.nit:4836 */
+    /* parser/parser_prod.nit:6134 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4838 */
+  /* parser/parser_prod.nit:6136 */
   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, 4838);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6136);
   }
   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]));
@@ -26744,7 +33036,7 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4839 */
+    /* parser/parser_prod.nit:6137 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26759,39 +33051,83 @@ 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:4840 */
+      /* parser/parser_prod.nit:6138 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4840);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6138);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4841 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6139 */
       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, 4841);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6139);
       }
-      /* parser/parser_prod.nit:4842 */
+      /* parser/parser_prod.nit:6140 */
       ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4844 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4844);
+      /* parser/parser_prod.nit:6142 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6142);
     }
-    /* parser/parser_prod.nit:4846 */
+    /* parser/parser_prod.nit:6144 */
     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)";
+static const char LOCATE_parser___parser_prod___AOrElseExpr___n_expr__eq[] = "parser_prod::AOrElseExpr::(parser_nodes::AOrElseExpr::n_expr=)";
+void parser___parser_prod___AOrElseExpr___n_expr__eq(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 = 6148;
+  fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___n_expr__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:6150 */
+  ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6151 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AOrElseExpr::(parser_nodes::AOrElseExpr::n_expr2=)";
+void parser___parser_prod___AOrElseExpr___n_expr2__eq(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 = 6153;
+  fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___n_expr2__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:6155 */
+  ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6156 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AOrElseExpr::(parser_nodes::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 = 4850;
+  fra.me.line = 6160;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26801,34 +33137,34 @@ void parser___parser_prod___AOrElseExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4852 */
+  /* parser/parser_prod.nit:6162 */
   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, 4852);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6162);
   }
   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:4853 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6163 */
   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, 4853);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6163);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos144 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANotExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos145]) return;
+  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 = 4857;
+  fra.me.line = 6167;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -26836,19 +33172,19 @@ void parser___parser_prod___ANotExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos145] = 1;
+  init_table[itpos144] = 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;
+  int itpos145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANotExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos146]) return;
+  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 = 4859;
+  fra.me.line = 6169;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___init_anotexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26860,41 +33196,41 @@ void parser___parser_prod___ANotExpr___init_anotexpr(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:4859 */
+  /* parser/parser_prod.nit:6169 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4864 */
+  /* parser/parser_prod.nit:6174 */
   CALL_parser___parser_prod___ANotExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4865 */
+  /* parser/parser_prod.nit:6175 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4865);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6175);
   }
   ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4866 */
+  /* parser/parser_prod.nit:6176 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4866);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6176);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4867 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6177 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4867);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6177);
   }
   ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4868 */
+  /* parser/parser_prod.nit:6178 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4868);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6178);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos145] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ANotExpr___replace_child[] = "parser_prod::ANotExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ANotExpr___replace_child[] = "parser_prod::ANotExpr::(parser_nodes::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;
@@ -26902,7 +33238,7 @@ 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 = 4871;
+  fra.me.line = 6181;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26914,11 +33250,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:4873 */
+  /* parser/parser_prod.nit:6183 */
   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, 4873);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 6183);
   }
   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]));
@@ -26928,7 +33264,7 @@ 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:4874 */
+    /* parser/parser_prod.nit:6184 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26943,32 +33279,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:4875 */
+      /* parser/parser_prod.nit:6185 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4875);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6185);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4876 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6186 */
       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, 4876);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6186);
       }
-      /* parser/parser_prod.nit:4877 */
+      /* parser/parser_prod.nit:6187 */
       ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4879 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4879);
+      /* parser/parser_prod.nit:6189 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6189);
     }
-    /* parser/parser_prod.nit:4881 */
+    /* parser/parser_prod.nit:6191 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4883 */
+  /* parser/parser_prod.nit:6193 */
   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, 4883);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6193);
   }
   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]));
@@ -26978,7 +33314,7 @@ 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:4884 */
+    /* parser/parser_prod.nit:6194 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26993,39 +33329,83 @@ 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:4885 */
+      /* parser/parser_prod.nit:6195 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4885);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6195);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4886 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6196 */
       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, 4886);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6196);
       }
-      /* parser/parser_prod.nit:4887 */
+      /* parser/parser_prod.nit:6197 */
       ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4889 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4889);
+      /* parser/parser_prod.nit:6199 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6199);
     }
-    /* parser/parser_prod.nit:4891 */
+    /* parser/parser_prod.nit:6201 */
     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)";
+static const char LOCATE_parser___parser_prod___ANotExpr___n_kwnot__eq[] = "parser_prod::ANotExpr::(parser_nodes::ANotExpr::n_kwnot=)";
+void parser___parser_prod___ANotExpr___n_kwnot__eq(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 = 6205;
+  fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___n_kwnot__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:6207 */
+  ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6208 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr__eq[] = "parser_prod::ANotExpr::(parser_nodes::ANotExpr::n_expr=)";
+void parser___parser_prod___ANotExpr___n_expr__eq(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 = 6210;
+  fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___n_expr__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:6212 */
+  ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6213 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ANotExpr::(parser_nodes::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 = 4895;
+  fra.me.line = 6217;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27035,34 +33415,34 @@ void parser___parser_prod___ANotExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4897 */
+  /* parser/parser_prod.nit:6219 */
   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, 4897);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 6219);
   }
   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:4898 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6220 */
   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, 4898);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6220);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos146 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEqExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos147]) return;
+  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 = 4902;
+  fra.me.line = 6224;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -27070,19 +33450,19 @@ void parser___parser_prod___AEqExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos147] = 1;
+  init_table[itpos146] = 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;
+  int itpos147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEqExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos148]) return;
+  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 = 4904;
+  fra.me.line = 6226;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___init_aeqexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27094,41 +33474,41 @@ void parser___parser_prod___AEqExpr___init_aeqexpr(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:4904 */
+  /* parser/parser_prod.nit:6226 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4909 */
+  /* parser/parser_prod.nit:6231 */
   CALL_parser___parser_prod___AEqExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4910 */
+  /* parser/parser_prod.nit:6232 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4910);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6232);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4911 */
+  /* parser/parser_prod.nit:6233 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4911);
+    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[3]);
-  /* parser/parser_prod.nit:4912 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6234 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4912);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6234);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4913 */
+  /* parser/parser_prod.nit:6235 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4913);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6235);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos147] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AEqExpr___replace_child[] = "parser_prod::AEqExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AEqExpr___replace_child[] = "parser_prod::AEqExpr::(parser_nodes::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;
@@ -27136,7 +33516,7 @@ 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 = 4916;
+  fra.me.line = 6238;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27148,11 +33528,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:4918 */
+  /* parser/parser_prod.nit:6240 */
   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, 4918);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6240);
   }
   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]));
@@ -27162,7 +33542,7 @@ 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:4919 */
+    /* parser/parser_prod.nit:6241 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27177,32 +33557,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:4920 */
+      /* parser/parser_prod.nit:6242 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4920);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6242);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4921 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6243 */
       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, 4921);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6243);
       }
-      /* parser/parser_prod.nit:4922 */
+      /* parser/parser_prod.nit:6244 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4924 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4924);
+      /* parser/parser_prod.nit:6246 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6246);
     }
-    /* parser/parser_prod.nit:4926 */
+    /* parser/parser_prod.nit:6248 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4928 */
+  /* parser/parser_prod.nit:6250 */
   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, 4928);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6250);
   }
   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]));
@@ -27212,7 +33592,7 @@ 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:4929 */
+    /* parser/parser_prod.nit:6251 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27227,39 +33607,83 @@ 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:4930 */
+      /* parser/parser_prod.nit:6252 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4930);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6252);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4931 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6253 */
       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, 4931);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6253);
       }
-      /* parser/parser_prod.nit:4932 */
+      /* parser/parser_prod.nit:6254 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4934 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4934);
+      /* parser/parser_prod.nit:6256 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6256);
     }
-    /* parser/parser_prod.nit:4936 */
+    /* parser/parser_prod.nit:6258 */
     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)";
+static const char LOCATE_parser___parser_prod___AEqExpr___n_expr__eq[] = "parser_prod::AEqExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___AEqExpr___n_expr__eq(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 = 6262;
+  fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___n_expr__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:6264 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6265 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AEqExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___AEqExpr___n_expr2__eq(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 = 6267;
+  fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___n_expr2__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:6269 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6270 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AEqExpr::(parser_nodes::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 = 4940;
+  fra.me.line = 6274;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27269,34 +33693,34 @@ void parser___parser_prod___AEqExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4942 */
+  /* parser/parser_prod.nit:6276 */
   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, 4942);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6276);
   }
   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:4943 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6277 */
   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, 4943);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6277);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos148 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos149]) return;
+  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 = 4947;
+  fra.me.line = 6281;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -27304,19 +33728,19 @@ void parser___parser_prod___AEeExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos149] = 1;
+  init_table[itpos148] = 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;
+  int itpos149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos150]) return;
+  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 = 4949;
+  fra.me.line = 6283;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___init_aeeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27328,41 +33752,41 @@ void parser___parser_prod___AEeExpr___init_aeeexpr(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:4949 */
+  /* parser/parser_prod.nit:6283 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4954 */
+  /* parser/parser_prod.nit:6288 */
   CALL_parser___parser_prod___AEeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4955 */
+  /* parser/parser_prod.nit:6289 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4955);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6289);
   }
   ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4956 */
+  /* parser/parser_prod.nit:6290 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4956);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6290);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4957 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6291 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4957);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6291);
   }
   ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4958 */
+  /* parser/parser_prod.nit:6292 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4958);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6292);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos149] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AEeExpr___replace_child[] = "parser_prod::AEeExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AEeExpr___replace_child[] = "parser_prod::AEeExpr::(parser_nodes::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;
@@ -27370,7 +33794,7 @@ 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 = 4961;
+  fra.me.line = 6295;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27382,11 +33806,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:4963 */
+  /* parser/parser_prod.nit:6297 */
   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, 4963);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6297);
   }
   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]));
@@ -27396,7 +33820,7 @@ 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:4964 */
+    /* parser/parser_prod.nit:6298 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27411,32 +33835,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:4965 */
+      /* parser/parser_prod.nit:6299 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4965);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6299);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4966 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6300 */
       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, 4966);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6300);
       }
-      /* parser/parser_prod.nit:4967 */
+      /* parser/parser_prod.nit:6301 */
       ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4969 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4969);
+      /* parser/parser_prod.nit:6303 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6303);
     }
-    /* parser/parser_prod.nit:4971 */
+    /* parser/parser_prod.nit:6305 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4973 */
+  /* parser/parser_prod.nit:6307 */
   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, 4973);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6307);
   }
   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]));
@@ -27446,7 +33870,7 @@ 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:4974 */
+    /* parser/parser_prod.nit:6308 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27461,39 +33885,83 @@ 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:4975 */
+      /* parser/parser_prod.nit:6309 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4975);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6309);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4976 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6310 */
       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, 4976);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6310);
       }
-      /* parser/parser_prod.nit:4977 */
+      /* parser/parser_prod.nit:6311 */
       ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4979 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4979);
+      /* parser/parser_prod.nit:6313 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6313);
     }
-    /* parser/parser_prod.nit:4981 */
+    /* parser/parser_prod.nit:6315 */
     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)";
+static const char LOCATE_parser___parser_prod___AEeExpr___n_expr__eq[] = "parser_prod::AEeExpr::(parser_nodes::AEeExpr::n_expr=)";
+void parser___parser_prod___AEeExpr___n_expr__eq(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 = 6319;
+  fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___n_expr__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:6321 */
+  ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6322 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AEeExpr::(parser_nodes::AEeExpr::n_expr2=)";
+void parser___parser_prod___AEeExpr___n_expr2__eq(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 = 6324;
+  fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___n_expr2__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:6326 */
+  ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6327 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AEeExpr::(parser_nodes::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 = 4985;
+  fra.me.line = 6331;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27503,34 +33971,34 @@ void parser___parser_prod___AEeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4987 */
+  /* parser/parser_prod.nit:6333 */
   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, 4987);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6333);
   }
   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:4988 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6334 */
   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, 4988);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6334);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos150 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos151]) return;
+  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 = 4992;
+  fra.me.line = 6338;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -27538,19 +34006,19 @@ void parser___parser_prod___ANeExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos151] = 1;
+  init_table[itpos150] = 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;
+  int itpos151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos152]) return;
+  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 = 4994;
+  fra.me.line = 6340;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___init_aneexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27562,41 +34030,41 @@ void parser___parser_prod___ANeExpr___init_aneexpr(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:4994 */
+  /* parser/parser_prod.nit:6340 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4999 */
+  /* parser/parser_prod.nit:6345 */
   CALL_parser___parser_prod___ANeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5000 */
+  /* parser/parser_prod.nit:6346 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5000);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6346);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5001 */
+  /* parser/parser_prod.nit:6347 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5001);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6347);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5002 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6348 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5002);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6348);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5003 */
+  /* parser/parser_prod.nit:6349 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5003);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6349);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos151] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ANeExpr___replace_child[] = "parser_prod::ANeExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ANeExpr___replace_child[] = "parser_prod::ANeExpr::(parser_nodes::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;
@@ -27604,7 +34072,7 @@ 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 = 5006;
+  fra.me.line = 6352;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27616,11 +34084,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:5008 */
+  /* parser/parser_prod.nit:6354 */
   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, 5008);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6354);
   }
   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]));
@@ -27630,7 +34098,7 @@ 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:5009 */
+    /* parser/parser_prod.nit:6355 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27645,32 +34113,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:5010 */
+      /* parser/parser_prod.nit:6356 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5010);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6356);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5011 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6357 */
       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, 5011);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6357);
       }
-      /* parser/parser_prod.nit:5012 */
+      /* parser/parser_prod.nit:6358 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5014 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5014);
+      /* parser/parser_prod.nit:6360 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6360);
     }
-    /* parser/parser_prod.nit:5016 */
+    /* parser/parser_prod.nit:6362 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5018 */
+  /* parser/parser_prod.nit:6364 */
   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, 5018);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6364);
   }
   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]));
@@ -27680,7 +34148,7 @@ 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:5019 */
+    /* parser/parser_prod.nit:6365 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27695,39 +34163,83 @@ 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:5020 */
+      /* parser/parser_prod.nit:6366 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5020);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6366);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5021 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6367 */
       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, 5021);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6367);
       }
-      /* parser/parser_prod.nit:5022 */
+      /* parser/parser_prod.nit:6368 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5024 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5024);
+      /* parser/parser_prod.nit:6370 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6370);
     }
-    /* parser/parser_prod.nit:5026 */
+    /* parser/parser_prod.nit:6372 */
     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)";
+static const char LOCATE_parser___parser_prod___ANeExpr___n_expr__eq[] = "parser_prod::ANeExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ANeExpr___n_expr__eq(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 = 6376;
+  fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___n_expr__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:6378 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6379 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::ANeExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___ANeExpr___n_expr2__eq(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 = 6381;
+  fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___n_expr2__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:6383 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6384 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ANeExpr::(parser_nodes::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 = 5030;
+  fra.me.line = 6388;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27737,34 +34249,34 @@ void parser___parser_prod___ANeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5032 */
+  /* parser/parser_prod.nit:6390 */
   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, 5032);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6390);
   }
   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:5033 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6391 */
   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, 5033);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6391);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos152 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALtExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos153]) return;
+  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 = 5037;
+  fra.me.line = 6395;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -27772,19 +34284,19 @@ void parser___parser_prod___ALtExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos153] = 1;
+  init_table[itpos152] = 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;
+  int itpos153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALtExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos154]) return;
+  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 = 5039;
+  fra.me.line = 6397;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___init_altexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27796,41 +34308,41 @@ void parser___parser_prod___ALtExpr___init_altexpr(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:5039 */
+  /* parser/parser_prod.nit:6397 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5044 */
+  /* parser/parser_prod.nit:6402 */
   CALL_parser___parser_prod___ALtExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5045 */
+  /* parser/parser_prod.nit:6403 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5045);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6403);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5046 */
+  /* parser/parser_prod.nit:6404 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5046);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6404);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5047 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6405 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5047);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6405);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5048 */
+  /* parser/parser_prod.nit:6406 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5048);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6406);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos153] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ALtExpr___replace_child[] = "parser_prod::ALtExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ALtExpr___replace_child[] = "parser_prod::ALtExpr::(parser_nodes::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;
@@ -27838,7 +34350,7 @@ 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 = 5051;
+  fra.me.line = 6409;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27850,11 +34362,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:5053 */
+  /* parser/parser_prod.nit:6411 */
   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, 5053);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6411);
   }
   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]));
@@ -27864,7 +34376,7 @@ 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:5054 */
+    /* parser/parser_prod.nit:6412 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27879,32 +34391,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:5055 */
+      /* parser/parser_prod.nit:6413 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5055);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6413);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5056 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6414 */
       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, 5056);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6414);
       }
-      /* parser/parser_prod.nit:5057 */
+      /* parser/parser_prod.nit:6415 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5059 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5059);
+      /* parser/parser_prod.nit:6417 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6417);
     }
-    /* parser/parser_prod.nit:5061 */
+    /* parser/parser_prod.nit:6419 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5063 */
+  /* parser/parser_prod.nit:6421 */
   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, 5063);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6421);
   }
   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]));
@@ -27914,7 +34426,7 @@ 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:5064 */
+    /* parser/parser_prod.nit:6422 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27929,39 +34441,83 @@ 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:5065 */
+      /* parser/parser_prod.nit:6423 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5065);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6423);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5066 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6424 */
       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, 5066);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6424);
       }
-      /* parser/parser_prod.nit:5067 */
+      /* parser/parser_prod.nit:6425 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5069 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5069);
+      /* parser/parser_prod.nit:6427 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6427);
     }
-    /* parser/parser_prod.nit:5071 */
+    /* parser/parser_prod.nit:6429 */
     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)";
+static const char LOCATE_parser___parser_prod___ALtExpr___n_expr__eq[] = "parser_prod::ALtExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ALtExpr___n_expr__eq(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 = 6433;
+  fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___n_expr__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:6435 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6436 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::ALtExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___ALtExpr___n_expr2__eq(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 = 6438;
+  fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___n_expr2__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:6440 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6441 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ALtExpr::(parser_nodes::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 = 5075;
+  fra.me.line = 6445;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27971,34 +34527,34 @@ void parser___parser_prod___ALtExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5077 */
+  /* parser/parser_prod.nit:6447 */
   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, 5077);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6447);
   }
   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:5078 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6448 */
   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, 5078);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6448);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos154 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos155]) return;
+  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 = 5082;
+  fra.me.line = 6452;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -28006,19 +34562,19 @@ void parser___parser_prod___ALeExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos155] = 1;
+  init_table[itpos154] = 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;
+  int itpos155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos156]) return;
+  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 = 5084;
+  fra.me.line = 6454;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___init_aleexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28030,41 +34586,41 @@ void parser___parser_prod___ALeExpr___init_aleexpr(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:5084 */
+  /* parser/parser_prod.nit:6454 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5089 */
+  /* parser/parser_prod.nit:6459 */
   CALL_parser___parser_prod___ALeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5090 */
+  /* parser/parser_prod.nit:6460 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5090);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6460);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5091 */
+  /* parser/parser_prod.nit:6461 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5091);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6461);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5092 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6462 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5092);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6462);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5093 */
+  /* parser/parser_prod.nit:6463 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5093);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6463);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos155] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ALeExpr___replace_child[] = "parser_prod::ALeExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ALeExpr___replace_child[] = "parser_prod::ALeExpr::(parser_nodes::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;
@@ -28072,7 +34628,7 @@ 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 = 5096;
+  fra.me.line = 6466;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28084,11 +34640,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:5098 */
+  /* parser/parser_prod.nit:6468 */
   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, 5098);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6468);
   }
   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]));
@@ -28098,7 +34654,7 @@ 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:5099 */
+    /* parser/parser_prod.nit:6469 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28113,32 +34669,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:5100 */
+      /* 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, 5100);
+        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:5101 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6471 */
       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, 5101);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6471);
       }
-      /* parser/parser_prod.nit:5102 */
+      /* parser/parser_prod.nit:6472 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5104 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5104);
+      /* parser/parser_prod.nit:6474 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6474);
     }
-    /* parser/parser_prod.nit:5106 */
+    /* parser/parser_prod.nit:6476 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5108 */
+  /* parser/parser_prod.nit:6478 */
   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, 5108);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6478);
   }
   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]));
@@ -28148,7 +34704,7 @@ 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:5109 */
+    /* parser/parser_prod.nit:6479 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28163,39 +34719,83 @@ 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:5110 */
+      /* 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, 5110);
+        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:5111 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6481 */
       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, 5111);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6481);
       }
-      /* parser/parser_prod.nit:5112 */
+      /* parser/parser_prod.nit:6482 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5114 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5114);
+      /* parser/parser_prod.nit:6484 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6484);
     }
-    /* parser/parser_prod.nit:5116 */
+    /* parser/parser_prod.nit:6486 */
     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)";
+static const char LOCATE_parser___parser_prod___ALeExpr___n_expr__eq[] = "parser_prod::ALeExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ALeExpr___n_expr__eq(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 = 6490;
+  fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___n_expr__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:6492 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6493 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::ALeExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___ALeExpr___n_expr2__eq(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 = 6495;
+  fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___n_expr2__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:6497 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6498 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ALeExpr::(parser_nodes::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 = 5120;
+  fra.me.line = 6502;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28205,34 +34805,34 @@ void parser___parser_prod___ALeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5122 */
+  /* parser/parser_prod.nit:6504 */
   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, 5122);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6504);
   }
   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:5123 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6505 */
   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, 5123);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6505);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos156 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALlExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos157]) return;
+  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 = 5127;
+  fra.me.line = 6509;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -28240,19 +34840,19 @@ void parser___parser_prod___ALlExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos157] = 1;
+  init_table[itpos156] = 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;
+  int itpos157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALlExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos158]) return;
+  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 = 5129;
+  fra.me.line = 6511;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___init_allexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28264,41 +34864,41 @@ void parser___parser_prod___ALlExpr___init_allexpr(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:5129 */
+  /* parser/parser_prod.nit:6511 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5134 */
+  /* parser/parser_prod.nit:6516 */
   CALL_parser___parser_prod___ALlExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5135 */
+  /* parser/parser_prod.nit:6517 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5135);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6517);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5136 */
+  /* parser/parser_prod.nit:6518 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5136);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6518);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5137 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6519 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5137);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6519);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5138 */
+  /* parser/parser_prod.nit:6520 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5138);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6520);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos157] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ALlExpr___replace_child[] = "parser_prod::ALlExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ALlExpr___replace_child[] = "parser_prod::ALlExpr::(parser_nodes::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;
@@ -28306,7 +34906,7 @@ 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 = 5141;
+  fra.me.line = 6523;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28318,11 +34918,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:5143 */
+  /* parser/parser_prod.nit:6525 */
   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, 5143);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6525);
   }
   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]));
@@ -28332,7 +34932,7 @@ 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:5144 */
+    /* parser/parser_prod.nit:6526 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28347,32 +34947,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:5145 */
+      /* parser/parser_prod.nit:6527 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5145);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6527);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5146 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6528 */
       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, 5146);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6528);
       }
-      /* parser/parser_prod.nit:5147 */
+      /* parser/parser_prod.nit:6529 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5149 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5149);
+      /* parser/parser_prod.nit:6531 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6531);
     }
-    /* parser/parser_prod.nit:5151 */
+    /* parser/parser_prod.nit:6533 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5153 */
+  /* parser/parser_prod.nit:6535 */
   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, 5153);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6535);
   }
   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]));
@@ -28382,7 +34982,7 @@ 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:5154 */
+    /* parser/parser_prod.nit:6536 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28397,39 +34997,83 @@ 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:5155 */
+      /* parser/parser_prod.nit:6537 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5155);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6537);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5156 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6538 */
       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, 5156);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6538);
       }
-      /* parser/parser_prod.nit:5157 */
+      /* parser/parser_prod.nit:6539 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5159 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5159);
+      /* parser/parser_prod.nit:6541 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6541);
     }
-    /* parser/parser_prod.nit:5161 */
+    /* parser/parser_prod.nit:6543 */
     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)";
+static const char LOCATE_parser___parser_prod___ALlExpr___n_expr__eq[] = "parser_prod::ALlExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ALlExpr___n_expr__eq(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 = 6547;
+  fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___n_expr__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:6549 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6550 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::ALlExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___ALlExpr___n_expr2__eq(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 = 6552;
+  fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___n_expr2__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:6554 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6555 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ALlExpr::(parser_nodes::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 = 5165;
+  fra.me.line = 6559;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28439,34 +35083,34 @@ void parser___parser_prod___ALlExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5167 */
+  /* parser/parser_prod.nit:6561 */
   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, 5167);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6561);
   }
   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:5168 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6562 */
   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, 5168);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6562);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos158 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGtExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos159]) return;
+  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 = 5172;
+  fra.me.line = 6566;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -28474,19 +35118,19 @@ void parser___parser_prod___AGtExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos159] = 1;
+  init_table[itpos158] = 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;
+  int itpos159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGtExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos160]) return;
+  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 = 5174;
+  fra.me.line = 6568;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___init_agtexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28498,41 +35142,41 @@ void parser___parser_prod___AGtExpr___init_agtexpr(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:5174 */
+  /* parser/parser_prod.nit:6568 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5179 */
+  /* parser/parser_prod.nit:6573 */
   CALL_parser___parser_prod___AGtExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5180 */
+  /* parser/parser_prod.nit:6574 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5180);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6574);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5181 */
+  /* parser/parser_prod.nit:6575 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5181);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6575);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5182 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6576 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5182);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6576);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5183 */
+  /* 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, 5183);
+    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[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos159] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AGtExpr___replace_child[] = "parser_prod::AGtExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AGtExpr___replace_child[] = "parser_prod::AGtExpr::(parser_nodes::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;
@@ -28540,7 +35184,7 @@ 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 = 5186;
+  fra.me.line = 6580;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28552,11 +35196,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:5188 */
+  /* parser/parser_prod.nit:6582 */
   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, 5188);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6582);
   }
   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]));
@@ -28566,7 +35210,7 @@ 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:5189 */
+    /* parser/parser_prod.nit:6583 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28581,32 +35225,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:5190 */
+      /* parser/parser_prod.nit:6584 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5190);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6584);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5191 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6585 */
       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, 5191);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6585);
       }
-      /* parser/parser_prod.nit:5192 */
+      /* parser/parser_prod.nit:6586 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5194 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5194);
+      /* parser/parser_prod.nit:6588 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6588);
     }
-    /* parser/parser_prod.nit:5196 */
+    /* parser/parser_prod.nit:6590 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5198 */
+  /* parser/parser_prod.nit:6592 */
   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, 5198);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6592);
   }
   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]));
@@ -28616,7 +35260,7 @@ 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:5199 */
+    /* parser/parser_prod.nit:6593 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28631,39 +35275,83 @@ 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:5200 */
+      /* parser/parser_prod.nit:6594 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5200);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6594);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5201 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6595 */
       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, 5201);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6595);
       }
-      /* parser/parser_prod.nit:5202 */
+      /* parser/parser_prod.nit:6596 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5204 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5204);
+      /* parser/parser_prod.nit:6598 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6598);
     }
-    /* parser/parser_prod.nit:5206 */
+    /* parser/parser_prod.nit:6600 */
     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)";
+static const char LOCATE_parser___parser_prod___AGtExpr___n_expr__eq[] = "parser_prod::AGtExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___AGtExpr___n_expr__eq(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 = 6604;
+  fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___n_expr__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:6606 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6607 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AGtExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___AGtExpr___n_expr2__eq(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 = 6609;
+  fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___n_expr2__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:6611 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6612 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AGtExpr::(parser_nodes::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 = 5210;
+  fra.me.line = 6616;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28673,34 +35361,34 @@ void parser___parser_prod___AGtExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5212 */
+  /* parser/parser_prod.nit:6618 */
   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, 5212);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6618);
   }
   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:5213 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6619 */
   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, 5213);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6619);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos160 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos161]) return;
+  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 = 5217;
+  fra.me.line = 6623;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -28708,19 +35396,19 @@ void parser___parser_prod___AGeExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos161] = 1;
+  init_table[itpos160] = 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;
+  int itpos161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos162]) return;
+  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 = 5219;
+  fra.me.line = 6625;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___init_ageexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28732,41 +35420,41 @@ void parser___parser_prod___AGeExpr___init_ageexpr(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:5219 */
+  /* parser/parser_prod.nit:6625 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5224 */
+  /* parser/parser_prod.nit:6630 */
   CALL_parser___parser_prod___AGeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5225 */
+  /* parser/parser_prod.nit:6631 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5225);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6631);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5226 */
+  /* parser/parser_prod.nit:6632 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5226);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6632);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5227 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6633 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5227);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6633);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5228 */
+  /* parser/parser_prod.nit:6634 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5228);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6634);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos161] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AGeExpr___replace_child[] = "parser_prod::AGeExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AGeExpr___replace_child[] = "parser_prod::AGeExpr::(parser_nodes::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;
@@ -28774,7 +35462,7 @@ 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 = 5231;
+  fra.me.line = 6637;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28786,11 +35474,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:5233 */
+  /* parser/parser_prod.nit:6639 */
   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, 5233);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6639);
   }
   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]));
@@ -28800,7 +35488,7 @@ 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:5234 */
+    /* parser/parser_prod.nit:6640 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28815,32 +35503,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:5235 */
+      /* parser/parser_prod.nit:6641 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5235);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6641);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5236 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6642 */
       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, 5236);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6642);
       }
-      /* parser/parser_prod.nit:5237 */
+      /* parser/parser_prod.nit:6643 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5239 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5239);
+      /* parser/parser_prod.nit:6645 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6645);
     }
-    /* parser/parser_prod.nit:5241 */
+    /* parser/parser_prod.nit:6647 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5243 */
+  /* parser/parser_prod.nit:6649 */
   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, 5243);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6649);
   }
   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]));
@@ -28850,7 +35538,7 @@ 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:5244 */
+    /* parser/parser_prod.nit:6650 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28865,39 +35553,83 @@ 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:5245 */
+      /* parser/parser_prod.nit:6651 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5245);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6651);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5246 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6652 */
       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, 5246);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6652);
       }
-      /* parser/parser_prod.nit:5247 */
+      /* parser/parser_prod.nit:6653 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5249 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5249);
+      /* parser/parser_prod.nit:6655 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6655);
     }
-    /* parser/parser_prod.nit:5251 */
+    /* parser/parser_prod.nit:6657 */
     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)";
+static const char LOCATE_parser___parser_prod___AGeExpr___n_expr__eq[] = "parser_prod::AGeExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___AGeExpr___n_expr__eq(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 = 6661;
+  fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___n_expr__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:6663 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6664 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AGeExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___AGeExpr___n_expr2__eq(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 = 6666;
+  fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___n_expr2__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:6668 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6669 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AGeExpr::(parser_nodes::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 = 5255;
+  fra.me.line = 6673;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28907,34 +35639,34 @@ void parser___parser_prod___AGeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5257 */
+  /* parser/parser_prod.nit:6675 */
   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, 5257);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6675);
   }
   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:5258 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6676 */
   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, 5258);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6676);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos162 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGgExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos163]) return;
+  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 = 5262;
+  fra.me.line = 6680;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -28942,19 +35674,19 @@ void parser___parser_prod___AGgExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos163] = 1;
+  init_table[itpos162] = 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;
+  int itpos163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AGgExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos164]) return;
+  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 = 5264;
+  fra.me.line = 6682;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___init_aggexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28966,41 +35698,41 @@ void parser___parser_prod___AGgExpr___init_aggexpr(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:5264 */
+  /* parser/parser_prod.nit:6682 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5269 */
+  /* parser/parser_prod.nit:6687 */
   CALL_parser___parser_prod___AGgExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5270 */
+  /* parser/parser_prod.nit:6688 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5270);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6688);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5271 */
+  /* parser/parser_prod.nit:6689 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5271);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6689);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5272 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6690 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5272);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6690);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5273 */
+  /* parser/parser_prod.nit:6691 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5273);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6691);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos163] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AGgExpr___replace_child[] = "parser_prod::AGgExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AGgExpr___replace_child[] = "parser_prod::AGgExpr::(parser_nodes::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;
@@ -29008,7 +35740,7 @@ 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 = 5276;
+  fra.me.line = 6694;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29020,11 +35752,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:5278 */
+  /* parser/parser_prod.nit:6696 */
   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, 5278);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6696);
   }
   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]));
@@ -29034,7 +35766,7 @@ 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:5279 */
+    /* parser/parser_prod.nit:6697 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29049,32 +35781,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:5280 */
+      /* parser/parser_prod.nit:6698 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5280);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6698);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5281 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6699 */
       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, 5281);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6699);
       }
-      /* parser/parser_prod.nit:5282 */
+      /* parser/parser_prod.nit:6700 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5284 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5284);
+      /* parser/parser_prod.nit:6702 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6702);
     }
-    /* parser/parser_prod.nit:5286 */
+    /* parser/parser_prod.nit:6704 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5288 */
+  /* parser/parser_prod.nit:6706 */
   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, 5288);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6706);
   }
   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]));
@@ -29084,7 +35816,7 @@ 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:5289 */
+    /* parser/parser_prod.nit:6707 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29099,39 +35831,83 @@ 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:5290 */
+      /* parser/parser_prod.nit:6708 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5290);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6708);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5291 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6709 */
       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, 5291);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6709);
       }
-      /* parser/parser_prod.nit:5292 */
+      /* parser/parser_prod.nit:6710 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5294 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5294);
+      /* parser/parser_prod.nit:6712 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6712);
     }
-    /* parser/parser_prod.nit:5296 */
+    /* parser/parser_prod.nit:6714 */
     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)";
+static const char LOCATE_parser___parser_prod___AGgExpr___n_expr__eq[] = "parser_prod::AGgExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___AGgExpr___n_expr__eq(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 = 6718;
+  fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___n_expr__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:6720 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6721 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AGgExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___AGgExpr___n_expr2__eq(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 = 6723;
+  fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___n_expr2__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:6725 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6726 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AGgExpr::(parser_nodes::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 = 5300;
+  fra.me.line = 6730;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29141,34 +35917,34 @@ void parser___parser_prod___AGgExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5302 */
+  /* parser/parser_prod.nit:6732 */
   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, 5302);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6732);
   }
   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:5303 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6733 */
   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, 5303);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6733);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos164 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIsaExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos165]) return;
+  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 = 5307;
+  fra.me.line = 6737;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -29176,19 +35952,19 @@ void parser___parser_prod___AIsaExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos165] = 1;
+  init_table[itpos164] = 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;
+  int itpos165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIsaExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos166]) return;
+  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 = 5309;
+  fra.me.line = 6739;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___init_aisaexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29200,41 +35976,41 @@ void parser___parser_prod___AIsaExpr___init_aisaexpr(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:5309 */
+  /* parser/parser_prod.nit:6739 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5314 */
+  /* parser/parser_prod.nit:6744 */
   CALL_parser___parser_prod___AIsaExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5315 */
+  /* parser/parser_prod.nit:6745 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5315);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6745);
   }
   ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5316 */
+  /* parser/parser_prod.nit:6746 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5316);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6746);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5317 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6747 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5317);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6747);
   }
   ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5318 */
+  /* parser/parser_prod.nit:6748 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5318);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6748);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos165] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AIsaExpr___replace_child[] = "parser_prod::AIsaExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AIsaExpr___replace_child[] = "parser_prod::AIsaExpr::(parser_nodes::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;
@@ -29242,7 +36018,7 @@ 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 = 5321;
+  fra.me.line = 6751;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29254,11 +36030,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:5323 */
+  /* parser/parser_prod.nit:6753 */
   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, 5323);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6753);
   }
   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]));
@@ -29268,7 +36044,7 @@ 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:5324 */
+    /* parser/parser_prod.nit:6754 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29283,32 +36059,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:5325 */
+      /* parser/parser_prod.nit:6755 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5325);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6755);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5326 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6756 */
       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, 5326);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6756);
       }
-      /* parser/parser_prod.nit:5327 */
+      /* parser/parser_prod.nit:6757 */
       ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5329 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5329);
+      /* parser/parser_prod.nit:6759 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6759);
     }
-    /* parser/parser_prod.nit:5331 */
+    /* parser/parser_prod.nit:6761 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5333 */
+  /* parser/parser_prod.nit:6763 */
   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, 5333);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 6763);
   }
   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]));
@@ -29318,7 +36094,7 @@ 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:5334 */
+    /* parser/parser_prod.nit:6764 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29333,39 +36109,83 @@ 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:5335 */
+      /* parser/parser_prod.nit:6765 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5335);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6765);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5336 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6766 */
       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, 5336);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6766);
       }
-      /* parser/parser_prod.nit:5337 */
+      /* parser/parser_prod.nit:6767 */
       ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5339 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5339);
+      /* parser/parser_prod.nit:6769 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6769);
     }
-    /* parser/parser_prod.nit:5341 */
+    /* parser/parser_prod.nit:6771 */
     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)";
+static const char LOCATE_parser___parser_prod___AIsaExpr___n_expr__eq[] = "parser_prod::AIsaExpr::(parser_nodes::AIsaExpr::n_expr=)";
+void parser___parser_prod___AIsaExpr___n_expr__eq(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 = 6775;
+  fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___n_expr__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:6777 */
+  ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6778 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_type__eq[] = "parser_prod::AIsaExpr::(parser_nodes::AIsaExpr::n_type=)";
+void parser___parser_prod___AIsaExpr___n_type__eq(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 = 6780;
+  fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___n_type__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:6782 */
+  ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6783 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AIsaExpr::(parser_nodes::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 = 5345;
+  fra.me.line = 6787;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29375,34 +36195,34 @@ void parser___parser_prod___AIsaExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5347 */
+  /* parser/parser_prod.nit:6789 */
   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, 5347);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6789);
   }
   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:5348 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6790 */
   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, 5348);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 6790);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos166 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos167]) return;
+  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 = 5352;
+  fra.me.line = 6794;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -29410,19 +36230,19 @@ void parser___parser_prod___APlusExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos167] = 1;
+  init_table[itpos166] = 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;
+  int itpos167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos168]) return;
+  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 = 5354;
+  fra.me.line = 6796;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___init_aplusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29434,41 +36254,41 @@ void parser___parser_prod___APlusExpr___init_aplusexpr(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:5354 */
+  /* parser/parser_prod.nit:6796 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5359 */
+  /* parser/parser_prod.nit:6801 */
   CALL_parser___parser_prod___APlusExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5360 */
+  /* parser/parser_prod.nit:6802 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5360);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6802);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5361 */
+  /* parser/parser_prod.nit:6803 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5361);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6803);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5362 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6804 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5362);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6804);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5363 */
+  /* parser/parser_prod.nit:6805 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5363);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6805);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos167] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___APlusExpr___replace_child[] = "parser_prod::APlusExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___APlusExpr___replace_child[] = "parser_prod::APlusExpr::(parser_nodes::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;
@@ -29476,7 +36296,7 @@ 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 = 5366;
+  fra.me.line = 6808;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29488,11 +36308,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:5368 */
+  /* parser/parser_prod.nit:6810 */
   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, 5368);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6810);
   }
   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]));
@@ -29502,7 +36322,7 @@ 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:5369 */
+    /* parser/parser_prod.nit:6811 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29517,32 +36337,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:5370 */
+      /* parser/parser_prod.nit:6812 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5370);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6812);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5371 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6813 */
       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, 5371);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6813);
       }
-      /* parser/parser_prod.nit:5372 */
+      /* parser/parser_prod.nit:6814 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5374 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5374);
+      /* parser/parser_prod.nit:6816 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6816);
     }
-    /* parser/parser_prod.nit:5376 */
+    /* parser/parser_prod.nit:6818 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5378 */
+  /* parser/parser_prod.nit:6820 */
   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, 5378);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6820);
   }
   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]));
@@ -29552,7 +36372,7 @@ 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:5379 */
+    /* parser/parser_prod.nit:6821 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29567,39 +36387,83 @@ 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:5380 */
+      /* parser/parser_prod.nit:6822 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5380);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6822);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5381 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6823 */
       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, 5381);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6823);
       }
-      /* parser/parser_prod.nit:5382 */
+      /* parser/parser_prod.nit:6824 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5384 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5384);
+      /* parser/parser_prod.nit:6826 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6826);
     }
-    /* parser/parser_prod.nit:5386 */
+    /* parser/parser_prod.nit:6828 */
     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)";
+static const char LOCATE_parser___parser_prod___APlusExpr___n_expr__eq[] = "parser_prod::APlusExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___APlusExpr___n_expr__eq(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 = 6832;
+  fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___n_expr__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:6834 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6835 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::APlusExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___APlusExpr___n_expr2__eq(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 = 6837;
+  fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___n_expr2__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:6839 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6840 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::APlusExpr::(parser_nodes::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 = 5390;
+  fra.me.line = 6844;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29609,34 +36473,34 @@ void parser___parser_prod___APlusExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5392 */
+  /* parser/parser_prod.nit:6846 */
   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, 5392);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6846);
   }
   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:5393 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6847 */
   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, 5393);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6847);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos168 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos169]) return;
+  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 = 5397;
+  fra.me.line = 6851;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -29644,19 +36508,19 @@ void parser___parser_prod___AMinusExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos169] = 1;
+  init_table[itpos168] = 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;
+  int itpos169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos170]) return;
+  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 = 5399;
+  fra.me.line = 6853;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___init_aminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29668,41 +36532,41 @@ void parser___parser_prod___AMinusExpr___init_aminusexpr(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:5399 */
+  /* parser/parser_prod.nit:6853 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5404 */
+  /* parser/parser_prod.nit:6858 */
   CALL_parser___parser_prod___AMinusExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5405 */
+  /* parser/parser_prod.nit:6859 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5405);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6859);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5406 */
+  /* parser/parser_prod.nit:6860 */
   REGB0 = TAG_Bool(fra.me.REG[1]==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, 6860);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5407 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6861 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5407);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6861);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5408 */
+  /* parser/parser_prod.nit:6862 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5408);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6862);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos169] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AMinusExpr___replace_child[] = "parser_prod::AMinusExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AMinusExpr___replace_child[] = "parser_prod::AMinusExpr::(parser_nodes::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;
@@ -29710,7 +36574,7 @@ 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 = 5411;
+  fra.me.line = 6865;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29722,11 +36586,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:5413 */
+  /* parser/parser_prod.nit:6867 */
   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, 5413);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6867);
   }
   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]));
@@ -29736,7 +36600,7 @@ 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:5414 */
+    /* parser/parser_prod.nit:6868 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29751,32 +36615,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:5415 */
+      /* parser/parser_prod.nit:6869 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5415);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6869);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5416 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6870 */
       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, 5416);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6870);
       }
-      /* parser/parser_prod.nit:5417 */
+      /* parser/parser_prod.nit:6871 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5419 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5419);
+      /* parser/parser_prod.nit:6873 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6873);
     }
-    /* parser/parser_prod.nit:5421 */
+    /* parser/parser_prod.nit:6875 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5423 */
+  /* parser/parser_prod.nit:6877 */
   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, 5423);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6877);
   }
   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]));
@@ -29786,7 +36650,7 @@ 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:5424 */
+    /* parser/parser_prod.nit:6878 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29801,39 +36665,83 @@ 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:5425 */
+      /* parser/parser_prod.nit:6879 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5425);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6879);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5426 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6880 */
       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, 5426);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6880);
       }
-      /* parser/parser_prod.nit:5427 */
+      /* parser/parser_prod.nit:6881 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5429 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5429);
+      /* parser/parser_prod.nit:6883 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6883);
     }
-    /* parser/parser_prod.nit:5431 */
+    /* parser/parser_prod.nit:6885 */
     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)";
+static const char LOCATE_parser___parser_prod___AMinusExpr___n_expr__eq[] = "parser_prod::AMinusExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___AMinusExpr___n_expr__eq(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 = 6889;
+  fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___n_expr__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:6891 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6892 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AMinusExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___AMinusExpr___n_expr2__eq(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 = 6894;
+  fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___n_expr2__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:6896 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6897 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AMinusExpr::(parser_nodes::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 = 5435;
+  fra.me.line = 6901;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29843,34 +36751,34 @@ void parser___parser_prod___AMinusExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5437 */
+  /* parser/parser_prod.nit:6903 */
   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, 5437);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6903);
   }
   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:5438 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6904 */
   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, 5438);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6904);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos170 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarshipExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos171]) return;
+  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 = 5442;
+  fra.me.line = 6908;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -29878,19 +36786,19 @@ void parser___parser_prod___AStarshipExpr___empty_init(val_t p0, int* init_table
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos171] = 1;
+  init_table[itpos170] = 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;
+  int itpos171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarshipExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos172]) return;
+  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 = 5444;
+  fra.me.line = 6910;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___init_astarshipexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29902,41 +36810,41 @@ void parser___parser_prod___AStarshipExpr___init_astarshipexpr(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:5444 */
+  /* parser/parser_prod.nit:6910 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5449 */
+  /* parser/parser_prod.nit:6915 */
   CALL_parser___parser_prod___AStarshipExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5450 */
+  /* parser/parser_prod.nit:6916 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5450);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6916);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5451 */
+  /* parser/parser_prod.nit:6917 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5451);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6917);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5452 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6918 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5452);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6918);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5453 */
+  /* parser/parser_prod.nit:6919 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5453);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6919);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos171] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AStarshipExpr___replace_child[] = "parser_prod::AStarshipExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AStarshipExpr___replace_child[] = "parser_prod::AStarshipExpr::(parser_nodes::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;
@@ -29944,7 +36852,7 @@ 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 = 5456;
+  fra.me.line = 6922;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29956,11 +36864,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:5458 */
+  /* parser/parser_prod.nit:6924 */
   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, 5458);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6924);
   }
   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]));
@@ -29970,7 +36878,7 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5459 */
+    /* parser/parser_prod.nit:6925 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29985,32 +36893,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:5460 */
+      /* parser/parser_prod.nit:6926 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5460);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6926);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5461 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6927 */
       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, 5461);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6927);
       }
-      /* parser/parser_prod.nit:5462 */
+      /* parser/parser_prod.nit:6928 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5464 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5464);
+      /* parser/parser_prod.nit:6930 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6930);
     }
-    /* parser/parser_prod.nit:5466 */
+    /* parser/parser_prod.nit:6932 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5468 */
+  /* parser/parser_prod.nit:6934 */
   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, 5468);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6934);
   }
   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]));
@@ -30020,7 +36928,7 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5469 */
+    /* parser/parser_prod.nit:6935 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30035,39 +36943,83 @@ 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:5470 */
+      /* parser/parser_prod.nit:6936 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5470);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6936);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5471 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6937 */
       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, 5471);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6937);
       }
-      /* parser/parser_prod.nit:5472 */
+      /* parser/parser_prod.nit:6938 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5474 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5474);
+      /* parser/parser_prod.nit:6940 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6940);
     }
-    /* parser/parser_prod.nit:5476 */
+    /* parser/parser_prod.nit:6942 */
     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)";
+static const char LOCATE_parser___parser_prod___AStarshipExpr___n_expr__eq[] = "parser_prod::AStarshipExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___AStarshipExpr___n_expr__eq(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 = 6946;
+  fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___n_expr__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:6948 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6949 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AStarshipExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___AStarshipExpr___n_expr2__eq(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 = 6951;
+  fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___n_expr2__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:6953 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6954 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AStarshipExpr::(parser_nodes::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 = 5480;
+  fra.me.line = 6958;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -30077,34 +37029,34 @@ void parser___parser_prod___AStarshipExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5482 */
+  /* parser/parser_prod.nit:6960 */
   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, 5482);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6960);
   }
   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:5483 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:6961 */
   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, 5483);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6961);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos172 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos173]) return;
+  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 = 5487;
+  fra.me.line = 6965;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -30112,19 +37064,19 @@ void parser___parser_prod___AStarExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos173] = 1;
+  init_table[itpos172] = 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;
+  int itpos173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStarExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos174]) return;
+  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 = 5489;
+  fra.me.line = 6967;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___init_astarexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30136,41 +37088,41 @@ void parser___parser_prod___AStarExpr___init_astarexpr(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:5489 */
+  /* parser/parser_prod.nit:6967 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5494 */
+  /* parser/parser_prod.nit:6972 */
   CALL_parser___parser_prod___AStarExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5495 */
+  /* parser/parser_prod.nit:6973 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5495);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6973);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5496 */
+  /* parser/parser_prod.nit:6974 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5496);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6974);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5497 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6975 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5497);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6975);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5498 */
+  /* parser/parser_prod.nit:6976 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5498);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6976);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos173] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AStarExpr___replace_child[] = "parser_prod::AStarExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AStarExpr___replace_child[] = "parser_prod::AStarExpr::(parser_nodes::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;
@@ -30178,7 +37130,7 @@ 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 = 5501;
+  fra.me.line = 6979;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30190,11 +37142,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:5503 */
+  /* parser/parser_prod.nit:6981 */
   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, 5503);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6981);
   }
   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]));
@@ -30204,7 +37156,7 @@ 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:5504 */
+    /* parser/parser_prod.nit:6982 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30219,32 +37171,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:5505 */
+      /* parser/parser_prod.nit:6983 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5505);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6983);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5506 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6984 */
       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, 5506);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6984);
       }
-      /* parser/parser_prod.nit:5507 */
+      /* parser/parser_prod.nit:6985 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5509 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5509);
+      /* parser/parser_prod.nit:6987 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6987);
     }
-    /* parser/parser_prod.nit:5511 */
+    /* parser/parser_prod.nit:6989 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5513 */
+  /* parser/parser_prod.nit:6991 */
   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, 5513);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6991);
   }
   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]));
@@ -30254,7 +37206,7 @@ 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:5514 */
+    /* parser/parser_prod.nit:6992 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30269,39 +37221,83 @@ 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:5515 */
+      /* parser/parser_prod.nit:6993 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5515);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6993);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5516 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6994 */
       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, 5516);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6994);
       }
-      /* parser/parser_prod.nit:5517 */
+      /* parser/parser_prod.nit:6995 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5519 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5519);
+      /* parser/parser_prod.nit:6997 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6997);
     }
-    /* parser/parser_prod.nit:5521 */
+    /* parser/parser_prod.nit:6999 */
     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)";
+static const char LOCATE_parser___parser_prod___AStarExpr___n_expr__eq[] = "parser_prod::AStarExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___AStarExpr___n_expr__eq(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 = 7003;
+  fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___n_expr__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:7005 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7006 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AStarExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___AStarExpr___n_expr2__eq(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 = 7008;
+  fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___n_expr2__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:7010 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7011 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AStarExpr::(parser_nodes::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 = 5525;
+  fra.me.line = 7015;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -30311,34 +37307,34 @@ void parser___parser_prod___AStarExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5527 */
+  /* parser/parser_prod.nit:7017 */
   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, 5527);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7017);
   }
   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:5528 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7018 */
   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, 5528);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 7018);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos174 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASlashExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos175]) return;
+  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 = 5532;
+  fra.me.line = 7022;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -30346,19 +37342,19 @@ void parser___parser_prod___ASlashExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos175] = 1;
+  init_table[itpos174] = 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;
+  int itpos175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASlashExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos176]) return;
+  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 = 5534;
+  fra.me.line = 7024;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___init_aslashexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30370,41 +37366,41 @@ void parser___parser_prod___ASlashExpr___init_aslashexpr(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:5534 */
+  /* parser/parser_prod.nit:7024 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5539 */
+  /* parser/parser_prod.nit:7029 */
   CALL_parser___parser_prod___ASlashExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5540 */
+  /* parser/parser_prod.nit:7030 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5540);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7030);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5541 */
+  /* parser/parser_prod.nit:7031 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5541);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7031);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5542 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7032 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5542);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7032);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5543 */
+  /* parser/parser_prod.nit:7033 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5543);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7033);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos175] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASlashExpr___replace_child[] = "parser_prod::ASlashExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ASlashExpr___replace_child[] = "parser_prod::ASlashExpr::(parser_nodes::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;
@@ -30412,7 +37408,7 @@ 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 = 5546;
+  fra.me.line = 7036;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30424,11 +37420,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:5548 */
+  /* parser/parser_prod.nit:7038 */
   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, 5548);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7038);
   }
   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]));
@@ -30438,7 +37434,7 @@ 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:5549 */
+    /* parser/parser_prod.nit:7039 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30453,32 +37449,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:5550 */
+      /* 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, 5550);
+        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:5551 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7041 */
       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, 7041);
       }
-      /* parser/parser_prod.nit:5552 */
+      /* parser/parser_prod.nit:7042 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(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:7044 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7044);
     }
-    /* parser/parser_prod.nit:5556 */
+    /* parser/parser_prod.nit:7046 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5558 */
+  /* parser/parser_prod.nit:7048 */
   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, 5558);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 7048);
   }
   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]));
@@ -30488,7 +37484,7 @@ 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:5559 */
+    /* parser/parser_prod.nit:7049 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30503,39 +37499,83 @@ 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:5560 */
+      /* parser/parser_prod.nit:7050 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5560);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7050);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5561 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7051 */
       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, 5561);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7051);
       }
-      /* parser/parser_prod.nit:5562 */
+      /* parser/parser_prod.nit:7052 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5564 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5564);
+      /* parser/parser_prod.nit:7054 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7054);
     }
-    /* parser/parser_prod.nit:5566 */
+    /* parser/parser_prod.nit:7056 */
     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)";
+static const char LOCATE_parser___parser_prod___ASlashExpr___n_expr__eq[] = "parser_prod::ASlashExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ASlashExpr___n_expr__eq(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 = 7060;
+  fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___n_expr__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:7062 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7063 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::ASlashExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___ASlashExpr___n_expr2__eq(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 = 7065;
+  fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___n_expr2__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:7067 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7068 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ASlashExpr::(parser_nodes::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 = 5570;
+  fra.me.line = 7072;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -30545,34 +37585,34 @@ void parser___parser_prod___ASlashExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5572 */
+  /* parser/parser_prod.nit:7074 */
   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, 5572);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7074);
   }
   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:5573 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7075 */
   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, 5573);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 7075);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos176 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APercentExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos177]) return;
+  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 = 5577;
+  fra.me.line = 7079;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -30580,19 +37620,19 @@ void parser___parser_prod___APercentExpr___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos177] = 1;
+  init_table[itpos176] = 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;
+  int itpos177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APercentExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos178]) return;
+  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 = 5579;
+  fra.me.line = 7081;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___init_apercentexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30604,41 +37644,41 @@ void parser___parser_prod___APercentExpr___init_apercentexpr(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:5579 */
+  /* parser/parser_prod.nit:7081 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5584 */
+  /* parser/parser_prod.nit:7086 */
   CALL_parser___parser_prod___APercentExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5585 */
+  /* parser/parser_prod.nit:7087 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5585);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7087);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5586 */
+  /* parser/parser_prod.nit:7088 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5586);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7088);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5587 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7089 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5587);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7089);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5588 */
+  /* parser/parser_prod.nit:7090 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5588);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7090);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos177] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___APercentExpr___replace_child[] = "parser_prod::APercentExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___APercentExpr___replace_child[] = "parser_prod::APercentExpr::(parser_nodes::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;
@@ -30646,7 +37686,7 @@ 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 = 5591;
+  fra.me.line = 7093;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30658,11 +37698,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:5593 */
+  /* parser/parser_prod.nit:7095 */
   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, 5593);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7095);
   }
   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]));
@@ -30672,7 +37712,7 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5594 */
+    /* parser/parser_prod.nit:7096 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30687,32 +37727,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:5595 */
+      /* parser/parser_prod.nit:7097 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5595);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7097);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5596 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7098 */
       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, 5596);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7098);
       }
-      /* parser/parser_prod.nit:5597 */
+      /* parser/parser_prod.nit:7099 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5599 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5599);
+      /* parser/parser_prod.nit:7101 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7101);
     }
-    /* parser/parser_prod.nit:5601 */
+    /* parser/parser_prod.nit:7103 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5603 */
+  /* parser/parser_prod.nit:7105 */
   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, 5603);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 7105);
   }
   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]));
@@ -30722,7 +37762,7 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5604 */
+    /* parser/parser_prod.nit:7106 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30737,39 +37777,83 @@ 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:5605 */
+      /* parser/parser_prod.nit:7107 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5605);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7107);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5606 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7108 */
       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, 5606);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7108);
       }
-      /* parser/parser_prod.nit:5607 */
+      /* parser/parser_prod.nit:7109 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5609 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5609);
+      /* parser/parser_prod.nit:7111 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7111);
     }
-    /* parser/parser_prod.nit:5611 */
+    /* parser/parser_prod.nit:7113 */
     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)";
+static const char LOCATE_parser___parser_prod___APercentExpr___n_expr__eq[] = "parser_prod::APercentExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___APercentExpr___n_expr__eq(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 = 7117;
+  fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___n_expr__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:7119 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7120 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::APercentExpr::(parser_nodes::ABinopExpr::n_expr2=)";
+void parser___parser_prod___APercentExpr___n_expr2__eq(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 = 7122;
+  fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___n_expr2__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:7124 */
+  ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7125 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::APercentExpr::(parser_nodes::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 = 5615;
+  fra.me.line = 7129;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -30779,34 +37863,34 @@ void parser___parser_prod___APercentExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5617 */
+  /* parser/parser_prod.nit:7131 */
   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, 5617);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7131);
   }
   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:5618 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7132 */
   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, 5618);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 7132);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos178 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AUminusExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos179]) return;
+  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 = 5622;
+  fra.me.line = 7136;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -30814,19 +37898,19 @@ void parser___parser_prod___AUminusExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos179] = 1;
+  init_table[itpos178] = 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;
+  int itpos179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AUminusExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos180]) return;
+  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 = 5624;
+  fra.me.line = 7138;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___init_auminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30838,41 +37922,41 @@ void parser___parser_prod___AUminusExpr___init_auminusexpr(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:5624 */
+  /* parser/parser_prod.nit:7138 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5629 */
+  /* parser/parser_prod.nit:7143 */
   CALL_parser___parser_prod___AUminusExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5630 */
+  /* parser/parser_prod.nit:7144 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5630);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7144);
   }
   ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5631 */
+  /* parser/parser_prod.nit:7145 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5631);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7145);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5632 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7146 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5632);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7146);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5633 */
+  /* parser/parser_prod.nit:7147 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5633);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7147);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos179] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AUminusExpr___replace_child[] = "parser_prod::AUminusExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AUminusExpr___replace_child[] = "parser_prod::AUminusExpr::(parser_nodes::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;
@@ -30880,7 +37964,7 @@ 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 = 5636;
+  fra.me.line = 7150;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30892,11 +37976,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:5638 */
+  /* parser/parser_prod.nit:7152 */
   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, 5638);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 7152);
   }
   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]));
@@ -30906,7 +37990,7 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5639 */
+    /* parser/parser_prod.nit:7153 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30921,32 +38005,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:5640 */
+      /* parser/parser_prod.nit:7154 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5640);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7154);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5641 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7155 */
       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, 5641);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7155);
       }
-      /* parser/parser_prod.nit:5642 */
+      /* parser/parser_prod.nit:7156 */
       ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5644 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5644);
+      /* parser/parser_prod.nit:7158 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7158);
     }
-    /* parser/parser_prod.nit:5646 */
+    /* parser/parser_prod.nit:7160 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5648 */
+  /* parser/parser_prod.nit:7162 */
   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, 5648);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7162);
   }
   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]));
@@ -30956,7 +38040,7 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5649 */
+    /* parser/parser_prod.nit:7163 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30971,39 +38055,83 @@ 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:5650 */
+      /* parser/parser_prod.nit:7164 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5650);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7164);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5651 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7165 */
       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, 5651);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7165);
       }
-      /* parser/parser_prod.nit:5652 */
+      /* parser/parser_prod.nit:7166 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5654 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5654);
+      /* parser/parser_prod.nit:7168 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7168);
     }
-    /* parser/parser_prod.nit:5656 */
+    /* parser/parser_prod.nit:7170 */
     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)";
+static const char LOCATE_parser___parser_prod___AUminusExpr___n_minus__eq[] = "parser_prod::AUminusExpr::(parser_nodes::AUminusExpr::n_minus=)";
+void parser___parser_prod___AUminusExpr___n_minus__eq(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 = 7174;
+  fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___n_minus__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:7176 */
+  ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7177 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr__eq[] = "parser_prod::AUminusExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___AUminusExpr___n_expr__eq(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 = 7179;
+  fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___n_expr__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:7181 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7182 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AUminusExpr::(parser_nodes::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 = 5660;
+  fra.me.line = 7186;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -31013,34 +38141,34 @@ void parser___parser_prod___AUminusExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5662 */
+  /* parser/parser_prod.nit:7188 */
   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, 5662);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 7188);
   }
   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:5663 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7189 */
   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, 5663);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7189);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos180 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANewExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos181]) return;
+  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 = 5667;
+  fra.me.line = 7193;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -31048,20 +38176,20 @@ void parser___parser_prod___ANewExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos181] = 1;
+  init_table[itpos180] = 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;
+  int itpos181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANewExpr].i;
   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;
+  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 = 5669;
+  fra.me.line = 7195;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___init_anewexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -31077,39 +38205,39 @@ void parser___parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5669 */
+  /* parser/parser_prod.nit:7195 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5676 */
+  /* parser/parser_prod.nit:7202 */
   CALL_parser___parser_prod___ANewExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:5677 */
+  /* parser/parser_prod.nit:7203 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5677);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7203);
   }
   ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5678 */
+  /* parser/parser_prod.nit:7204 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5678);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7204);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5679 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7205 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5679);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7205);
   }
   ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5680 */
+  /* parser/parser_prod.nit:7206 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5680);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7206);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5681 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7207 */
   ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5682 */
+  /* parser/parser_prod.nit:7208 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -31124,31 +38252,31 @@ 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:5683 */
+    /* parser/parser_prod.nit:7209 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5683);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7209);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:5685 */
+  /* parser/parser_prod.nit:7211 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5685);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7211);
   }
   ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:5686 */
+  /* parser/parser_prod.nit:7212 */
   REGB0 = TAG_Bool(fra.me.REG[4]==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, 7212);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos181] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ANewExpr___replace_child[] = "parser_prod::ANewExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ANewExpr___replace_child[] = "parser_prod::ANewExpr::(parser_nodes::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;
@@ -31156,7 +38284,7 @@ void parser___parser_prod___ANewExpr___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 = 5689;
+  fra.me.line = 7215;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31168,11 +38296,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:5691 */
+  /* parser/parser_prod.nit:7217 */
   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, 5691);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 7217);
   }
   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]));
@@ -31182,7 +38310,7 @@ 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:5692 */
+    /* parser/parser_prod.nit:7218 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31197,32 +38325,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:5693 */
+      /* parser/parser_prod.nit:7219 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5693);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7219);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5694 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7220 */
       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, 5694);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7220);
       }
-      /* parser/parser_prod.nit:5695 */
+      /* parser/parser_prod.nit:7221 */
       ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5697 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5697);
+      /* parser/parser_prod.nit:7223 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7223);
     }
-    /* parser/parser_prod.nit:5699 */
+    /* parser/parser_prod.nit:7225 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5701 */
+  /* parser/parser_prod.nit:7227 */
   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, 5701);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7227);
   }
   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]));
@@ -31232,7 +38360,7 @@ 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:5702 */
+    /* parser/parser_prod.nit:7228 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31247,28 +38375,28 @@ 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:5703 */
+      /* parser/parser_prod.nit:7229 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5703);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7229);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5704 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7230 */
       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, 5704);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7230);
       }
-      /* parser/parser_prod.nit:5705 */
+      /* parser/parser_prod.nit:7231 */
       ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5707 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5707);
+      /* parser/parser_prod.nit:7233 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7233);
     }
-    /* parser/parser_prod.nit:5709 */
+    /* parser/parser_prod.nit:7235 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5711 */
+  /* parser/parser_prod.nit:7237 */
   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)) {
@@ -31283,7 +38411,7 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5712 */
+    /* parser/parser_prod.nit:7238 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31298,32 +38426,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:5713 */
+      /* parser/parser_prod.nit:7239 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5713);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7239);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5714 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7240 */
       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, 5714);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7240);
       }
-      /* parser/parser_prod.nit:5715 */
+      /* parser/parser_prod.nit:7241 */
       ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5717 */
+      /* parser/parser_prod.nit:7243 */
       ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:5719 */
+    /* parser/parser_prod.nit:7245 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5721 */
+  /* parser/parser_prod.nit:7247 */
   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, 5721);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7247);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31333,7 +38461,7 @@ 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:5722 */
+    /* parser/parser_prod.nit:7248 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31348,32 +38476,142 @@ 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:5723 */
+      /* parser/parser_prod.nit:7249 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5723);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7249);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5724 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7250 */
       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, 5724);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7250);
       }
-      /* parser/parser_prod.nit:5725 */
+      /* parser/parser_prod.nit:7251 */
       ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5727 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5727);
+      /* parser/parser_prod.nit:7253 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7253);
     }
-    /* parser/parser_prod.nit:5729 */
+    /* parser/parser_prod.nit:7255 */
     goto label1;
   }
   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)";
+static const char LOCATE_parser___parser_prod___ANewExpr___n_kwnew__eq[] = "parser_prod::ANewExpr::(parser_nodes::ANewExpr::n_kwnew=)";
+void parser___parser_prod___ANewExpr___n_kwnew__eq(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 = 7259;
+  fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___n_kwnew__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:7261 */
+  ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7262 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_type__eq[] = "parser_prod::ANewExpr::(parser_nodes::ANewExpr::n_type=)";
+void parser___parser_prod___ANewExpr___n_type__eq(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 = 7264;
+  fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___n_type__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:7266 */
+  ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7267 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_id__eq[] = "parser_prod::ANewExpr::(parser_nodes::ANewExpr::n_id=)";
+void parser___parser_prod___ANewExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 7269;
+  fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___n_id__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:7271 */
+  ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7272 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:7273 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7273);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_args__eq[] = "parser_prod::ANewExpr::(parser_nodes::ANewExpr::n_args=)";
+void parser___parser_prod___ANewExpr___n_args__eq(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 = 7276;
+  fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___n_args__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:7278 */
+  ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7279 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ANewExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -31381,7 +38619,7 @@ void parser___parser_prod___ANewExpr___visit_all(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 = 5733;
+  fra.me.line = 7283;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31392,25 +38630,25 @@ void parser___parser_prod___ANewExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5733 */
+  /* parser/parser_prod.nit:7283 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5735 */
+  /* parser/parser_prod.nit:7285 */
   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, 5735);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 7285);
   }
   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:5736 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7286 */
   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, 5736);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7286);
   }
   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:5737 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7287 */
   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)) {
@@ -31426,35 +38664,35 @@ void parser___parser_prod___ANewExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5738 */
+    /* parser/parser_prod.nit:7288 */
     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, 5738);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7288);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:5740 */
+  /* parser/parser_prod.nit:7290 */
   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, 5740);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7290);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos182 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos183]) return;
+  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 = 5744;
+  fra.me.line = 7294;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -31462,19 +38700,19 @@ void parser___parser_prod___AAttrExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos183] = 1;
+  init_table[itpos182] = 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;
+  int itpos183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos184]) return;
+  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 = 5746;
+  fra.me.line = 7296;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___init_aattrexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31486,41 +38724,41 @@ void parser___parser_prod___AAttrExpr___init_aattrexpr(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:5746 */
+  /* parser/parser_prod.nit:7296 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5751 */
+  /* parser/parser_prod.nit:7301 */
   CALL_parser___parser_prod___AAttrExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5752 */
+  /* parser/parser_prod.nit:7302 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5752);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7302);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5753 */
+  /* parser/parser_prod.nit:7303 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5753);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7303);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5754 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7304 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5754);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7304);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5755 */
+  /* parser/parser_prod.nit:7305 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5755);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7305);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos183] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAttrExpr___replace_child[] = "parser_prod::AAttrExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAttrExpr___replace_child[] = "parser_prod::AAttrExpr::(parser_nodes::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;
@@ -31528,7 +38766,7 @@ 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 = 5758;
+  fra.me.line = 7308;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31540,11 +38778,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:5760 */
+  /* parser/parser_prod.nit:7310 */
   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, 5760);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7310);
   }
   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]));
@@ -31554,7 +38792,7 @@ 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:5761 */
+    /* parser/parser_prod.nit:7311 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31569,32 +38807,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:5762 */
+      /* parser/parser_prod.nit:7312 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 7312);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5763 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7313 */
       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, 5763);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7313);
       }
-      /* parser/parser_prod.nit:5764 */
+      /* parser/parser_prod.nit:7314 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5766 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5766);
+      /* parser/parser_prod.nit:7316 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7316);
     }
-    /* parser/parser_prod.nit:5768 */
+    /* parser/parser_prod.nit:7318 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5770 */
+  /* parser/parser_prod.nit:7320 */
   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, 5770);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7320);
   }
   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]));
@@ -31604,7 +38842,7 @@ 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:5771 */
+    /* parser/parser_prod.nit:7321 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31619,39 +38857,83 @@ 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:5772 */
+      /* parser/parser_prod.nit:7322 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5772);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7322);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5773 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7323 */
       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, 5773);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7323);
       }
-      /* parser/parser_prod.nit:5774 */
+      /* parser/parser_prod.nit:7324 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5776 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5776);
+      /* parser/parser_prod.nit:7326 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7326);
     }
-    /* parser/parser_prod.nit:5778 */
+    /* parser/parser_prod.nit:7328 */
     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)";
+static const char LOCATE_parser___parser_prod___AAttrExpr___n_expr__eq[] = "parser_prod::AAttrExpr::(parser_nodes::AAttrFormExpr::n_expr=)";
+void parser___parser_prod___AAttrExpr___n_expr__eq(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 = 7332;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___n_expr__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:7334 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7335 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrExpr___n_id__eq[] = "parser_prod::AAttrExpr::(parser_nodes::AAttrFormExpr::n_id=)";
+void parser___parser_prod___AAttrExpr___n_id__eq(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 = 7337;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___n_id__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:7339 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7340 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAttrExpr___visit_all[] = "parser_prod::AAttrExpr::(parser_nodes::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 = 5782;
+  fra.me.line = 7344;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -31661,34 +38943,34 @@ void parser___parser_prod___AAttrExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5784 */
+  /* parser/parser_prod.nit:7346 */
   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, 5784);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7346);
   }
   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:5785 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7347 */
   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, 5785);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7347);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos184 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos185]) return;
+  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 = 5789;
+  fra.me.line = 7351;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -31696,19 +38978,19 @@ void parser___parser_prod___AAttrAssignExpr___empty_init(val_t p0, int* init_tab
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos185] = 1;
+  init_table[itpos184] = 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;
+  int itpos185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrAssignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos186]) return;
+  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 = 5791;
+  fra.me.line = 7353;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -31724,67 +39006,67 @@ void parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(val_t p0, val
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5791 */
+  /* parser/parser_prod.nit:7353 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5798 */
+  /* parser/parser_prod.nit:7360 */
   CALL_parser___parser_prod___AAttrAssignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:5799 */
+  /* parser/parser_prod.nit:7361 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5799);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7361);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5800 */
+  /* parser/parser_prod.nit:7362 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5800);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7362);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5801 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7363 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5801);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7363);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5802 */
+  /* parser/parser_prod.nit:7364 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5802);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7364);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5803 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7365 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5803);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7365);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5804 */
+  /* parser/parser_prod.nit:7366 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5804);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7366);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5805 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7367 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5805);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7367);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:5806 */
+  /* parser/parser_prod.nit:7368 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5806);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7368);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos185] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAttrAssignExpr___replace_child[] = "parser_prod::AAttrAssignExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAttrAssignExpr___replace_child[] = "parser_prod::AAttrAssignExpr::(parser_nodes::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;
@@ -31792,7 +39074,7 @@ 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 = 5809;
+  fra.me.line = 7371;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31804,11 +39086,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:5811 */
+  /* parser/parser_prod.nit:7373 */
   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, 5811);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7373);
   }
   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]));
@@ -31818,7 +39100,7 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5812 */
+    /* parser/parser_prod.nit:7374 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31833,32 +39115,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:5813 */
+      /* parser/parser_prod.nit:7375 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5813);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7375);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5814 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7376 */
       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, 5814);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7376);
       }
-      /* parser/parser_prod.nit:5815 */
+      /* parser/parser_prod.nit:7377 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5817 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5817);
+      /* parser/parser_prod.nit:7379 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7379);
     }
-    /* parser/parser_prod.nit:5819 */
+    /* parser/parser_prod.nit:7381 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5821 */
+  /* parser/parser_prod.nit:7383 */
   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, 5821);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7383);
   }
   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]));
@@ -31868,7 +39150,7 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5822 */
+    /* parser/parser_prod.nit:7384 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31883,32 +39165,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:5823 */
+      /* parser/parser_prod.nit:7385 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5823);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7385);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5824 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7386 */
       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, 5824);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7386);
       }
-      /* parser/parser_prod.nit:5825 */
+      /* parser/parser_prod.nit:7387 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5827 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5827);
+      /* parser/parser_prod.nit:7389 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7389);
     }
-    /* parser/parser_prod.nit:5829 */
+    /* parser/parser_prod.nit:7391 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5831 */
+  /* parser/parser_prod.nit:7393 */
   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, 5831);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 7393);
   }
   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]));
@@ -31918,7 +39200,7 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5832 */
+    /* parser/parser_prod.nit:7394 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31933,32 +39215,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:5833 */
+      /* parser/parser_prod.nit:7395 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5833);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7395);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5834 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7396 */
       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, 5834);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7396);
       }
-      /* parser/parser_prod.nit:5835 */
+      /* parser/parser_prod.nit:7397 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5837 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5837);
+      /* parser/parser_prod.nit:7399 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7399);
     }
-    /* parser/parser_prod.nit:5839 */
+    /* parser/parser_prod.nit:7401 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5841 */
+  /* parser/parser_prod.nit:7403 */
   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, 5841);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 7403);
   }
   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]));
@@ -31968,7 +39250,7 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5842 */
+    /* parser/parser_prod.nit:7404 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31983,39 +39265,127 @@ 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:5843 */
+      /* parser/parser_prod.nit:7405 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5843);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7405);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5844 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7406 */
       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, 5844);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7406);
       }
-      /* parser/parser_prod.nit:5845 */
+      /* parser/parser_prod.nit:7407 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5847 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5847);
+      /* parser/parser_prod.nit:7409 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7409);
     }
-    /* parser/parser_prod.nit:5849 */
+    /* parser/parser_prod.nit:7411 */
     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)";
+static const char LOCATE_parser___parser_prod___AAttrAssignExpr___n_expr__eq[] = "parser_prod::AAttrAssignExpr::(parser_nodes::AAttrFormExpr::n_expr=)";
+void parser___parser_prod___AAttrAssignExpr___n_expr__eq(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 = 7415;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___n_expr__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:7417 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7418 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_id__eq[] = "parser_prod::AAttrAssignExpr::(parser_nodes::AAttrFormExpr::n_id=)";
+void parser___parser_prod___AAttrAssignExpr___n_id__eq(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 = 7420;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___n_id__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:7422 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7423 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_assign__eq[] = "parser_prod::AAttrAssignExpr::(parser_nodes::AAssignFormExpr::n_assign=)";
+void parser___parser_prod___AAttrAssignExpr___n_assign__eq(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 = 7425;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___n_assign__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:7427 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7428 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_value__eq[] = "parser_prod::AAttrAssignExpr::(parser_nodes::AAssignFormExpr::n_value=)";
+void parser___parser_prod___AAttrAssignExpr___n_value__eq(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 = 7430;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___n_value__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:7432 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7433 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AAttrAssignExpr::(parser_nodes::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 = 5853;
+  fra.me.line = 7437;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32025,50 +39395,50 @@ void parser___parser_prod___AAttrAssignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5855 */
+  /* parser/parser_prod.nit:7439 */
   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, 5855);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7439);
   }
   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:5856 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7440 */
   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, 5856);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7440);
   }
   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:5857 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7441 */
   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, 5857);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 7441);
   }
   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:5858 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7442 */
   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, 5858);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 7442);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos186 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos187]) return;
+  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 = 5862;
+  fra.me.line = 7446;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -32076,19 +39446,19 @@ void parser___parser_prod___AAttrReassignExpr___empty_init(val_t p0, int* init_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos187] = 1;
+  init_table[itpos186] = 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;
+  int itpos187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrReassignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos188]) return;
+  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 = 5864;
+  fra.me.line = 7448;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -32104,67 +39474,67 @@ void parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(val_t p0,
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5864 */
+  /* parser/parser_prod.nit:7448 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5871 */
+  /* parser/parser_prod.nit:7455 */
   CALL_parser___parser_prod___AAttrReassignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:5872 */
+  /* parser/parser_prod.nit:7456 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5872);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7456);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5873 */
+  /* parser/parser_prod.nit:7457 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5873);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7457);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5874 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7458 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5874);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7458);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5875 */
+  /* parser/parser_prod.nit:7459 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5875);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7459);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5876 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7460 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5876);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7460);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5877 */
+  /* parser/parser_prod.nit:7461 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5877);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7461);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5878 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7462 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5878);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7462);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:5879 */
+  /* parser/parser_prod.nit:7463 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5879);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7463);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos187] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAttrReassignExpr___replace_child[] = "parser_prod::AAttrReassignExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAttrReassignExpr___replace_child[] = "parser_prod::AAttrReassignExpr::(parser_nodes::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;
@@ -32172,7 +39542,7 @@ 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 = 5882;
+  fra.me.line = 7466;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32184,11 +39554,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:5884 */
+  /* parser/parser_prod.nit:7468 */
   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, 5884);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7468);
   }
   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]));
@@ -32198,7 +39568,7 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5885 */
+    /* parser/parser_prod.nit:7469 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32213,32 +39583,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:5886 */
+      /* parser/parser_prod.nit:7470 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5886);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7470);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5887 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7471 */
       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, 5887);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7471);
       }
-      /* parser/parser_prod.nit:5888 */
+      /* parser/parser_prod.nit:7472 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5890 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5890);
+      /* parser/parser_prod.nit:7474 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7474);
     }
-    /* parser/parser_prod.nit:5892 */
+    /* parser/parser_prod.nit:7476 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5894 */
+  /* parser/parser_prod.nit:7478 */
   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, 5894);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7478);
   }
   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]));
@@ -32248,7 +39618,7 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5895 */
+    /* parser/parser_prod.nit:7479 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32263,32 +39633,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:5896 */
+      /* parser/parser_prod.nit:7480 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5896);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7480);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5897 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7481 */
       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, 5897);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7481);
       }
-      /* parser/parser_prod.nit:5898 */
+      /* parser/parser_prod.nit:7482 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5900 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5900);
+      /* parser/parser_prod.nit:7484 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7484);
     }
-    /* parser/parser_prod.nit:5902 */
+    /* parser/parser_prod.nit:7486 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5904 */
+  /* parser/parser_prod.nit:7488 */
   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, 5904);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 7488);
   }
   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]));
@@ -32298,7 +39668,7 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5905 */
+    /* parser/parser_prod.nit:7489 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32313,32 +39683,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:5906 */
+      /* parser/parser_prod.nit:7490 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5906);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7490);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5907 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7491 */
       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, 5907);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7491);
       }
-      /* parser/parser_prod.nit:5908 */
+      /* parser/parser_prod.nit:7492 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5910 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5910);
+      /* parser/parser_prod.nit:7494 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7494);
     }
-    /* parser/parser_prod.nit:5912 */
+    /* parser/parser_prod.nit:7496 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5914 */
+  /* parser/parser_prod.nit:7498 */
   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, 5914);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 7498);
   }
   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]));
@@ -32348,7 +39718,7 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5915 */
+    /* parser/parser_prod.nit:7499 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32363,39 +39733,127 @@ 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:5916 */
+      /* parser/parser_prod.nit:7500 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5916);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7500);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5917 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7501 */
       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, 5917);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7501);
       }
-      /* parser/parser_prod.nit:5918 */
+      /* parser/parser_prod.nit:7502 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5920 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5920);
+      /* parser/parser_prod.nit:7504 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7504);
     }
-    /* parser/parser_prod.nit:5922 */
+    /* parser/parser_prod.nit:7506 */
     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)";
+static const char LOCATE_parser___parser_prod___AAttrReassignExpr___n_expr__eq[] = "parser_prod::AAttrReassignExpr::(parser_nodes::AAttrFormExpr::n_expr=)";
+void parser___parser_prod___AAttrReassignExpr___n_expr__eq(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 = 7510;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___n_expr__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:7512 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7513 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_id__eq[] = "parser_prod::AAttrReassignExpr::(parser_nodes::AAttrFormExpr::n_id=)";
+void parser___parser_prod___AAttrReassignExpr___n_id__eq(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 = 7515;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___n_id__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:7517 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7518 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_assign_op__eq[] = "parser_prod::AAttrReassignExpr::(parser_nodes::AReassignFormExpr::n_assign_op=)";
+void parser___parser_prod___AAttrReassignExpr___n_assign_op__eq(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 = 7520;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___n_assign_op__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:7522 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7523 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_value__eq[] = "parser_prod::AAttrReassignExpr::(parser_nodes::AReassignFormExpr::n_value=)";
+void parser___parser_prod___AAttrReassignExpr___n_value__eq(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 = 7525;
+  fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___n_value__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:7527 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7528 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AAttrReassignExpr::(parser_nodes::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 = 5926;
+  fra.me.line = 7532;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32405,50 +39863,50 @@ void parser___parser_prod___AAttrReassignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5928 */
+  /* parser/parser_prod.nit:7534 */
   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, 5928);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7534);
   }
   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:5929 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7535 */
   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, 5929);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7535);
   }
   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:5930 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7536 */
   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, 5930);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 7536);
   }
   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:5931 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7537 */
   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, 5931);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 7537);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos188 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos189]) return;
+  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 = 5935;
+  fra.me.line = 7541;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -32456,19 +39914,19 @@ void parser___parser_prod___ACallExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos189] = 1;
+  init_table[itpos188] = 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;
+  int itpos189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos190]) return;
+  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 = 5937;
+  fra.me.line = 7543;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___init_acallexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -32484,52 +39942,52 @@ void parser___parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5937 */
+  /* parser/parser_prod.nit:7543 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5944 */
+  /* parser/parser_prod.nit:7550 */
   CALL_parser___parser_prod___ACallExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:5945 */
+  /* 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, 5945);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7551);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5946 */
+  /* 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, 5946);
+    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[5]);
-  /* parser/parser_prod.nit:5947 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7553 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5947);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7553);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5948 */
+  /* parser/parser_prod.nit:7554 */
   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, 7554);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5949 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7555 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5949);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7555);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5950 */
+  /* parser/parser_prod.nit:7556 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5950);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7556);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos189] = 1;
   return;
 }
   void OC_parser___parser_prod___ACallExpr___init_acallexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -32537,7 +39995,7 @@ 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:5951 */
+    /* parser/parser_prod.nit:7557 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -32551,26 +40009,26 @@ void parser___parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:5952 */
+    /* parser/parser_prod.nit:7558 */
     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, 5952);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7558);
     }
-    /* parser/parser_prod.nit:5953 */
+    /* parser/parser_prod.nit:7559 */
     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, 5953);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 7559);
     }
     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:5954 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[5]);
+    /* parser/parser_prod.nit:7560 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___ACallExpr___replace_child[] = "parser_prod::ACallExpr::(parser_nodes::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;
@@ -32581,7 +40039,7 @@ 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 = 5958;
+  fra.me.line = 7564;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32593,11 +40051,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:5960 */
+  /* parser/parser_prod.nit:7566 */
   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, 5960);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7566);
   }
   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]));
@@ -32607,7 +40065,7 @@ 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:5961 */
+    /* parser/parser_prod.nit:7567 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32622,32 +40080,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:5962 */
+      /* parser/parser_prod.nit:7568 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5962);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7568);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5963 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7569 */
       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, 5963);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7569);
       }
-      /* parser/parser_prod.nit:5964 */
+      /* parser/parser_prod.nit:7570 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5966 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5966);
+      /* parser/parser_prod.nit:7572 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7572);
     }
-    /* parser/parser_prod.nit:5968 */
+    /* parser/parser_prod.nit:7574 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5970 */
+  /* parser/parser_prod.nit:7576 */
   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, 5970);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7576);
   }
   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]));
@@ -32657,7 +40115,7 @@ 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:5971 */
+    /* parser/parser_prod.nit:7577 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32672,32 +40130,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:5972 */
+      /* parser/parser_prod.nit:7578 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5972);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7578);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5973 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7579 */
       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, 5973);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7579);
       }
-      /* parser/parser_prod.nit:5974 */
+      /* parser/parser_prod.nit:7580 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5976 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5976);
+      /* parser/parser_prod.nit:7582 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7582);
     }
-    /* parser/parser_prod.nit:5978 */
+    /* parser/parser_prod.nit:7584 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5980 */
+  /* parser/parser_prod.nit:7586 */
   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, 5980);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7586);
   }
   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]));
@@ -32707,7 +40165,7 @@ 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:5981 */
+    /* parser/parser_prod.nit:7587 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32722,71 +40180,65 @@ 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:5982 */
+      /* 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, 5982);
+        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:5983 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7589 */
       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, 5983);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7589);
       }
-      /* parser/parser_prod.nit:5984 */
+      /* parser/parser_prod.nit:7590 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5986 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5986);
+      /* parser/parser_prod.nit:7592 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7592);
     }
-    /* parser/parser_prod.nit:5988 */
+    /* parser/parser_prod.nit:7594 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5990 */
+  /* parser/parser_prod.nit:7596 */
   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, 5990);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 7596);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:5990 */
+      /* parser/parser_prod.nit:7596 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:5991 */
+      /* parser/parser_prod.nit:7597 */
       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, 5991);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 7597);
       }
       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___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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:5992 */
+        /* parser/parser_prod.nit:7598 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -32801,47 +40253,47 @@ 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:5993 */
+          /* parser/parser_prod.nit:7599 */
           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, 5993);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7599);
           }
-          /* parser/parser_prod.nit:5994 */
+          /* parser/parser_prod.nit:7600 */
           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, 5994);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 7600);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(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:5995 */
+          /* parser/parser_prod.nit:7601 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5995);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7601);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:5997 */
+          /* parser/parser_prod.nit:7603 */
           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, 5997);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 7603);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(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:5999 */
+        /* parser/parser_prod.nit:7605 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
@@ -32850,14 +40302,80 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
   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)";
+static const char LOCATE_parser___parser_prod___ACallExpr___n_expr__eq[] = "parser_prod::ACallExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ACallExpr___n_expr__eq(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 = 7610;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___n_expr__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:7612 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7613 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_id__eq[] = "parser_prod::ACallExpr::(parser_nodes::ACallFormExpr::n_id=)";
+void parser___parser_prod___ACallExpr___n_id__eq(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 = 7615;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___n_id__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:7617 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7618 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_args__eq[] = "parser_prod::ACallExpr::(parser_nodes::ACallFormExpr::n_args=)";
+void parser___parser_prod___ACallExpr___n_args__eq(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 = 7620;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___n_args__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:7622 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7623 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ACallExpr::(parser_nodes::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 = 6004;
+  fra.me.line = 7627;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32867,35 +40385,35 @@ void parser___parser_prod___ACallExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6006 */
+  /* parser/parser_prod.nit:7629 */
   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, 6006);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7629);
   }
   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:6007 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7630 */
   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, 6007);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7630);
   }
   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:6008 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7631 */
   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, 6008);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7631);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(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:6009 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7632 */
   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, 6009);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 7632);
   }
   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_1));
@@ -32918,20 +40436,20 @@ void parser___parser_prod___ACallExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:6010 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:7633 */
+    CALL_parser___parser_nodes___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;
+  int itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos191]) return;
+  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 = 6015;
+  fra.me.line = 7638;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -32939,19 +40457,19 @@ void parser___parser_prod___ACallAssignExpr___empty_init(val_t p0, int* init_tab
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos191] = 1;
+  init_table[itpos190] = 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;
+  int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallAssignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos192]) return;
+  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 = 6017;
+  fra.me.line = 7640;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___init_acallassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -32969,80 +40487,80 @@ void parser___parser_prod___ACallAssignExpr___init_acallassignexpr(val_t p0, val
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:6017 */
+  /* parser/parser_prod.nit:7640 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6025 */
+  /* parser/parser_prod.nit:7648 */
   CALL_parser___parser_prod___ACallAssignExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:6026 */
+  /* parser/parser_prod.nit:7649 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6026);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7649);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6027 */
+  /* parser/parser_prod.nit:7650 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6027);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7650);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6028 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7651 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6028);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7651);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6029 */
+  /* parser/parser_prod.nit:7652 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6029);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7652);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6030 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7653 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6030);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7653);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6031 */
+  /* parser/parser_prod.nit:7654 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6031);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7654);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6032 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7655 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6032);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7655);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6033 */
+  /* parser/parser_prod.nit:7656 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6033);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7656);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6034 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7657 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6034);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7657);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:6035 */
+  /* parser/parser_prod.nit:7658 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6035);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7658);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos191] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ACallAssignExpr___replace_child[] = "parser_prod::ACallAssignExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ACallAssignExpr___replace_child[] = "parser_prod::ACallAssignExpr::(parser_nodes::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;
@@ -33050,7 +40568,7 @@ void parser___parser_prod___ACallAssignExpr___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 = 6038;
+  fra.me.line = 7661;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33062,11 +40580,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:6040 */
+  /* parser/parser_prod.nit:7663 */
   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, 6040);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7663);
   }
   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]));
@@ -33076,7 +40594,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6041 */
+    /* parser/parser_prod.nit:7664 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33091,32 +40609,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:6042 */
+      /* parser/parser_prod.nit:7665 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6042);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7665);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6043 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7666 */
       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, 6043);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7666);
       }
-      /* parser/parser_prod.nit:6044 */
+      /* parser/parser_prod.nit:7667 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6046 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6046);
+      /* parser/parser_prod.nit:7669 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7669);
     }
-    /* parser/parser_prod.nit:6048 */
+    /* parser/parser_prod.nit:7671 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6050 */
+  /* parser/parser_prod.nit:7673 */
   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, 6050);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7673);
   }
   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]));
@@ -33126,7 +40644,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6051 */
+    /* parser/parser_prod.nit:7674 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33141,32 +40659,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:6052 */
+      /* parser/parser_prod.nit:7675 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6052);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7675);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6053 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7676 */
       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, 6053);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7676);
       }
-      /* parser/parser_prod.nit:6054 */
+      /* parser/parser_prod.nit:7677 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6056 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6056);
+      /* parser/parser_prod.nit:7679 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7679);
     }
-    /* parser/parser_prod.nit:6058 */
+    /* parser/parser_prod.nit:7681 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6060 */
+  /* parser/parser_prod.nit:7683 */
   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, 6060);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7683);
   }
   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]));
@@ -33176,7 +40694,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6061 */
+    /* parser/parser_prod.nit:7684 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33191,32 +40709,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:6062 */
+      /* parser/parser_prod.nit:7685 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6062);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7685);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6063 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7686 */
       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, 6063);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7686);
       }
-      /* parser/parser_prod.nit:6064 */
+      /* parser/parser_prod.nit:7687 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6066 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6066);
+      /* parser/parser_prod.nit:7689 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7689);
     }
-    /* parser/parser_prod.nit:6068 */
+    /* parser/parser_prod.nit:7691 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6070 */
+  /* parser/parser_prod.nit:7693 */
   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, 6070);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 7693);
   }
   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]));
@@ -33226,7 +40744,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6071 */
+    /* parser/parser_prod.nit:7694 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33241,32 +40759,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:6072 */
+      /* parser/parser_prod.nit:7695 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6072);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7695);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6073 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7696 */
       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, 6073);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7696);
       }
-      /* parser/parser_prod.nit:6074 */
+      /* parser/parser_prod.nit:7697 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6076 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6076);
+      /* parser/parser_prod.nit:7699 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7699);
     }
-    /* parser/parser_prod.nit:6078 */
+    /* parser/parser_prod.nit:7701 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6080 */
+  /* parser/parser_prod.nit:7703 */
   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, 6080);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 7703);
   }
   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]));
@@ -33276,7 +40794,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6081 */
+    /* parser/parser_prod.nit:7704 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33291,39 +40809,149 @@ 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:6082 */
+      /* parser/parser_prod.nit:7705 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6082);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7705);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6083 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7706 */
       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, 6083);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7706);
       }
-      /* parser/parser_prod.nit:6084 */
+      /* parser/parser_prod.nit:7707 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6086 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6086);
+      /* parser/parser_prod.nit:7709 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7709);
     }
-    /* parser/parser_prod.nit:6088 */
+    /* parser/parser_prod.nit:7711 */
     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)";
+static const char LOCATE_parser___parser_prod___ACallAssignExpr___n_expr__eq[] = "parser_prod::ACallAssignExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ACallAssignExpr___n_expr__eq(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 = 7715;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___n_expr__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:7717 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7718 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallAssignExpr___n_id__eq[] = "parser_prod::ACallAssignExpr::(parser_nodes::ACallFormExpr::n_id=)";
+void parser___parser_prod___ACallAssignExpr___n_id__eq(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 = 7720;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___n_id__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:7722 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7723 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallAssignExpr___n_args__eq[] = "parser_prod::ACallAssignExpr::(parser_nodes::ACallFormExpr::n_args=)";
+void parser___parser_prod___ACallAssignExpr___n_args__eq(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 = 7725;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___n_args__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:7727 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7728 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallAssignExpr___n_assign__eq[] = "parser_prod::ACallAssignExpr::(parser_nodes::AAssignFormExpr::n_assign=)";
+void parser___parser_prod___ACallAssignExpr___n_assign__eq(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 = 7730;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___n_assign__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:7732 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7733 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallAssignExpr___n_value__eq[] = "parser_prod::ACallAssignExpr::(parser_nodes::AAssignFormExpr::n_value=)";
+void parser___parser_prod___ACallAssignExpr___n_value__eq(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 = 7735;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___n_value__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:7737 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7738 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallAssignExpr___visit_all[] = "parser_prod::ACallAssignExpr::(parser_nodes::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 = 6092;
+  fra.me.line = 7742;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33333,58 +40961,58 @@ void parser___parser_prod___ACallAssignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6094 */
+  /* parser/parser_prod.nit:7744 */
   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, 6094);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7744);
   }
   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:6095 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7745 */
   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, 6095);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7745);
   }
   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:6096 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7746 */
   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, 6096);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7746);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(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:6097 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7747 */
   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, 6097);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 7747);
   }
   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:6098 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7748 */
   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, 6098);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 7748);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos193]) return;
+  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 = 6102;
+  fra.me.line = 7752;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -33392,19 +41020,19 @@ void parser___parser_prod___ACallReassignExpr___empty_init(val_t p0, int* init_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos193] = 1;
+  init_table[itpos192] = 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;
+  int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACallReassignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos194]) return;
+  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 = 6104;
+  fra.me.line = 7754;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -33422,80 +41050,80 @@ void parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(val_t p0,
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:6104 */
+  /* parser/parser_prod.nit:7754 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6112 */
+  /* parser/parser_prod.nit:7762 */
   CALL_parser___parser_prod___ACallReassignExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:6113 */
+  /* parser/parser_prod.nit:7763 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6113);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7763);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6114 */
+  /* parser/parser_prod.nit:7764 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6114);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7764);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6115 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7765 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6115);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7765);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6116 */
+  /* parser/parser_prod.nit:7766 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6116);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7766);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6117 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7767 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6117);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7767);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6118 */
+  /* parser/parser_prod.nit:7768 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6118);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7768);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6119 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7769 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6119);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7769);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6120 */
+  /* parser/parser_prod.nit:7770 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6120);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7770);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6121 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:7771 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6121);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7771);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:6122 */
+  /* parser/parser_prod.nit:7772 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6122);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7772);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos193] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ACallReassignExpr___replace_child[] = "parser_prod::ACallReassignExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ACallReassignExpr___replace_child[] = "parser_prod::ACallReassignExpr::(parser_nodes::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;
@@ -33503,7 +41131,7 @@ void parser___parser_prod___ACallReassignExpr___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 = 6125;
+  fra.me.line = 7775;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33515,11 +41143,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:6127 */
+  /* parser/parser_prod.nit:7777 */
   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, 6127);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7777);
   }
   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]));
@@ -33529,7 +41157,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6128 */
+    /* parser/parser_prod.nit:7778 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33544,32 +41172,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:6129 */
+      /* parser/parser_prod.nit:7779 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6129);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7779);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6130 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7780 */
       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, 6130);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7780);
       }
-      /* parser/parser_prod.nit:6131 */
+      /* parser/parser_prod.nit:7781 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6133 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6133);
+      /* parser/parser_prod.nit:7783 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7783);
     }
-    /* parser/parser_prod.nit:6135 */
+    /* parser/parser_prod.nit:7785 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6137 */
+  /* parser/parser_prod.nit:7787 */
   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, 6137);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7787);
   }
   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]));
@@ -33579,7 +41207,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6138 */
+    /* parser/parser_prod.nit:7788 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33594,32 +41222,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:6139 */
+      /* parser/parser_prod.nit:7789 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6139);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7789);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6140 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7790 */
       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, 6140);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7790);
       }
-      /* parser/parser_prod.nit:6141 */
+      /* parser/parser_prod.nit:7791 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6143 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6143);
+      /* parser/parser_prod.nit:7793 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7793);
     }
-    /* parser/parser_prod.nit:6145 */
+    /* parser/parser_prod.nit:7795 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6147 */
+  /* parser/parser_prod.nit:7797 */
   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, 6147);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7797);
   }
   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]));
@@ -33629,7 +41257,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6148 */
+    /* parser/parser_prod.nit:7798 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33644,32 +41272,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:6149 */
+      /* parser/parser_prod.nit:7799 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6149);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7799);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6150 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7800 */
       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, 6150);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7800);
       }
-      /* parser/parser_prod.nit:6151 */
+      /* parser/parser_prod.nit:7801 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6153 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6153);
+      /* parser/parser_prod.nit:7803 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7803);
     }
-    /* parser/parser_prod.nit:6155 */
+    /* parser/parser_prod.nit:7805 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6157 */
+  /* parser/parser_prod.nit:7807 */
   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, 6157);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 7807);
   }
   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]));
@@ -33679,7 +41307,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6158 */
+    /* parser/parser_prod.nit:7808 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33694,32 +41322,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:6159 */
+      /* parser/parser_prod.nit:7809 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6159);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7809);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6160 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7810 */
       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, 6160);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7810);
       }
-      /* parser/parser_prod.nit:6161 */
+      /* parser/parser_prod.nit:7811 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6163 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6163);
+      /* parser/parser_prod.nit:7813 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7813);
     }
-    /* parser/parser_prod.nit:6165 */
+    /* parser/parser_prod.nit:7815 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6167 */
+  /* parser/parser_prod.nit:7817 */
   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, 6167);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 7817);
   }
   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]));
@@ -33729,7 +41357,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6168 */
+    /* parser/parser_prod.nit:7818 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33744,39 +41372,149 @@ 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:6169 */
+      /* parser/parser_prod.nit:7819 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6169);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7819);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6170 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7820 */
       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, 6170);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7820);
       }
-      /* parser/parser_prod.nit:6171 */
+      /* parser/parser_prod.nit:7821 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6173 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6173);
+      /* parser/parser_prod.nit:7823 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7823);
     }
-    /* parser/parser_prod.nit:6175 */
+    /* parser/parser_prod.nit:7825 */
     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)";
+static const char LOCATE_parser___parser_prod___ACallReassignExpr___n_expr__eq[] = "parser_prod::ACallReassignExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ACallReassignExpr___n_expr__eq(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 = 7829;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___n_expr__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:7831 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7832 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallReassignExpr___n_id__eq[] = "parser_prod::ACallReassignExpr::(parser_nodes::ACallFormExpr::n_id=)";
+void parser___parser_prod___ACallReassignExpr___n_id__eq(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 = 7834;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___n_id__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:7836 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7837 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallReassignExpr___n_args__eq[] = "parser_prod::ACallReassignExpr::(parser_nodes::ACallFormExpr::n_args=)";
+void parser___parser_prod___ACallReassignExpr___n_args__eq(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 = 7839;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___n_args__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:7841 */
+  ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7842 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallReassignExpr___n_assign_op__eq[] = "parser_prod::ACallReassignExpr::(parser_nodes::AReassignFormExpr::n_assign_op=)";
+void parser___parser_prod___ACallReassignExpr___n_assign_op__eq(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 = 7844;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___n_assign_op__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:7846 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7847 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallReassignExpr___n_value__eq[] = "parser_prod::ACallReassignExpr::(parser_nodes::AReassignFormExpr::n_value=)";
+void parser___parser_prod___ACallReassignExpr___n_value__eq(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 = 7849;
+  fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___n_value__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:7851 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7852 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACallReassignExpr___visit_all[] = "parser_prod::ACallReassignExpr::(parser_nodes::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 = 6179;
+  fra.me.line = 7856;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33786,58 +41524,58 @@ void parser___parser_prod___ACallReassignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6181 */
+  /* parser/parser_prod.nit:7858 */
   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, 6181);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7858);
   }
   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:6182 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7859 */
   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, 6182);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7859);
   }
   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:6183 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7860 */
   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, 6183);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7860);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(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:6184 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7861 */
   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, 6184);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 7861);
   }
   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:6185 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:7862 */
   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, 6185);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 7862);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos195]) return;
+  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 = 6189;
+  fra.me.line = 7866;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -33845,20 +41583,20 @@ void parser___parser_prod___ASuperExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos195] = 1;
+  init_table[itpos194] = 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;
+  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExpr].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[itpos196]) return;
+  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 = 6191;
+  fra.me.line = 7868;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___init_asuperexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -33872,13 +41610,13 @@ void parser___parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6191 */
+  /* parser/parser_prod.nit:7868 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6197 */
+  /* parser/parser_prod.nit:7874 */
   CALL_parser___parser_prod___ASuperExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6198 */
+  /* parser/parser_prod.nit:7875 */
   ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6199 */
+  /* parser/parser_prod.nit:7876 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -33893,44 +41631,44 @@ 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:6200 */
+    /* parser/parser_prod.nit:7877 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6200);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7877);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:6202 */
+  /* parser/parser_prod.nit:7879 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6202);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7879);
   }
   ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6203 */
+  /* parser/parser_prod.nit:7880 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6203);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7880);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6204 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:7881 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6204);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7881);
   }
   ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6205 */
+  /* parser/parser_prod.nit:7882 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6205);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7882);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos195] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASuperExpr___replace_child[] = "parser_prod::ASuperExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ASuperExpr___replace_child[] = "parser_prod::ASuperExpr::(parser_nodes::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;
@@ -33938,7 +41676,7 @@ void parser___parser_prod___ASuperExpr___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 = 6208;
+  fra.me.line = 7885;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33950,7 +41688,7 @@ 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:6210 */
+  /* parser/parser_prod.nit:7887 */
   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)) {
@@ -33965,7 +41703,7 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6211 */
+    /* parser/parser_prod.nit:7888 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33980,32 +41718,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:6212 */
+      /* parser/parser_prod.nit:7889 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6212);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7889);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6213 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7890 */
       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, 6213);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7890);
       }
-      /* parser/parser_prod.nit:6214 */
+      /* parser/parser_prod.nit:7891 */
       ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6216 */
+      /* parser/parser_prod.nit:7893 */
       ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6218 */
+    /* parser/parser_prod.nit:7895 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6220 */
+  /* parser/parser_prod.nit:7897 */
   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, 6220);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 7897);
   }
   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]));
@@ -34015,7 +41753,7 @@ 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:6221 */
+    /* parser/parser_prod.nit:7898 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34030,32 +41768,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:6222 */
+      /* parser/parser_prod.nit:7899 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6222);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7899);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6223 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7900 */
       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, 6223);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7900);
       }
-      /* parser/parser_prod.nit:6224 */
+      /* parser/parser_prod.nit:7901 */
       ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6226 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6226);
+      /* parser/parser_prod.nit:7903 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7903);
     }
-    /* parser/parser_prod.nit:6228 */
+    /* parser/parser_prod.nit:7905 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6230 */
+  /* parser/parser_prod.nit:7907 */
   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, 6230);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7907);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34065,7 +41803,7 @@ 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:6231 */
+    /* parser/parser_prod.nit:7908 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34080,32 +41818,120 @@ 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:6232 */
+      /* parser/parser_prod.nit:7909 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6232);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7909);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6233 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7910 */
       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, 6233);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7910);
       }
-      /* parser/parser_prod.nit:6234 */
+      /* parser/parser_prod.nit:7911 */
       ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6236 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6236);
+      /* parser/parser_prod.nit:7913 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7913);
     }
-    /* parser/parser_prod.nit:6238 */
+    /* parser/parser_prod.nit:7915 */
     goto label1;
   }
   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)";
+static const char LOCATE_parser___parser_prod___ASuperExpr___n_qualified__eq[] = "parser_prod::ASuperExpr::(parser_nodes::ASuperExpr::n_qualified=)";
+void parser___parser_prod___ASuperExpr___n_qualified__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 7919;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___n_qualified__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:7921 */
+  ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7922 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:7923 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7923);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ASuperExpr___n_kwsuper__eq[] = "parser_prod::ASuperExpr::(parser_nodes::ASuperExpr::n_kwsuper=)";
+void parser___parser_prod___ASuperExpr___n_kwsuper__eq(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 = 7926;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___n_kwsuper__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:7928 */
+  ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7929 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ASuperExpr___n_args__eq[] = "parser_prod::ASuperExpr::(parser_nodes::ASuperExpr::n_args=)";
+void parser___parser_prod___ASuperExpr___n_args__eq(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 = 7931;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___n_args__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:7933 */
+  ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7934 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ASuperExpr___visit_all[] = "parser_prod::ASuperExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -34113,7 +41939,7 @@ void parser___parser_prod___ASuperExpr___visit_all(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 = 6242;
+  fra.me.line = 7938;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34124,9 +41950,9 @@ void parser___parser_prod___ASuperExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6242 */
+  /* parser/parser_prod.nit:7938 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6244 */
+  /* parser/parser_prod.nit:7940 */
   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)) {
@@ -34142,43 +41968,43 @@ void parser___parser_prod___ASuperExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6245 */
+    /* parser/parser_prod.nit:7941 */
     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, 6245);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7941);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:6247 */
+  /* parser/parser_prod.nit:7943 */
   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, 6247);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 7943);
   }
   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:6248 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7944 */
   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, 6248);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7944);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInitExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos197]) return;
+  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 = 6252;
+  fra.me.line = 7948;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -34186,19 +42012,19 @@ void parser___parser_prod___AInitExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos197] = 1;
+  init_table[itpos196] = 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;
+  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInitExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos198]) return;
+  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 = 6254;
+  fra.me.line = 7950;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___init_ainitexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34212,54 +42038,54 @@ void parser___parser_prod___AInitExpr___init_ainitexpr(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6254 */
+  /* parser/parser_prod.nit:7950 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6260 */
+  /* parser/parser_prod.nit:7956 */
   CALL_parser___parser_prod___AInitExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6261 */
+  /* parser/parser_prod.nit:7957 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6261);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7957);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6262 */
+  /* parser/parser_prod.nit:7958 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6262);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7958);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6263 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:7959 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6263);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7959);
   }
   ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6264 */
+  /* parser/parser_prod.nit:7960 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6264);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7960);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6265 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:7961 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6265);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7961);
   }
   ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6266 */
+  /* parser/parser_prod.nit:7962 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6266);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7962);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos197] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AInitExpr___replace_child[] = "parser_prod::AInitExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AInitExpr___replace_child[] = "parser_prod::AInitExpr::(parser_nodes::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;
@@ -34267,7 +42093,7 @@ void parser___parser_prod___AInitExpr___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 = 6269;
+  fra.me.line = 7965;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34279,11 +42105,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:6271 */
+  /* parser/parser_prod.nit:7967 */
   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, 6271);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7967);
   }
   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]));
@@ -34293,7 +42119,7 @@ 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:6272 */
+    /* parser/parser_prod.nit:7968 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34308,32 +42134,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:6273 */
+      /* parser/parser_prod.nit:7969 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6273);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7969);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6274 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7970 */
       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, 6274);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7970);
       }
-      /* parser/parser_prod.nit:6275 */
+      /* parser/parser_prod.nit:7971 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6277 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6277);
+      /* parser/parser_prod.nit:7973 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7973);
     }
-    /* parser/parser_prod.nit:6279 */
+    /* parser/parser_prod.nit:7975 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6281 */
+  /* parser/parser_prod.nit:7977 */
   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, 6281);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 7977);
   }
   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]));
@@ -34343,7 +42169,7 @@ 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:6282 */
+    /* parser/parser_prod.nit:7978 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34358,32 +42184,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:6283 */
+      /* parser/parser_prod.nit:7979 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6283);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7979);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6284 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7980 */
       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, 6284);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7980);
       }
-      /* parser/parser_prod.nit:6285 */
+      /* parser/parser_prod.nit:7981 */
       ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6287 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6287);
+      /* parser/parser_prod.nit:7983 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7983);
     }
-    /* parser/parser_prod.nit:6289 */
+    /* parser/parser_prod.nit:7985 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6291 */
+  /* parser/parser_prod.nit:7987 */
   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, 6291);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 7987);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34393,7 +42219,7 @@ 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:6292 */
+    /* parser/parser_prod.nit:7988 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34408,39 +42234,105 @@ 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:6293 */
+      /* parser/parser_prod.nit:7989 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6293);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7989);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6294 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7990 */
       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, 6294);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7990);
       }
-      /* parser/parser_prod.nit:6295 */
+      /* parser/parser_prod.nit:7991 */
       ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6297 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6297);
+      /* parser/parser_prod.nit:7993 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7993);
     }
-    /* parser/parser_prod.nit:6299 */
+    /* parser/parser_prod.nit:7995 */
     goto label1;
   }
   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)";
+static const char LOCATE_parser___parser_prod___AInitExpr___n_expr__eq[] = "parser_prod::AInitExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___AInitExpr___n_expr__eq(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 = 7999;
+  fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___n_expr__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:8001 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8002 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AInitExpr___n_kwinit__eq[] = "parser_prod::AInitExpr::(parser_nodes::AInitExpr::n_kwinit=)";
+void parser___parser_prod___AInitExpr___n_kwinit__eq(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 = 8004;
+  fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___n_kwinit__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:8006 */
+  ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8007 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AInitExpr___n_args__eq[] = "parser_prod::AInitExpr::(parser_nodes::AInitExpr::n_args=)";
+void parser___parser_prod___AInitExpr___n_args__eq(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 = 8009;
+  fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___n_args__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:8011 */
+  ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8012 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AInitExpr___visit_all[] = "parser_prod::AInitExpr::(parser_nodes::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 = 6303;
+  fra.me.line = 8016;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -34450,42 +42342,42 @@ void parser___parser_prod___AInitExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6305 */
+  /* parser/parser_prod.nit:8018 */
   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, 6305);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8018);
   }
   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:6306 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8019 */
   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, 6306);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 8019);
   }
   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:6307 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8020 */
   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, 6307);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 8020);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos199]) return;
+  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 = 6311;
+  fra.me.line = 8024;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -34493,19 +42385,19 @@ void parser___parser_prod___ABraExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos199] = 1;
+  init_table[itpos198] = 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;
+  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos200]) return;
+  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 = 6313;
+  fra.me.line = 8026;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___init_abraexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34519,39 +42411,39 @@ void parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6313 */
+  /* parser/parser_prod.nit:8026 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6319 */
+  /* parser/parser_prod.nit:8032 */
   CALL_parser___parser_prod___ABraExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6320 */
+  /* parser/parser_prod.nit:8033 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6320);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8033);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6321 */
+  /* parser/parser_prod.nit:8034 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6321);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8034);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6322 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8035 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6322);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8035);
   }
   ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6323 */
+  /* parser/parser_prod.nit:8036 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6323);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8036);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos199] = 1;
   return;
 }
   void OC_parser___parser_prod___ABraExpr___init_abraexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -34559,7 +42451,7 @@ 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:6324 */
+    /* parser/parser_prod.nit:8037 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -34573,26 +42465,26 @@ void parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:6325 */
+    /* parser/parser_prod.nit:8038 */
     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, 6325);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8038);
     }
-    /* parser/parser_prod.nit:6326 */
+    /* parser/parser_prod.nit:8039 */
     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, 6326);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8039);
     }
     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:6327 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
+    /* parser/parser_prod.nit:8040 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___ABraExpr___replace_child[] = "parser_prod::ABraExpr::(parser_nodes::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;
@@ -34603,7 +42495,7 @@ 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 = 6331;
+  fra.me.line = 8044;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34615,11 +42507,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:6333 */
+  /* parser/parser_prod.nit:8046 */
   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, 6333);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8046);
   }
   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]));
@@ -34629,7 +42521,7 @@ 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:6334 */
+    /* parser/parser_prod.nit:8047 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34644,32 +42536,32 @@ 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:6335 */
+      /* parser/parser_prod.nit:8048 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6335);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8048);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6336 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8049 */
       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, 6336);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8049);
       }
-      /* parser/parser_prod.nit:6337 */
+      /* parser/parser_prod.nit:8050 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6339 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6339);
+      /* parser/parser_prod.nit:8052 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8052);
     }
-    /* parser/parser_prod.nit:6341 */
+    /* parser/parser_prod.nit:8054 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6343 */
+  /* parser/parser_prod.nit:8056 */
   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, 6343);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 8056);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34679,7 +42571,7 @@ 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:6344 */
+    /* parser/parser_prod.nit:8057 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34694,71 +42586,65 @@ 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:6345 */
+      /* parser/parser_prod.nit:8058 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6345);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8058);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6346 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8059 */
       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, 6346);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8059);
       }
-      /* parser/parser_prod.nit:6347 */
+      /* parser/parser_prod.nit:8060 */
       ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6349 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6349);
+      /* parser/parser_prod.nit:8062 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8062);
     }
-    /* parser/parser_prod.nit:6351 */
+    /* parser/parser_prod.nit:8064 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6353 */
+  /* parser/parser_prod.nit:8066 */
   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, 6353);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8066);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:6353 */
+      /* parser/parser_prod.nit:8066 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:6354 */
+      /* parser/parser_prod.nit:8067 */
       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, 6354);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8067);
       }
       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___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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:6355 */
+        /* parser/parser_prod.nit:8068 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -34773,47 +42659,47 @@ 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:6356 */
+          /* parser/parser_prod.nit:8069 */
           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, 6356);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8069);
           }
-          /* parser/parser_prod.nit:6357 */
+          /* parser/parser_prod.nit:8070 */
           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, 6357);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8070);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(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:6358 */
+          /* parser/parser_prod.nit:8071 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6358);
+            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]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:6360 */
+          /* parser/parser_prod.nit:8073 */
           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, 6360);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8073);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(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:6362 */
+        /* parser/parser_prod.nit:8075 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
@@ -34822,14 +42708,58 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
   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)";
+static const char LOCATE_parser___parser_prod___ABraExpr___n_expr__eq[] = "parser_prod::ABraExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ABraExpr___n_expr__eq(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 = 8080;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___n_expr__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:8082 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8083 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraExpr___n_args__eq[] = "parser_prod::ABraExpr::(parser_nodes::ABraFormExpr::n_args=)";
+void parser___parser_prod___ABraExpr___n_args__eq(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 = 8085;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___n_args__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:8087 */
+  ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8088 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraExpr___visit_all[] = "parser_prod::ABraExpr::(parser_nodes::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 = 6367;
+  fra.me.line = 8092;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -34839,27 +42769,27 @@ void parser___parser_prod___ABraExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6369 */
+  /* parser/parser_prod.nit:8094 */
   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, 6369);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8094);
   }
   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:6370 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8095 */
   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, 6370);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 8095);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(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 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8096 */
   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, 6371);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8096);
   }
   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_1));
@@ -34882,20 +42812,20 @@ void parser___parser_prod___ABraExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:6372 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:8097 */
+    CALL_parser___parser_nodes___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;
+  int itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos201]) return;
+  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 = 6377;
+  fra.me.line = 8102;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -34903,19 +42833,19 @@ void parser___parser_prod___ABraAssignExpr___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos201] = 1;
+  init_table[itpos200] = 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;
+  int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraAssignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos202]) return;
+  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 = 6379;
+  fra.me.line = 8104;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___init_abraassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -34931,67 +42861,67 @@ void parser___parser_prod___ABraAssignExpr___init_abraassignexpr(val_t p0, val_t
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:6379 */
+  /* parser/parser_prod.nit:8104 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6386 */
+  /* parser/parser_prod.nit:8111 */
   CALL_parser___parser_prod___ABraAssignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:6387 */
+  /* parser/parser_prod.nit:8112 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=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, 8112);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6388 */
+  /* parser/parser_prod.nit:8113 */
   REGB0 = TAG_Bool(fra.me.REG[1]==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, 8113);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6389 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:8114 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=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, 8114);
   }
   ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6390 */
+  /* parser/parser_prod.nit:8115 */
   REGB0 = TAG_Bool(fra.me.REG[2]==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, 8115);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6391 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:8116 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6391);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8116);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6392 */
+  /* parser/parser_prod.nit:8117 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6392);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8117);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6393 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:8118 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6393);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8118);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6394 */
+  /* parser/parser_prod.nit:8119 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6394);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8119);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos201] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ABraAssignExpr___replace_child[] = "parser_prod::ABraAssignExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ABraAssignExpr___replace_child[] = "parser_prod::ABraAssignExpr::(parser_nodes::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;
@@ -34999,7 +42929,7 @@ void parser___parser_prod___ABraAssignExpr___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 = 6397;
+  fra.me.line = 8122;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35011,11 +42941,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:6399 */
+  /* parser/parser_prod.nit:8124 */
   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, 6399);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8124);
   }
   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]));
@@ -35025,7 +42955,7 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6400 */
+    /* parser/parser_prod.nit:8125 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35040,32 +42970,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:6401 */
+      /* parser/parser_prod.nit:8126 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6401);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8126);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6402 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8127 */
       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, 6402);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8127);
       }
-      /* parser/parser_prod.nit:6403 */
+      /* parser/parser_prod.nit:8128 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6405 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6405);
+      /* parser/parser_prod.nit:8130 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8130);
     }
-    /* parser/parser_prod.nit:6407 */
+    /* parser/parser_prod.nit:8132 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6409 */
+  /* parser/parser_prod.nit:8134 */
   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, 6409);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 8134);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35075,7 +43005,7 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6410 */
+    /* parser/parser_prod.nit:8135 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35090,32 +43020,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:6411 */
+      /* parser/parser_prod.nit:8136 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6411);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8136);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6412 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8137 */
       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, 6412);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8137);
       }
-      /* parser/parser_prod.nit:6413 */
+      /* parser/parser_prod.nit:8138 */
       ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6415 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6415);
+      /* parser/parser_prod.nit:8140 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8140);
     }
-    /* parser/parser_prod.nit:6417 */
+    /* parser/parser_prod.nit:8142 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6419 */
+  /* parser/parser_prod.nit:8144 */
   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, 6419);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 8144);
   }
   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]));
@@ -35125,7 +43055,7 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6420 */
+    /* parser/parser_prod.nit:8145 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35140,32 +43070,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:6421 */
+      /* parser/parser_prod.nit:8146 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6421);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8146);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6422 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8147 */
       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, 6422);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8147);
       }
-      /* parser/parser_prod.nit:6423 */
+      /* parser/parser_prod.nit:8148 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6425 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6425);
+      /* parser/parser_prod.nit:8150 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8150);
     }
-    /* parser/parser_prod.nit:6427 */
+    /* parser/parser_prod.nit:8152 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6429 */
+  /* parser/parser_prod.nit:8154 */
   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, 6429);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 8154);
   }
   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]));
@@ -35175,7 +43105,7 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6430 */
+    /* parser/parser_prod.nit:8155 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35190,39 +43120,127 @@ 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:6431 */
+      /* parser/parser_prod.nit:8156 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6431);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8156);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6432 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8157 */
       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, 6432);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8157);
       }
-      /* parser/parser_prod.nit:6433 */
+      /* parser/parser_prod.nit:8158 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6435 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6435);
+      /* parser/parser_prod.nit:8160 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8160);
     }
-    /* parser/parser_prod.nit:6437 */
+    /* parser/parser_prod.nit:8162 */
     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)";
+static const char LOCATE_parser___parser_prod___ABraAssignExpr___n_expr__eq[] = "parser_prod::ABraAssignExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ABraAssignExpr___n_expr__eq(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 = 8166;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___n_expr__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:8168 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8169 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraAssignExpr___n_args__eq[] = "parser_prod::ABraAssignExpr::(parser_nodes::ABraFormExpr::n_args=)";
+void parser___parser_prod___ABraAssignExpr___n_args__eq(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 = 8171;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___n_args__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:8173 */
+  ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8174 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraAssignExpr___n_assign__eq[] = "parser_prod::ABraAssignExpr::(parser_nodes::AAssignFormExpr::n_assign=)";
+void parser___parser_prod___ABraAssignExpr___n_assign__eq(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 = 8176;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___n_assign__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:8178 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8179 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraAssignExpr___n_value__eq[] = "parser_prod::ABraAssignExpr::(parser_nodes::AAssignFormExpr::n_value=)";
+void parser___parser_prod___ABraAssignExpr___n_value__eq(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 = 8181;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___n_value__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:8183 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8184 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraAssignExpr___visit_all[] = "parser_prod::ABraAssignExpr::(parser_nodes::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 = 6441;
+  fra.me.line = 8188;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -35232,50 +43250,50 @@ void parser___parser_prod___ABraAssignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6443 */
+  /* parser/parser_prod.nit:8190 */
   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, 6443);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8190);
   }
   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:6444 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8191 */
   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, 6444);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 8191);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(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:6445 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8192 */
   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, 6445);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 8192);
   }
   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:6446 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8193 */
   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, 6446);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 8193);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos202 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos203]) return;
+  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 = 6450;
+  fra.me.line = 8197;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -35283,19 +43301,19 @@ void parser___parser_prod___ABraReassignExpr___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos203] = 1;
+  init_table[itpos202] = 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;
+  int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraReassignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos204]) return;
+  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 = 6452;
+  fra.me.line = 8199;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -35311,67 +43329,67 @@ void parser___parser_prod___ABraReassignExpr___init_abrareassignexpr(val_t p0, v
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:6452 */
+  /* parser/parser_prod.nit:8199 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6459 */
+  /* parser/parser_prod.nit:8206 */
   CALL_parser___parser_prod___ABraReassignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:6460 */
+  /* parser/parser_prod.nit:8207 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6460);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8207);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6461 */
+  /* parser/parser_prod.nit:8208 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6461);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8208);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6462 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:8209 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6462);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8209);
   }
   ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6463 */
+  /* parser/parser_prod.nit:8210 */
   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, 8210);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6464 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:8211 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6464);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8211);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6465 */
+  /* parser/parser_prod.nit:8212 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6465);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8212);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6466 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:8213 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6466);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8213);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6467 */
+  /* parser/parser_prod.nit:8214 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6467);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8214);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos203] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ABraReassignExpr___replace_child[] = "parser_prod::ABraReassignExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ABraReassignExpr___replace_child[] = "parser_prod::ABraReassignExpr::(parser_nodes::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;
@@ -35379,7 +43397,7 @@ void parser___parser_prod___ABraReassignExpr___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 = 6470;
+  fra.me.line = 8217;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35391,11 +43409,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:6472 */
+  /* parser/parser_prod.nit:8219 */
   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, 6472);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8219);
   }
   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]));
@@ -35405,7 +43423,7 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6473 */
+    /* parser/parser_prod.nit:8220 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35420,32 +43438,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:6474 */
+      /* parser/parser_prod.nit:8221 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6474);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8221);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6475 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8222 */
       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, 6475);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8222);
       }
-      /* parser/parser_prod.nit:6476 */
+      /* parser/parser_prod.nit:8223 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6478 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6478);
+      /* parser/parser_prod.nit:8225 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8225);
     }
-    /* parser/parser_prod.nit:6480 */
+    /* parser/parser_prod.nit:8227 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6482 */
+  /* parser/parser_prod.nit:8229 */
   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, 6482);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 8229);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35455,7 +43473,7 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6483 */
+    /* parser/parser_prod.nit:8230 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35470,32 +43488,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:6484 */
+      /* parser/parser_prod.nit:8231 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6484);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8231);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6485 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8232 */
       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, 6485);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8232);
       }
-      /* parser/parser_prod.nit:6486 */
+      /* parser/parser_prod.nit:8233 */
       ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6488 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6488);
+      /* parser/parser_prod.nit:8235 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8235);
     }
-    /* parser/parser_prod.nit:6490 */
+    /* parser/parser_prod.nit:8237 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6492 */
+  /* parser/parser_prod.nit:8239 */
   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, 6492);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 8239);
   }
   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]));
@@ -35505,7 +43523,7 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6493 */
+    /* parser/parser_prod.nit:8240 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35520,32 +43538,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:6494 */
+      /* parser/parser_prod.nit:8241 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6494);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8241);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6495 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8242 */
       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, 6495);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8242);
       }
-      /* parser/parser_prod.nit:6496 */
+      /* parser/parser_prod.nit:8243 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6498 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6498);
+      /* parser/parser_prod.nit:8245 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8245);
     }
-    /* parser/parser_prod.nit:6500 */
+    /* parser/parser_prod.nit:8247 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6502 */
+  /* parser/parser_prod.nit:8249 */
   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, 6502);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 8249);
   }
   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]));
@@ -35555,7 +43573,7 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6503 */
+    /* parser/parser_prod.nit:8250 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35570,39 +43588,127 @@ 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:6504 */
+      /* parser/parser_prod.nit:8251 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6504);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8251);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6505 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8252 */
       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, 6505);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8252);
       }
-      /* parser/parser_prod.nit:6506 */
+      /* parser/parser_prod.nit:8253 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6508 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6508);
+      /* parser/parser_prod.nit:8255 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8255);
     }
-    /* parser/parser_prod.nit:6510 */
+    /* parser/parser_prod.nit:8257 */
     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)";
+static const char LOCATE_parser___parser_prod___ABraReassignExpr___n_expr__eq[] = "parser_prod::ABraReassignExpr::(parser_nodes::ASendExpr::n_expr=)";
+void parser___parser_prod___ABraReassignExpr___n_expr__eq(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 = 8261;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___n_expr__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:8263 */
+  ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8264 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraReassignExpr___n_args__eq[] = "parser_prod::ABraReassignExpr::(parser_nodes::ABraFormExpr::n_args=)";
+void parser___parser_prod___ABraReassignExpr___n_args__eq(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 = 8266;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___n_args__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:8268 */
+  ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8269 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraReassignExpr___n_assign_op__eq[] = "parser_prod::ABraReassignExpr::(parser_nodes::AReassignFormExpr::n_assign_op=)";
+void parser___parser_prod___ABraReassignExpr___n_assign_op__eq(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 = 8271;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___n_assign_op__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:8273 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8274 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraReassignExpr___n_value__eq[] = "parser_prod::ABraReassignExpr::(parser_nodes::AReassignFormExpr::n_value=)";
+void parser___parser_prod___ABraReassignExpr___n_value__eq(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 = 8276;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___n_value__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:8278 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8279 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraReassignExpr___visit_all[] = "parser_prod::ABraReassignExpr::(parser_nodes::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 = 6514;
+  fra.me.line = 8283;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -35612,50 +43718,50 @@ void parser___parser_prod___ABraReassignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6516 */
+  /* parser/parser_prod.nit:8285 */
   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, 6516);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8285);
   }
   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:6517 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8286 */
   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, 6517);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 8286);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(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:6518 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8287 */
   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, 6518);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 8287);
   }
   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:6519 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8288 */
   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, 6519);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 8288);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureCallExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos205]) return;
+  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 = 6523;
+  fra.me.line = 8292;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -35663,19 +43769,19 @@ void parser___parser_prod___AClosureCallExpr___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos205] = 1;
+  init_table[itpos204] = 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;
+  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureCallExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos206]) return;
+  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 = 6525;
+  fra.me.line = 8294;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -35689,39 +43795,39 @@ void parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6525 */
+  /* parser/parser_prod.nit:8294 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6531 */
+  /* parser/parser_prod.nit:8300 */
   CALL_parser___parser_prod___AClosureCallExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6532 */
+  /* parser/parser_prod.nit:8301 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6532);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8301);
   }
   ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6533 */
+  /* parser/parser_prod.nit:8302 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6533);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8302);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6534 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8303 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6534);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8303);
   }
   ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6535 */
+  /* parser/parser_prod.nit:8304 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6535);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8304);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos205] = 1;
   return;
 }
   void OC_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -35729,7 +43835,7 @@ 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:6536 */
+    /* parser/parser_prod.nit:8305 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -35743,26 +43849,26 @@ void parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, v
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:6537 */
+    /* parser/parser_prod.nit:8306 */
     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, 6537);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8306);
     }
-    /* parser/parser_prod.nit:6538 */
+    /* parser/parser_prod.nit:8307 */
     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, 6538);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8307);
     }
     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:6539 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
+    /* parser/parser_prod.nit:8308 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AClosureCallExpr___replace_child[] = "parser_prod::AClosureCallExpr::(parser_nodes::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;
@@ -35773,7 +43879,7 @@ 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 = 6543;
+  fra.me.line = 8312;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35785,11 +43891,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:6545 */
+  /* parser/parser_prod.nit:8314 */
   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, 6545);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8314);
   }
   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]));
@@ -35799,7 +43905,7 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6546 */
+    /* parser/parser_prod.nit:8315 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35814,32 +43920,32 @@ 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:6547 */
+      /* parser/parser_prod.nit:8316 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6547);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8316);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6548 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8317 */
       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, 6548);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8317);
       }
-      /* parser/parser_prod.nit:6549 */
+      /* parser/parser_prod.nit:8318 */
       ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6551 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6551);
+      /* parser/parser_prod.nit:8320 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8320);
     }
-    /* parser/parser_prod.nit:6553 */
+    /* parser/parser_prod.nit:8322 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6555 */
+  /* parser/parser_prod.nit:8324 */
   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, 6555);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 8324);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35849,7 +43955,7 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6556 */
+    /* parser/parser_prod.nit:8325 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35864,71 +43970,65 @@ 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:6557 */
+      /* parser/parser_prod.nit:8326 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6557);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8326);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6558 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8327 */
       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, 6558);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8327);
       }
-      /* parser/parser_prod.nit:6559 */
+      /* parser/parser_prod.nit:8328 */
       ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6561 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6561);
+      /* parser/parser_prod.nit:8330 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8330);
     }
-    /* parser/parser_prod.nit:6563 */
+    /* parser/parser_prod.nit:8332 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6565 */
+  /* parser/parser_prod.nit:8334 */
   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, 6565);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8334);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:6565 */
+      /* parser/parser_prod.nit:8334 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:6566 */
+      /* parser/parser_prod.nit:8335 */
       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, 6566);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8335);
       }
       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___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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:6567 */
+        /* parser/parser_prod.nit:8336 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -35943,47 +44043,47 @@ 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:6568 */
+          /* parser/parser_prod.nit:8337 */
           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, 6568);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8337);
           }
-          /* parser/parser_prod.nit:6569 */
+          /* parser/parser_prod.nit:8338 */
           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, 6569);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8338);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(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:6570 */
+          /* parser/parser_prod.nit:8339 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6570);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8339);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:6572 */
+          /* parser/parser_prod.nit:8341 */
           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, 6572);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8341);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(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:6574 */
+        /* parser/parser_prod.nit:8343 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
@@ -35992,14 +44092,58 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
   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)";
+static const char LOCATE_parser___parser_prod___AClosureCallExpr___n_id__eq[] = "parser_prod::AClosureCallExpr::(parser_nodes::AClosureCallExpr::n_id=)";
+void parser___parser_prod___AClosureCallExpr___n_id__eq(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 = 8348;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___n_id__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:8350 */
+  ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8351 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AClosureCallExpr___n_args__eq[] = "parser_prod::AClosureCallExpr::(parser_nodes::AClosureCallExpr::n_args=)";
+void parser___parser_prod___AClosureCallExpr___n_args__eq(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 = 8353;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___n_args__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:8355 */
+  ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8356 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AClosureCallExpr___visit_all[] = "parser_prod::AClosureCallExpr::(parser_nodes::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 = 6579;
+  fra.me.line = 8360;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -36009,27 +44153,27 @@ void parser___parser_prod___AClosureCallExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6581 */
+  /* parser/parser_prod.nit:8362 */
   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, 6581);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8362);
   }
   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:6582 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8363 */
   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, 6582);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 8363);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(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:6583 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8364 */
   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, 6583);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 8364);
   }
   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_1));
@@ -36052,20 +44196,20 @@ void parser___parser_prod___AClosureCallExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:6584 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:8365 */
+    CALL_parser___parser_nodes___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;
+  int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos207]) return;
+  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 = 6589;
+  fra.me.line = 8370;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -36073,19 +44217,19 @@ void parser___parser_prod___AVarExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos207] = 1;
+  init_table[itpos206] = 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;
+  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos208]) return;
+  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 = 6591;
+  fra.me.line = 8372;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___init_avarexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -36095,28 +44239,28 @@ void parser___parser_prod___AVarExpr___init_avarexpr(val_t p0, val_t p1, int* in
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6591 */
+  /* parser/parser_prod.nit:8372 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6595 */
+  /* parser/parser_prod.nit:8376 */
   CALL_parser___parser_prod___AVarExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6596 */
+  /* parser/parser_prod.nit:8377 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6596);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8377);
   }
   ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6597 */
+  /* parser/parser_prod.nit:8378 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6597);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8378);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos207] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AVarExpr___replace_child[] = "parser_prod::AVarExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AVarExpr___replace_child[] = "parser_prod::AVarExpr::(parser_nodes::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;
@@ -36124,7 +44268,7 @@ 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 = 6600;
+  fra.me.line = 8381;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36136,11 +44280,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:6602 */
+  /* parser/parser_prod.nit:8383 */
   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, 6602);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8383);
   }
   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]));
@@ -36150,7 +44294,7 @@ 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:6603 */
+    /* parser/parser_prod.nit:8384 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36165,39 +44309,61 @@ 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:6604 */
+      /* parser/parser_prod.nit:8385 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6604);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8385);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6605 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8386 */
       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, 6605);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8386);
       }
-      /* parser/parser_prod.nit:6606 */
+      /* parser/parser_prod.nit:8387 */
       ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6608 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6608);
+      /* parser/parser_prod.nit:8389 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8389);
     }
-    /* parser/parser_prod.nit:6610 */
+    /* parser/parser_prod.nit:8391 */
     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)";
+static const char LOCATE_parser___parser_prod___AVarExpr___n_id__eq[] = "parser_prod::AVarExpr::(parser_nodes::AVarFormExpr::n_id=)";
+void parser___parser_prod___AVarExpr___n_id__eq(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 = 8395;
+  fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___n_id__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:8397 */
+  ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8398 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AVarExpr___visit_all[] = "parser_prod::AVarExpr::(parser_nodes::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 = 6614;
+  fra.me.line = 8402;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36206,26 +44372,26 @@ void parser___parser_prod___AVarExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6616 */
+  /* parser/parser_prod.nit:8404 */
   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, 6616);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8404);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos209]) return;
+  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 = 6620;
+  fra.me.line = 8408;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -36233,19 +44399,19 @@ void parser___parser_prod___AVarAssignExpr___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos209] = 1;
+  init_table[itpos208] = 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;
+  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarAssignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos210]) return;
+  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 = 6622;
+  fra.me.line = 8410;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___init_avarassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -36259,54 +44425,54 @@ void parser___parser_prod___AVarAssignExpr___init_avarassignexpr(val_t p0, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6622 */
+  /* parser/parser_prod.nit:8410 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6628 */
+  /* parser/parser_prod.nit:8416 */
   CALL_parser___parser_prod___AVarAssignExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6629 */
+  /* parser/parser_prod.nit:8417 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6629);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8417);
   }
   ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6630 */
+  /* parser/parser_prod.nit:8418 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6630);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8418);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6631 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8419 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6631);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8419);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6632 */
+  /* parser/parser_prod.nit:8420 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6632);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8420);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6633 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8421 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6633);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8421);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6634 */
+  /* parser/parser_prod.nit:8422 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6634);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8422);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos209] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AVarAssignExpr___replace_child[] = "parser_prod::AVarAssignExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AVarAssignExpr___replace_child[] = "parser_prod::AVarAssignExpr::(parser_nodes::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;
@@ -36314,7 +44480,7 @@ 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 = 6637;
+  fra.me.line = 8425;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36326,11 +44492,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:6639 */
+  /* parser/parser_prod.nit:8427 */
   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, 6639);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8427);
   }
   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]));
@@ -36340,7 +44506,7 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6640 */
+    /* parser/parser_prod.nit:8428 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36355,32 +44521,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:6641 */
+      /* parser/parser_prod.nit:8429 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6641);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8429);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6642 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8430 */
       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, 6642);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8430);
       }
-      /* parser/parser_prod.nit:6643 */
+      /* parser/parser_prod.nit:8431 */
       ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6645 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6645);
+      /* parser/parser_prod.nit:8433 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8433);
     }
-    /* parser/parser_prod.nit:6647 */
+    /* parser/parser_prod.nit:8435 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6649 */
+  /* parser/parser_prod.nit:8437 */
   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, 6649);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 8437);
   }
   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]));
@@ -36390,7 +44556,7 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6650 */
+    /* parser/parser_prod.nit:8438 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36405,32 +44571,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:6651 */
+      /* parser/parser_prod.nit:8439 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6651);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8439);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6652 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8440 */
       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, 6652);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8440);
       }
-      /* parser/parser_prod.nit:6653 */
+      /* parser/parser_prod.nit:8441 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6655 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6655);
+      /* parser/parser_prod.nit:8443 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8443);
     }
-    /* parser/parser_prod.nit:6657 */
+    /* parser/parser_prod.nit:8445 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6659 */
+  /* parser/parser_prod.nit:8447 */
   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, 6659);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 8447);
   }
   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]));
@@ -36440,7 +44606,7 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6660 */
+    /* parser/parser_prod.nit:8448 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36455,39 +44621,105 @@ 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:6661 */
+      /* parser/parser_prod.nit:8449 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6661);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8449);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6662 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8450 */
       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, 6662);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8450);
       }
-      /* parser/parser_prod.nit:6663 */
+      /* parser/parser_prod.nit:8451 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6665 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6665);
+      /* parser/parser_prod.nit:8453 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8453);
     }
-    /* parser/parser_prod.nit:6667 */
+    /* parser/parser_prod.nit:8455 */
     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)";
+static const char LOCATE_parser___parser_prod___AVarAssignExpr___n_id__eq[] = "parser_prod::AVarAssignExpr::(parser_nodes::AVarFormExpr::n_id=)";
+void parser___parser_prod___AVarAssignExpr___n_id__eq(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 = 8459;
+  fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___n_id__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:8461 */
+  ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8462 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_assign__eq[] = "parser_prod::AVarAssignExpr::(parser_nodes::AAssignFormExpr::n_assign=)";
+void parser___parser_prod___AVarAssignExpr___n_assign__eq(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 = 8464;
+  fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___n_assign__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:8466 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8467 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_value__eq[] = "parser_prod::AVarAssignExpr::(parser_nodes::AAssignFormExpr::n_value=)";
+void parser___parser_prod___AVarAssignExpr___n_value__eq(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 = 8469;
+  fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___n_value__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:8471 */
+  ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8472 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AVarAssignExpr::(parser_nodes::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 = 6671;
+  fra.me.line = 8476;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -36497,42 +44729,42 @@ void parser___parser_prod___AVarAssignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6673 */
+  /* parser/parser_prod.nit:8478 */
   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, 6673);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8478);
   }
   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:6674 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8479 */
   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, 6674);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 8479);
   }
   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:6675 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8480 */
   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, 6675);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 8480);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos211]) return;
+  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 = 6679;
+  fra.me.line = 8484;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -36540,19 +44772,19 @@ void parser___parser_prod___AVarReassignExpr___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos211] = 1;
+  init_table[itpos210] = 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;
+  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVarReassignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos212]) return;
+  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 = 6681;
+  fra.me.line = 8486;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___init_avarreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -36566,54 +44798,54 @@ void parser___parser_prod___AVarReassignExpr___init_avarreassignexpr(val_t p0, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6681 */
+  /* parser/parser_prod.nit:8486 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6687 */
+  /* parser/parser_prod.nit:8492 */
   CALL_parser___parser_prod___AVarReassignExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6688 */
+  /* parser/parser_prod.nit:8493 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6688);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8493);
   }
   ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6689 */
+  /* parser/parser_prod.nit:8494 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6689);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8494);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6690 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8495 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6690);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8495);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6691 */
+  /* parser/parser_prod.nit:8496 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6691);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8496);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6692 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8497 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6692);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8497);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6693 */
+  /* parser/parser_prod.nit:8498 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6693);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8498);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos211] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AVarReassignExpr___replace_child[] = "parser_prod::AVarReassignExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AVarReassignExpr___replace_child[] = "parser_prod::AVarReassignExpr::(parser_nodes::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;
@@ -36621,7 +44853,7 @@ 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 = 6696;
+  fra.me.line = 8501;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36633,11 +44865,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:6698 */
+  /* parser/parser_prod.nit:8503 */
   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, 6698);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8503);
   }
   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]));
@@ -36647,7 +44879,7 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6699 */
+    /* parser/parser_prod.nit:8504 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36662,32 +44894,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:6700 */
+      /* parser/parser_prod.nit:8505 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6700);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8505);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6701 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8506 */
       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, 6701);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8506);
       }
-      /* parser/parser_prod.nit:6702 */
+      /* parser/parser_prod.nit:8507 */
       ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6704 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6704);
+      /* parser/parser_prod.nit:8509 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8509);
     }
-    /* parser/parser_prod.nit:6706 */
+    /* parser/parser_prod.nit:8511 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6708 */
+  /* parser/parser_prod.nit:8513 */
   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, 6708);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 8513);
   }
   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]));
@@ -36697,7 +44929,7 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6709 */
+    /* parser/parser_prod.nit:8514 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36712,32 +44944,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:6710 */
+      /* parser/parser_prod.nit:8515 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6710);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8515);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6711 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8516 */
       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, 6711);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8516);
       }
-      /* parser/parser_prod.nit:6712 */
+      /* parser/parser_prod.nit:8517 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6714 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6714);
+      /* parser/parser_prod.nit:8519 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8519);
     }
-    /* parser/parser_prod.nit:6716 */
+    /* parser/parser_prod.nit:8521 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6718 */
+  /* parser/parser_prod.nit:8523 */
   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, 6718);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 8523);
   }
   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]));
@@ -36747,7 +44979,7 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6719 */
+    /* parser/parser_prod.nit:8524 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36762,39 +44994,105 @@ 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:6720 */
+      /* parser/parser_prod.nit:8525 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6720);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8525);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6721 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8526 */
       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, 6721);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8526);
       }
-      /* parser/parser_prod.nit:6722 */
+      /* parser/parser_prod.nit:8527 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6724 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6724);
+      /* parser/parser_prod.nit:8529 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8529);
     }
-    /* parser/parser_prod.nit:6726 */
+    /* parser/parser_prod.nit:8531 */
     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)";
+static const char LOCATE_parser___parser_prod___AVarReassignExpr___n_id__eq[] = "parser_prod::AVarReassignExpr::(parser_nodes::AVarFormExpr::n_id=)";
+void parser___parser_prod___AVarReassignExpr___n_id__eq(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 = 8535;
+  fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___n_id__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:8537 */
+  ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8538 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_assign_op__eq[] = "parser_prod::AVarReassignExpr::(parser_nodes::AReassignFormExpr::n_assign_op=)";
+void parser___parser_prod___AVarReassignExpr___n_assign_op__eq(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 = 8540;
+  fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___n_assign_op__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:8542 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8543 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_value__eq[] = "parser_prod::AVarReassignExpr::(parser_nodes::AReassignFormExpr::n_value=)";
+void parser___parser_prod___AVarReassignExpr___n_value__eq(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 = 8545;
+  fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___n_value__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:8547 */
+  ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8548 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AVarReassignExpr::(parser_nodes::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 = 6730;
+  fra.me.line = 8552;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -36804,42 +45102,42 @@ void parser___parser_prod___AVarReassignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6732 */
+  /* parser/parser_prod.nit:8554 */
   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, 6732);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8554);
   }
   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:6733 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8555 */
   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, 6733);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 8555);
   }
   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:6734 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:8556 */
   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, 6734);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 8556);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ARangeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos213]) return;
+  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 = 6738;
+  fra.me.line = 8560;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -36847,20 +45145,20 @@ void parser___parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos213] = 1;
+  init_table[itpos212] = 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, val_t p3, int* init_table){
-  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ARangeExpr].i;
+  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ARangeExpr].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[itpos214]) return;
+  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 = 6740;
+  fra.me.line = 8562;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___init_arangeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -36874,39 +45172,39 @@ void parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6740 */
+  /* parser/parser_prod.nit:8562 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6746 */
+  /* parser/parser_prod.nit:8568 */
   CALL_parser___parser_prod___ARangeExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6747 */
+  /* parser/parser_prod.nit:8569 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6747);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8569);
   }
   ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6748 */
+  /* parser/parser_prod.nit:8570 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6748);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8570);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6749 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8571 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6749);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8571);
   }
   ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6750 */
+  /* parser/parser_prod.nit:8572 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6750);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8572);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6751 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:8573 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6752 */
+  /* parser/parser_prod.nit:8574 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36921,18 +45219,18 @@ void parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6753 */
+    /* parser/parser_prod.nit:8575 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6753);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8575);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos214] = 1;
+  init_table[itpos213] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ARangeExpr___replace_child[] = "parser_prod::ARangeExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ARangeExpr___replace_child[] = "parser_prod::ARangeExpr::(parser_nodes::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;
@@ -36940,7 +45238,7 @@ 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 = 6757;
+  fra.me.line = 8579;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36952,11 +45250,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:6759 */
+  /* parser/parser_prod.nit:8581 */
   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, 6759);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8581);
   }
   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]));
@@ -36966,7 +45264,7 @@ 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:6760 */
+    /* parser/parser_prod.nit:8582 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36981,32 +45279,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:6761 */
+      /* parser/parser_prod.nit:8583 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6761);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8583);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6762 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8584 */
       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, 6762);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8584);
       }
-      /* parser/parser_prod.nit:6763 */
+      /* parser/parser_prod.nit:8585 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6765 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6765);
+      /* parser/parser_prod.nit:8587 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8587);
     }
-    /* parser/parser_prod.nit:6767 */
+    /* parser/parser_prod.nit:8589 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6769 */
+  /* parser/parser_prod.nit:8591 */
   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, 6769);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 8591);
   }
   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]));
@@ -37016,7 +45314,7 @@ 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:6770 */
+    /* parser/parser_prod.nit:8592 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37031,28 +45329,28 @@ 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:6771 */
+      /* parser/parser_prod.nit:8593 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6771);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8593);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6772 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8594 */
       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, 6772);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8594);
       }
-      /* parser/parser_prod.nit:6773 */
+      /* parser/parser_prod.nit:8595 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6775 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6775);
+      /* parser/parser_prod.nit:8597 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8597);
     }
-    /* parser/parser_prod.nit:6777 */
+    /* parser/parser_prod.nit:8599 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6779 */
+  /* parser/parser_prod.nit:8601 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -37067,7 +45365,7 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6780 */
+    /* parser/parser_prod.nit:8602 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37082,32 +45380,120 @@ 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:6781 */
+      /* parser/parser_prod.nit:8603 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6781);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8603);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6782 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8604 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6782);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8604);
       }
-      /* parser/parser_prod.nit:6783 */
+      /* parser/parser_prod.nit:8605 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6785 */
+      /* parser/parser_prod.nit:8607 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6787 */
+    /* parser/parser_prod.nit:8609 */
     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)";
+static const char LOCATE_parser___parser_prod___ARangeExpr___n_expr__eq[] = "parser_prod::ARangeExpr::(parser_nodes::ARangeExpr::n_expr=)";
+void parser___parser_prod___ARangeExpr___n_expr__eq(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 = 8613;
+  fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___n_expr__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:8615 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8616 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::ARangeExpr::(parser_nodes::ARangeExpr::n_expr2=)";
+void parser___parser_prod___ARangeExpr___n_expr2__eq(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 = 8618;
+  fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___n_expr2__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:8620 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8621 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::ARangeExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ARangeExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 8623;
+  fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___n_annotations__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:8625 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8626 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:8627 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8627);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ARangeExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -37115,7 +45501,7 @@ void parser___parser_prod___ARangeExpr___visit_all(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 = 6791;
+  fra.me.line = 8632;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37126,25 +45512,25 @@ void parser___parser_prod___ARangeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6791 */
+  /* parser/parser_prod.nit:8632 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6793 */
+  /* parser/parser_prod.nit:8634 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6793);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8634);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____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:6794 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8635 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6794);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 8635);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(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:6795 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8636 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -37160,27 +45546,27 @@ void parser___parser_prod___ARangeExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6796 */
+    /* parser/parser_prod.nit:8637 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6796);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8637);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACrangeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos215]) return;
+  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 = 6801;
+  fra.me.line = 8642;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -37188,20 +45574,20 @@ void parser___parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos215] = 1;
+  init_table[itpos214] = 1;
   return;
 }
 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, val_t p5, int* init_table){
-  int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACrangeExpr].i;
+  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACrangeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos216]) return;
+  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 = 6803;
+  fra.me.line = 8644;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___init_acrangeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -37219,65 +45605,65 @@ void parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, v
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:6803 */
+  /* parser/parser_prod.nit:8644 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6811 */
+  /* parser/parser_prod.nit:8652 */
   CALL_parser___parser_prod___ACrangeExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:6812 */
+  /* parser/parser_prod.nit:8653 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6812);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8653);
   }
   ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6813 */
+  /* parser/parser_prod.nit:8654 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6813);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8654);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6814 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:8655 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6814);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8655);
   }
   ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6815 */
+  /* parser/parser_prod.nit:8656 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6815);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8656);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6816 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:8657 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6816);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8657);
   }
   ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6817 */
+  /* parser/parser_prod.nit:8658 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6817);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8658);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6818 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:8659 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6818);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8659);
   }
   ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6819 */
+  /* parser/parser_prod.nit:8660 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6819);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8660);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6820 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:8661 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:6821 */
+  /* parser/parser_prod.nit:8662 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37292,18 +45678,18 @@ void parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6822 */
+    /* parser/parser_prod.nit:8663 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6822);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8663);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos216] = 1;
+  init_table[itpos215] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ACrangeExpr___replace_child[] = "parser_prod::ACrangeExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ACrangeExpr___replace_child[] = "parser_prod::ACrangeExpr::(parser_nodes::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;
@@ -37311,7 +45697,7 @@ 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 = 6826;
+  fra.me.line = 8667;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37323,11 +45709,11 @@ 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:6828 */
+  /* parser/parser_prod.nit:8669 */
   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, 6828);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 8669);
   }
   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]));
@@ -37337,7 +45723,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6829 */
+    /* parser/parser_prod.nit:8670 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37352,32 +45738,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:6830 */
+      /* parser/parser_prod.nit:8671 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6830);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8671);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6831 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8672 */
       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, 6831);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8672);
       }
-      /* parser/parser_prod.nit:6832 */
+      /* parser/parser_prod.nit:8673 */
       ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6834 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6834);
+      /* parser/parser_prod.nit:8675 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8675);
     }
-    /* parser/parser_prod.nit:6836 */
+    /* parser/parser_prod.nit:8677 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6838 */
+  /* parser/parser_prod.nit:8679 */
   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, 6838);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8679);
   }
   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]));
@@ -37387,7 +45773,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6839 */
+    /* parser/parser_prod.nit:8680 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37402,32 +45788,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:6840 */
+      /* parser/parser_prod.nit:8681 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6840);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8681);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6841 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8682 */
       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, 6841);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8682);
       }
-      /* parser/parser_prod.nit:6842 */
+      /* parser/parser_prod.nit:8683 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6844 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6844);
+      /* parser/parser_prod.nit:8685 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8685);
     }
-    /* parser/parser_prod.nit:6846 */
+    /* parser/parser_prod.nit:8687 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6848 */
+  /* parser/parser_prod.nit:8689 */
   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, 6848);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 8689);
   }
   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]));
@@ -37437,7 +45823,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6849 */
+    /* parser/parser_prod.nit:8690 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37452,32 +45838,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:6850 */
+      /* parser/parser_prod.nit:8691 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6850);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8691);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6851 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8692 */
       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, 6851);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8692);
       }
-      /* parser/parser_prod.nit:6852 */
+      /* parser/parser_prod.nit:8693 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6854 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6854);
+      /* parser/parser_prod.nit:8695 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8695);
     }
-    /* parser/parser_prod.nit:6856 */
+    /* parser/parser_prod.nit:8697 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6858 */
+  /* parser/parser_prod.nit:8699 */
   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, 6858);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 8699);
   }
   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]));
@@ -37487,7 +45873,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6859 */
+    /* parser/parser_prod.nit:8700 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37502,28 +45888,28 @@ 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:6860 */
+      /* parser/parser_prod.nit:8701 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6860);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8701);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6861 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8702 */
       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, 6861);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8702);
       }
-      /* parser/parser_prod.nit:6862 */
+      /* parser/parser_prod.nit:8703 */
       ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6864 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6864);
+      /* parser/parser_prod.nit:8705 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8705);
     }
-    /* parser/parser_prod.nit:6866 */
+    /* parser/parser_prod.nit:8707 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6868 */
+  /* parser/parser_prod.nit:8709 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -37538,7 +45924,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6869 */
+    /* parser/parser_prod.nit:8710 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37553,32 +45939,164 @@ 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:6870 */
+      /* parser/parser_prod.nit:8711 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6870);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8711);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6871 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8712 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6871);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8712);
       }
-      /* parser/parser_prod.nit:6872 */
+      /* parser/parser_prod.nit:8713 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6874 */
+      /* parser/parser_prod.nit:8715 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6876 */
+    /* parser/parser_prod.nit:8717 */
     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)";
+static const char LOCATE_parser___parser_prod___ACrangeExpr___n_obra__eq[] = "parser_prod::ACrangeExpr::(parser_nodes::ACrangeExpr::n_obra=)";
+void parser___parser_prod___ACrangeExpr___n_obra__eq(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 = 8721;
+  fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___n_obra__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:8723 */
+  ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8724 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr__eq[] = "parser_prod::ACrangeExpr::(parser_nodes::ARangeExpr::n_expr=)";
+void parser___parser_prod___ACrangeExpr___n_expr__eq(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 = 8726;
+  fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___n_expr__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:8728 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8729 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::ACrangeExpr::(parser_nodes::ARangeExpr::n_expr2=)";
+void parser___parser_prod___ACrangeExpr___n_expr2__eq(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 = 8731;
+  fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___n_expr2__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:8733 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8734 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_cbra__eq[] = "parser_prod::ACrangeExpr::(parser_nodes::ACrangeExpr::n_cbra=)";
+void parser___parser_prod___ACrangeExpr___n_cbra__eq(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 = 8736;
+  fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___n_cbra__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:8738 */
+  ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8739 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::ACrangeExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ACrangeExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 8741;
+  fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___n_annotations__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:8743 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8744 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:8745 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8745);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ACrangeExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -37586,7 +46104,7 @@ void parser___parser_prod___ACrangeExpr___visit_all(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 = 6880;
+  fra.me.line = 8750;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37597,41 +46115,41 @@ void parser___parser_prod___ACrangeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6880 */
+  /* parser/parser_prod.nit:8750 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6882 */
+  /* parser/parser_prod.nit:8752 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6882);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 8752);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACrangeExpr____n_obra(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:6883 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8753 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6883);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8753);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____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:6884 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8754 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6884);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 8754);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(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:6885 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8755 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6885);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 8755);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(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:6886 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8756 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -37647,27 +46165,27 @@ void parser___parser_prod___ACrangeExpr___visit_all(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:8757 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6887);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8757);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrangeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos217]) return;
+  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 = 6892;
+  fra.me.line = 8762;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -37675,20 +46193,20 @@ void parser___parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos217] = 1;
+  init_table[itpos216] = 1;
   return;
 }
 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, val_t p5, int* init_table){
-  int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrangeExpr].i;
+  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrangeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos218]) return;
+  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 = 6894;
+  fra.me.line = 8764;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___init_aorangeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -37706,65 +46224,65 @@ void parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, v
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:6894 */
+  /* parser/parser_prod.nit:8764 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6902 */
+  /* parser/parser_prod.nit:8772 */
   CALL_parser___parser_prod___AOrangeExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:6903 */
+  /* parser/parser_prod.nit:8773 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6903);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8773);
   }
   ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6904 */
+  /* parser/parser_prod.nit:8774 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6904);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8774);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6905 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:8775 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6905);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8775);
   }
   ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6906 */
+  /* parser/parser_prod.nit:8776 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6906);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8776);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6907 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:8777 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6907);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8777);
   }
   ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6908 */
+  /* parser/parser_prod.nit:8778 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6908);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8778);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6909 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:8779 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6909);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8779);
   }
   ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6910 */
+  /* parser/parser_prod.nit:8780 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6910);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8780);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:6911 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:8781 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:6912 */
+  /* parser/parser_prod.nit:8782 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37779,18 +46297,18 @@ void parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6913 */
+    /* parser/parser_prod.nit:8783 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6913);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8783);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos218] = 1;
+  init_table[itpos217] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AOrangeExpr___replace_child[] = "parser_prod::AOrangeExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AOrangeExpr___replace_child[] = "parser_prod::AOrangeExpr::(parser_nodes::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;
@@ -37798,7 +46316,7 @@ 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 = 6917;
+  fra.me.line = 8787;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37810,11 +46328,11 @@ 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:6919 */
+  /* parser/parser_prod.nit:8789 */
   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, 6919);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 8789);
   }
   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]));
@@ -37824,7 +46342,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6920 */
+    /* parser/parser_prod.nit:8790 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37839,32 +46357,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:6921 */
+      /* parser/parser_prod.nit:8791 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6921);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8791);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6922 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8792 */
       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, 6922);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8792);
       }
-      /* parser/parser_prod.nit:6923 */
+      /* parser/parser_prod.nit:8793 */
       ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6925 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6925);
+      /* parser/parser_prod.nit:8795 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8795);
     }
-    /* parser/parser_prod.nit:6927 */
+    /* parser/parser_prod.nit:8797 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6929 */
+  /* parser/parser_prod.nit:8799 */
   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, 6929);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8799);
   }
   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]));
@@ -37874,7 +46392,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6930 */
+    /* parser/parser_prod.nit:8800 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37889,32 +46407,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:6931 */
+      /* parser/parser_prod.nit:8801 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6931);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8801);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6932 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8802 */
       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, 6932);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8802);
       }
-      /* parser/parser_prod.nit:6933 */
+      /* parser/parser_prod.nit:8803 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6935 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6935);
+      /* parser/parser_prod.nit:8805 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8805);
     }
-    /* parser/parser_prod.nit:6937 */
+    /* parser/parser_prod.nit:8807 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6939 */
+  /* parser/parser_prod.nit:8809 */
   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, 6939);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 8809);
   }
   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]));
@@ -37924,7 +46442,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6940 */
+    /* parser/parser_prod.nit:8810 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37939,32 +46457,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:6941 */
+      /* parser/parser_prod.nit:8811 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6941);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8811);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6942 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8812 */
       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, 6942);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8812);
       }
-      /* parser/parser_prod.nit:6943 */
+      /* parser/parser_prod.nit:8813 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6945 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6945);
+      /* parser/parser_prod.nit:8815 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8815);
     }
-    /* parser/parser_prod.nit:6947 */
+    /* parser/parser_prod.nit:8817 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6949 */
+  /* parser/parser_prod.nit:8819 */
   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, 6949);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 8819);
   }
   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]));
@@ -37974,7 +46492,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6950 */
+    /* parser/parser_prod.nit:8820 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37989,28 +46507,28 @@ 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:6951 */
+      /* parser/parser_prod.nit:8821 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6951);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8821);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6952 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8822 */
       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, 6952);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8822);
       }
-      /* parser/parser_prod.nit:6953 */
+      /* parser/parser_prod.nit:8823 */
       ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6955 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6955);
+      /* parser/parser_prod.nit:8825 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8825);
     }
-    /* parser/parser_prod.nit:6957 */
+    /* parser/parser_prod.nit:8827 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6959 */
+  /* parser/parser_prod.nit:8829 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -38025,7 +46543,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6960 */
+    /* parser/parser_prod.nit:8830 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38040,32 +46558,164 @@ 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:6961 */
+      /* parser/parser_prod.nit:8831 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6961);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8831);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6962 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8832 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6962);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8832);
       }
-      /* parser/parser_prod.nit:6963 */
+      /* parser/parser_prod.nit:8833 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6965 */
+      /* parser/parser_prod.nit:8835 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6967 */
+    /* parser/parser_prod.nit:8837 */
     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)";
+static const char LOCATE_parser___parser_prod___AOrangeExpr___n_obra__eq[] = "parser_prod::AOrangeExpr::(parser_nodes::AOrangeExpr::n_obra=)";
+void parser___parser_prod___AOrangeExpr___n_obra__eq(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 = 8841;
+  fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___n_obra__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:8843 */
+  ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8844 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr__eq[] = "parser_prod::AOrangeExpr::(parser_nodes::ARangeExpr::n_expr=)";
+void parser___parser_prod___AOrangeExpr___n_expr__eq(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 = 8846;
+  fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___n_expr__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:8848 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8849 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr2__eq[] = "parser_prod::AOrangeExpr::(parser_nodes::ARangeExpr::n_expr2=)";
+void parser___parser_prod___AOrangeExpr___n_expr2__eq(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 = 8851;
+  fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___n_expr2__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:8853 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8854 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_cbra__eq[] = "parser_prod::AOrangeExpr::(parser_nodes::AOrangeExpr::n_cbra=)";
+void parser___parser_prod___AOrangeExpr___n_cbra__eq(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 = 8856;
+  fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___n_cbra__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:8858 */
+  ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8859 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::AOrangeExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AOrangeExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 8861;
+  fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___n_annotations__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:8863 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8864 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:8865 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8865);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AOrangeExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -38073,7 +46723,7 @@ void parser___parser_prod___AOrangeExpr___visit_all(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 = 6971;
+  fra.me.line = 8870;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38084,41 +46734,41 @@ void parser___parser_prod___AOrangeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6971 */
+  /* parser/parser_prod.nit:8870 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6973 */
+  /* parser/parser_prod.nit:8872 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6973);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 8872);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrangeExpr____n_obra(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:6974 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8873 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6974);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 8873);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____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:6975 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8874 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6975);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 8874);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(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:6976 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8875 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6976);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 8875);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(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:6977 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8876 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -38134,27 +46784,27 @@ void parser___parser_prod___AOrangeExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6978 */
+    /* parser/parser_prod.nit:8877 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6978);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8877);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AArrayExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos219]) return;
+  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 = 6983;
+  fra.me.line = 8882;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -38162,20 +46812,20 @@ void parser___parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos219] = 1;
+  init_table[itpos218] = 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, val_t p2, int* init_table){
-  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AArrayExpr].i;
+  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AArrayExpr].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[itpos220]) return;
+  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 = 6985;
+  fra.me.line = 8884;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___init_aarrayexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38187,26 +46837,26 @@ void parser___parser_prod___AArrayExpr___init_aarrayexpr(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:6985 */
+  /* parser/parser_prod.nit:8884 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6990 */
+  /* parser/parser_prod.nit:8889 */
   CALL_parser___parser_prod___AArrayExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:6991 */
+  /* parser/parser_prod.nit:8890 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6991);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8890);
   }
   ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6992 */
+  /* parser/parser_prod.nit:8891 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6992);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8891);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:6993 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8892 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6994 */
+  /* parser/parser_prod.nit:8893 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38221,18 +46871,18 @@ void parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6995 */
+    /* parser/parser_prod.nit:8894 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6995);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8894);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos220] = 1;
+  init_table[itpos219] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AArrayExpr___replace_child[] = "parser_prod::AArrayExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AArrayExpr___replace_child[] = "parser_prod::AArrayExpr::(parser_nodes::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;
@@ -38240,7 +46890,7 @@ void parser___parser_prod___AArrayExpr___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 = 6999;
+  fra.me.line = 8898;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38252,11 +46902,11 @@ 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:7001 */
+  /* parser/parser_prod.nit:8900 */
   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, 7001);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8900);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38266,7 +46916,7 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7002 */
+    /* parser/parser_prod.nit:8901 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38281,28 +46931,363 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7003 */
+      /* parser/parser_prod.nit:8902 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7003);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8902);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7004 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8903 */
       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, 7004);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8903);
       }
-      /* parser/parser_prod.nit:7005 */
+      /* parser/parser_prod.nit:8904 */
       ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7007 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7007);
+      /* parser/parser_prod.nit:8906 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8906);
     }
-    /* parser/parser_prod.nit:7009 */
+    /* parser/parser_prod.nit:8908 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7011 */
+  /* parser/parser_prod.nit:8910 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(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:8911 */
+    REGB0 = TAG_Bool(fra.me.REG[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:8912 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8912);
+      }
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8913 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8913);
+      }
+      /* parser/parser_prod.nit:8914 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:8916 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:8918 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AArrayExpr___n_exprs__eq[] = "parser_prod::AArrayExpr::(parser_nodes::AArrayExpr::n_exprs=)";
+void parser___parser_prod___AArrayExpr___n_exprs__eq(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 = 8922;
+  fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___n_exprs__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:8924 */
+  ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8925 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::AArrayExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AArrayExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 8927;
+  fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___n_annotations__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:8929 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8930 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:8931 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8931);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AArrayExpr::(parser_nodes::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[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 = 8936;
+  fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___visit_all;
+  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:8936 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8938 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8938);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[2]);
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8939 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(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:8940 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8940);
+    }
+    CALL_parser___parser_nodes___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___ASelfExpr___empty_init[] = "parser_prod::ASelfExpr::empty_init";
+void parser___parser_prod___ASelfExpr___empty_init(val_t p0, int* init_table){
+  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASelfExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  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 = 8945;
+  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[itpos220] = 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, val_t p2, int* init_table){
+  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASelfExpr].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[itpos221]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 8947;
+  fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___init_aselfexpr;
+  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:8947 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:8952 */
+  CALL_parser___parser_prod___ASelfExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:8953 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8953);
+  }
+  ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8954 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8954);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:8955 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:8956 */
+  REGB0 = TAG_Bool(fra.me.REG[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:8957 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8957);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos221] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ASelfExpr___replace_child[] = "parser_prod::ASelfExpr::(parser_nodes::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;
+  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 = 8961;
+  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;
+  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:8963 */
+  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(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:8964 */
+    REGB0 = TAG_Bool(fra.me.REG[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:8965 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8965);
+      }
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8966 */
+      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, 8966);
+      }
+      /* parser/parser_prod.nit:8967 */
+      ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:8969 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8969);
+    }
+    /* parser/parser_prod.nit:8971 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:8973 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -38317,7 +47302,7 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7012 */
+    /* parser/parser_prod.nit:8974 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38332,301 +47317,103 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7013 */
+      /* parser/parser_prod.nit:8975 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7013);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8975);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7014 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:8976 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7014);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8976);
       }
-      /* parser/parser_prod.nit:7015 */
+      /* parser/parser_prod.nit:8977 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7017 */
+      /* parser/parser_prod.nit:8979 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7019 */
+    /* parser/parser_prod.nit:8981 */
     goto label1;
   }
   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[3];} fra;
+static const char LOCATE_parser___parser_prod___ASelfExpr___n_kwself__eq[] = "parser_prod::ASelfExpr::(parser_nodes::ASelfExpr::n_kwself=)";
+void parser___parser_prod___ASelfExpr___n_kwself__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 7023;
-  fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___visit_all;
+  fra.me.line = 8985;
+  fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___n_kwself__eq;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7023 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7025 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[2])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7025);
-  }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(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:7026 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(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));
+  /* parser/parser_prod.nit:8987 */
+  ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8988 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7027 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7027);
-    }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8988);
   }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___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;
-  val_t tmp;
-  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 = 7032;
-  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, val_t p2, 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[3];} fra;
+static const char LOCATE_parser___parser_prod___ASelfExpr___n_annotations__eq[] = "parser_prod::ASelfExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ASelfExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t REGB1;
   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 = 7034;
-  fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___init_aselfexpr;
+  fra.me.line = 8990;
+  fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___n_annotations__eq;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[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:7034 */
-  fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7039 */
-  CALL_parser___parser_prod___ASelfExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:7040 */
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7040);
-  }
-  ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7041 */
+  /* parser/parser_prod.nit:8992 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:8993 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7041);
-  }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7042 */
-  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7043 */
-  REGB0 = TAG_Bool(fra.me.REG[2]==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(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:7044 */
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7044);
-    }
-    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[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;
-  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 = 7048;
-  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;
-  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:7050 */
-  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(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:7051 */
-    REGB0 = TAG_Bool(fra.me.REG[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:7052 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7052);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7053 */
-      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, 7053);
-      }
-      /* parser/parser_prod.nit:7054 */
-      ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* parser/parser_prod.nit:7056 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7056);
-    }
-    /* parser/parser_prod.nit:7058 */
-    goto label1;
-  }
-  /* parser/parser_prod.nit:7060 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(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:7061 */
-    REGB0 = TAG_Bool(fra.me.REG[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));
+    /* parser/parser_prod.nit:8994 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7062 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7062);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7063 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7063);
-      }
-      /* parser/parser_prod.nit:7064 */
-      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* parser/parser_prod.nit:7066 */
-      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8994);
     }
-    /* parser/parser_prod.nit:7068 */
-    goto label1;
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  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)";
+static const char LOCATE_parser___parser_prod___ASelfExpr___visit_all[] = "parser_prod::ASelfExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -38634,7 +47421,7 @@ void parser___parser_prod___ASelfExpr___visit_all(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 = 7072;
+  fra.me.line = 8999;
   fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38645,12 +47432,12 @@ void parser___parser_prod___ASelfExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7072 */
+  /* parser/parser_prod.nit:8999 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7074 */
+  /* parser/parser_prod.nit:9001 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASelfExpr____n_kwself(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:7075 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9002 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -38666,27 +47453,27 @@ void parser___parser_prod___ASelfExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7076 */
+    /* parser/parser_prod.nit:9003 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7076);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9003);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AImplicitSelfExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos223]) return;
+  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 = 7081;
+  fra.me.line = 9008;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -38694,37 +47481,37 @@ void parser___parser_prod___AImplicitSelfExpr___empty_init(val_t p0, int* init_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos223] = 1;
+  init_table[itpos222] = 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;
+  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AImplicitSelfExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos224]) return;
+  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 = 7083;
+  fra.me.line = 9010;
   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:7085 */
+  /* parser/parser_prod.nit:9012 */
   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;
+  init_table[itpos223] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AImplicitSelfExpr___replace_child[] = "parser_prod::AImplicitSelfExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AImplicitSelfExpr___replace_child[] = "parser_prod::AImplicitSelfExpr::(parser_nodes::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 = 7088;
+  fra.me.line = 9015;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -38738,13 +47525,13 @@ 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)";
+static const char LOCATE_parser___parser_prod___AImplicitSelfExpr___visit_all[] = "parser_prod::AImplicitSelfExpr::(parser_nodes::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 = 7092;
+  fra.me.line = 9021;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38758,13 +47545,13 @@ void parser___parser_prod___AImplicitSelfExpr___visit_all(val_t p0, val_t p1){
 }
 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;
+  int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATrueExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos225]) return;
+  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 = 7097;
+  fra.me.line = 9026;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -38772,20 +47559,20 @@ void parser___parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos225] = 1;
+  init_table[itpos224] = 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, val_t p2, int* init_table){
-  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATrueExpr].i;
+  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATrueExpr].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[itpos226]) return;
+  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 = 7099;
+  fra.me.line = 9028;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___init_atrueexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38797,26 +47584,26 @@ void parser___parser_prod___ATrueExpr___init_atrueexpr(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:7099 */
+  /* parser/parser_prod.nit:9028 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7104 */
+  /* parser/parser_prod.nit:9033 */
   CALL_parser___parser_prod___ATrueExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:7105 */
+  /* parser/parser_prod.nit:9034 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=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, 9034);
   }
   ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7106 */
+  /* parser/parser_prod.nit:9035 */
   REGB0 = TAG_Bool(fra.me.REG[1]==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, 9035);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7107 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9036 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7108 */
+  /* parser/parser_prod.nit:9037 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38831,18 +47618,18 @@ void parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7109 */
+    /* parser/parser_prod.nit:9038 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7109);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9038);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos226] = 1;
+  init_table[itpos225] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ATrueExpr___replace_child[] = "parser_prod::ATrueExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ATrueExpr___replace_child[] = "parser_prod::ATrueExpr::(parser_nodes::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;
@@ -38850,7 +47637,7 @@ 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 = 7113;
+  fra.me.line = 9042;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38862,11 +47649,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:7115 */
+  /* parser/parser_prod.nit:9044 */
   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, 7115);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 9044);
   }
   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]));
@@ -38876,7 +47663,7 @@ 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:7116 */
+    /* parser/parser_prod.nit:9045 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38891,28 +47678,28 @@ 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:7117 */
+      /* parser/parser_prod.nit:9046 */
       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, 9046);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7118 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9047 */
       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, 7118);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9047);
       }
-      /* parser/parser_prod.nit:7119 */
+      /* parser/parser_prod.nit:9048 */
       ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(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:9050 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9050);
     }
-    /* parser/parser_prod.nit:7123 */
+    /* parser/parser_prod.nit:9052 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7125 */
+  /* parser/parser_prod.nit:9054 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -38927,7 +47714,7 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7126 */
+    /* parser/parser_prod.nit:9055 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38942,32 +47729,98 @@ 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:7127 */
+      /* parser/parser_prod.nit:9056 */
       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, 9056);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7128 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9057 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7128);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9057);
       }
-      /* parser/parser_prod.nit:7129 */
+      /* parser/parser_prod.nit:9058 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7131 */
+      /* parser/parser_prod.nit:9060 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7133 */
+    /* parser/parser_prod.nit:9062 */
     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)";
+static const char LOCATE_parser___parser_prod___ATrueExpr___n_kwtrue__eq[] = "parser_prod::ATrueExpr::(parser_nodes::ATrueExpr::n_kwtrue=)";
+void parser___parser_prod___ATrueExpr___n_kwtrue__eq(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 = 9066;
+  fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___n_kwtrue__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:9068 */
+  ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9069 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ATrueExpr___n_annotations__eq[] = "parser_prod::ATrueExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ATrueExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 9071;
+  fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___n_annotations__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:9073 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9074 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:9075 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9075);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___ATrueExpr___visit_all[] = "parser_prod::ATrueExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -38975,7 +47828,7 @@ void parser___parser_prod___ATrueExpr___visit_all(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 = 7137;
+  fra.me.line = 9080;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38986,17 +47839,17 @@ void parser___parser_prod___ATrueExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7137 */
+  /* parser/parser_prod.nit:9080 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7139 */
+  /* parser/parser_prod.nit:9082 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 7139);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 9082);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(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:7140 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9083 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -39012,27 +47865,27 @@ void parser___parser_prod___ATrueExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7141 */
+    /* parser/parser_prod.nit:9084 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7141);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9084);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFalseExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos227]) return;
+  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 = 7146;
+  fra.me.line = 9089;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -39040,20 +47893,20 @@ void parser___parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos227] = 1;
+  init_table[itpos226] = 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, val_t p2, int* init_table){
-  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFalseExpr].i;
+  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFalseExpr].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[itpos228]) return;
+  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 = 7148;
+  fra.me.line = 9091;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___init_afalseexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39065,26 +47918,26 @@ void parser___parser_prod___AFalseExpr___init_afalseexpr(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:7148 */
+  /* parser/parser_prod.nit:9091 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7153 */
+  /* parser/parser_prod.nit:9096 */
   CALL_parser___parser_prod___AFalseExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:7154 */
+  /* parser/parser_prod.nit:9097 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7154);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9097);
   }
   ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7155 */
+  /* parser/parser_prod.nit:9098 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7155);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9098);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7156 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9099 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7157 */
+  /* parser/parser_prod.nit:9100 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39099,18 +47952,18 @@ void parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7158 */
+    /* parser/parser_prod.nit:9101 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7158);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9101);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos228] = 1;
+  init_table[itpos227] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AFalseExpr___replace_child[] = "parser_prod::AFalseExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AFalseExpr___replace_child[] = "parser_prod::AFalseExpr::(parser_nodes::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;
@@ -39118,7 +47971,7 @@ 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 = 7162;
+  fra.me.line = 9105;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39130,11 +47983,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:7164 */
+  /* parser/parser_prod.nit:9107 */
   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, 7164);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 9107);
   }
   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]));
@@ -39144,7 +47997,7 @@ 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:7165 */
+    /* parser/parser_prod.nit:9108 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39159,28 +48012,28 @@ 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:7166 */
+      /* parser/parser_prod.nit:9109 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7166);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9109);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7167 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9110 */
       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, 7167);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9110);
       }
-      /* parser/parser_prod.nit:7168 */
+      /* parser/parser_prod.nit:9111 */
       ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7170 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7170);
+      /* parser/parser_prod.nit:9113 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9113);
     }
-    /* parser/parser_prod.nit:7172 */
+    /* parser/parser_prod.nit:9115 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7174 */
+  /* parser/parser_prod.nit:9117 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -39195,7 +48048,7 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7175 */
+    /* parser/parser_prod.nit:9118 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39210,32 +48063,98 @@ 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:7176 */
+      /* parser/parser_prod.nit:9119 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7176);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9119);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7177 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9120 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7177);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9120);
       }
-      /* parser/parser_prod.nit:7178 */
+      /* parser/parser_prod.nit:9121 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7180 */
+      /* parser/parser_prod.nit:9123 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7182 */
+    /* parser/parser_prod.nit:9125 */
     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)";
+static const char LOCATE_parser___parser_prod___AFalseExpr___n_kwfalse__eq[] = "parser_prod::AFalseExpr::(parser_nodes::AFalseExpr::n_kwfalse=)";
+void parser___parser_prod___AFalseExpr___n_kwfalse__eq(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 = 9129;
+  fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___n_kwfalse__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:9131 */
+  ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9132 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::AFalseExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AFalseExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 9134;
+  fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___n_annotations__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:9136 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9137 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:9138 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9138);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AFalseExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -39243,7 +48162,7 @@ void parser___parser_prod___AFalseExpr___visit_all(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 = 7186;
+  fra.me.line = 9143;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39254,17 +48173,17 @@ void parser___parser_prod___AFalseExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7186 */
+  /* parser/parser_prod.nit:9143 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7188 */
+  /* parser/parser_prod.nit:9145 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 7188);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 9145);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(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:7189 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9146 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -39280,27 +48199,27 @@ void parser___parser_prod___AFalseExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7190 */
+    /* parser/parser_prod.nit:9147 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7190);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9147);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANullExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos229]) return;
+  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 = 7195;
+  fra.me.line = 9152;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -39308,20 +48227,20 @@ void parser___parser_prod___ANullExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos229] = 1;
+  init_table[itpos228] = 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, val_t p2, int* init_table){
-  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANullExpr].i;
+  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANullExpr].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[itpos230]) return;
+  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 = 7197;
+  fra.me.line = 9154;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___init_anullexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39333,26 +48252,26 @@ void parser___parser_prod___ANullExpr___init_anullexpr(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:7197 */
+  /* parser/parser_prod.nit:9154 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7202 */
+  /* parser/parser_prod.nit:9159 */
   CALL_parser___parser_prod___ANullExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:7203 */
+  /* parser/parser_prod.nit:9160 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7203);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9160);
   }
   ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7204 */
+  /* parser/parser_prod.nit:9161 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7204);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9161);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7205 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9162 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7206 */
+  /* parser/parser_prod.nit:9163 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39367,18 +48286,18 @@ void parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7207 */
+    /* parser/parser_prod.nit:9164 */
     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, 9164);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos230] = 1;
+  init_table[itpos229] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ANullExpr___replace_child[] = "parser_prod::ANullExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ANullExpr___replace_child[] = "parser_prod::ANullExpr::(parser_nodes::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;
@@ -39386,7 +48305,7 @@ 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 = 7211;
+  fra.me.line = 9168;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39398,11 +48317,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:7213 */
+  /* parser/parser_prod.nit:9170 */
   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, 7213);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 9170);
   }
   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]));
@@ -39412,7 +48331,7 @@ 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:7214 */
+    /* parser/parser_prod.nit:9171 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39427,28 +48346,28 @@ 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:7215 */
+      /* parser/parser_prod.nit:9172 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7215);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9172);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7216 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9173 */
       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, 7216);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9173);
       }
-      /* parser/parser_prod.nit:7217 */
+      /* parser/parser_prod.nit:9174 */
       ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7219 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7219);
+      /* parser/parser_prod.nit:9176 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9176);
     }
-    /* parser/parser_prod.nit:7221 */
+    /* parser/parser_prod.nit:9178 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7223 */
+  /* parser/parser_prod.nit:9180 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -39463,7 +48382,7 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7224 */
+    /* parser/parser_prod.nit:9181 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39478,32 +48397,98 @@ 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:7225 */
+      /* parser/parser_prod.nit:9182 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7225);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9182);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7226 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9183 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7226);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9183);
       }
-      /* parser/parser_prod.nit:7227 */
+      /* parser/parser_prod.nit:9184 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7229 */
+      /* parser/parser_prod.nit:9186 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7231 */
+    /* parser/parser_prod.nit:9188 */
     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)";
+static const char LOCATE_parser___parser_prod___ANullExpr___n_kwnull__eq[] = "parser_prod::ANullExpr::(parser_nodes::ANullExpr::n_kwnull=)";
+void parser___parser_prod___ANullExpr___n_kwnull__eq(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 = 9192;
+  fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___n_kwnull__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:9194 */
+  ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9195 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::ANullExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ANullExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 9197;
+  fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___n_annotations__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:9199 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9200 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:9201 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9201);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ANullExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -39511,7 +48496,7 @@ void parser___parser_prod___ANullExpr___visit_all(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 = 7235;
+  fra.me.line = 9206;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39522,17 +48507,17 @@ void parser___parser_prod___ANullExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7235 */
+  /* parser/parser_prod.nit:9206 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7237 */
+  /* parser/parser_prod.nit:9208 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7237);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 9208);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANullExpr____n_kwnull(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:7238 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9209 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -39548,27 +48533,27 @@ void parser___parser_prod___ANullExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7239 */
+    /* parser/parser_prod.nit:9210 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7239);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9210);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos231]) return;
+  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 = 7244;
+  fra.me.line = 9215;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -39576,20 +48561,20 @@ void parser___parser_prod___AIntExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos231] = 1;
+  init_table[itpos230] = 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, val_t p2, int* init_table){
-  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntExpr].i;
+  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntExpr].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[itpos232]) return;
+  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 = 7246;
+  fra.me.line = 9217;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___init_aintexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39601,26 +48586,26 @@ void parser___parser_prod___AIntExpr___init_aintexpr(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:7246 */
+  /* parser/parser_prod.nit:9217 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7251 */
+  /* parser/parser_prod.nit:9222 */
   CALL_parser___parser_prod___AIntExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:7252 */
+  /* parser/parser_prod.nit:9223 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7252);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9223);
   }
   ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7253 */
+  /* parser/parser_prod.nit:9224 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7253);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9224);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7254 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9225 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7255 */
+  /* parser/parser_prod.nit:9226 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39635,18 +48620,18 @@ void parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7256 */
+    /* parser/parser_prod.nit:9227 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7256);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9227);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos232] = 1;
+  init_table[itpos231] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AIntExpr___replace_child[] = "parser_prod::AIntExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AIntExpr___replace_child[] = "parser_prod::AIntExpr::(parser_nodes::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;
@@ -39654,7 +48639,7 @@ 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 = 7260;
+  fra.me.line = 9231;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39666,11 +48651,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:7262 */
+  /* parser/parser_prod.nit:9233 */
   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, 7262);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 9233);
   }
   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]));
@@ -39680,7 +48665,7 @@ 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:7263 */
+    /* parser/parser_prod.nit:9234 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39695,28 +48680,28 @@ 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:7264 */
+      /* parser/parser_prod.nit:9235 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 9235);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7265 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9236 */
       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, 7265);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9236);
       }
-      /* parser/parser_prod.nit:7266 */
+      /* parser/parser_prod.nit:9237 */
       ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7268 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7268);
+      /* parser/parser_prod.nit:9239 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9239);
     }
-    /* parser/parser_prod.nit:7270 */
+    /* parser/parser_prod.nit:9241 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7272 */
+  /* parser/parser_prod.nit:9243 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -39731,7 +48716,7 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7273 */
+    /* parser/parser_prod.nit:9244 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39746,32 +48731,98 @@ 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:7274 */
+      /* parser/parser_prod.nit:9245 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7274);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9245);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7275 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9246 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7275);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9246);
       }
-      /* parser/parser_prod.nit:7276 */
+      /* parser/parser_prod.nit:9247 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7278 */
+      /* parser/parser_prod.nit:9249 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7280 */
+    /* parser/parser_prod.nit:9251 */
     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)";
+static const char LOCATE_parser___parser_prod___AIntExpr___n_number__eq[] = "parser_prod::AIntExpr::(parser_nodes::AIntExpr::n_number=)";
+void parser___parser_prod___AIntExpr___n_number__eq(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 = 9255;
+  fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___n_number__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:9257 */
+  ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9258 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::AIntExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AIntExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 9260;
+  fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___n_annotations__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:9262 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9263 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:9264 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9264);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AIntExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -39779,7 +48830,7 @@ void parser___parser_prod___AIntExpr___visit_all(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 = 7284;
+  fra.me.line = 9269;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39790,17 +48841,17 @@ void parser___parser_prod___AIntExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7284 */
+  /* parser/parser_prod.nit:9269 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7286 */
+  /* parser/parser_prod.nit:9271 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 7286);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 9271);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIntExpr____n_number(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:7287 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9272 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -39816,27 +48867,27 @@ void parser___parser_prod___AIntExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7288 */
+    /* parser/parser_prod.nit:9273 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7288);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9273);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFloatExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos233]) return;
+  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 = 7293;
+  fra.me.line = 9278;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -39844,20 +48895,20 @@ void parser___parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos233] = 1;
+  init_table[itpos232] = 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, val_t p2, int* init_table){
-  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFloatExpr].i;
+  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFloatExpr].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[itpos234]) return;
+  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 = 7295;
+  fra.me.line = 9280;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___init_afloatexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39869,26 +48920,26 @@ void parser___parser_prod___AFloatExpr___init_afloatexpr(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:7295 */
+  /* parser/parser_prod.nit:9280 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7300 */
+  /* parser/parser_prod.nit:9285 */
   CALL_parser___parser_prod___AFloatExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:7301 */
+  /* parser/parser_prod.nit:9286 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=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, 9286);
   }
   ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7302 */
+  /* parser/parser_prod.nit:9287 */
   REGB0 = TAG_Bool(fra.me.REG[1]==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, 9287);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7303 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9288 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7304 */
+  /* parser/parser_prod.nit:9289 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39903,18 +48954,18 @@ void parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7305 */
+    /* parser/parser_prod.nit:9290 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7305);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9290);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos234] = 1;
+  init_table[itpos233] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AFloatExpr___replace_child[] = "parser_prod::AFloatExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AFloatExpr___replace_child[] = "parser_prod::AFloatExpr::(parser_nodes::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;
@@ -39922,7 +48973,7 @@ 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 = 7309;
+  fra.me.line = 9294;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39934,11 +48985,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:7311 */
+  /* parser/parser_prod.nit:9296 */
   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, 7311);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 9296);
   }
   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]));
@@ -39948,7 +48999,7 @@ 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:7312 */
+    /* parser/parser_prod.nit:9297 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39963,28 +49014,28 @@ 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:7313 */
+      /* parser/parser_prod.nit:9298 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7313);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9298);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7314 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9299 */
       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, 7314);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9299);
       }
-      /* parser/parser_prod.nit:7315 */
+      /* parser/parser_prod.nit:9300 */
       ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7317 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7317);
+      /* parser/parser_prod.nit:9302 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9302);
     }
-    /* parser/parser_prod.nit:7319 */
+    /* parser/parser_prod.nit:9304 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7321 */
+  /* parser/parser_prod.nit:9306 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -39999,7 +49050,7 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7322 */
+    /* parser/parser_prod.nit:9307 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40014,32 +49065,98 @@ 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:7323 */
+      /* parser/parser_prod.nit:9308 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7323);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9308);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7324 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9309 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7324);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9309);
       }
-      /* parser/parser_prod.nit:7325 */
+      /* parser/parser_prod.nit:9310 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7327 */
+      /* parser/parser_prod.nit:9312 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7329 */
+    /* parser/parser_prod.nit:9314 */
     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)";
+static const char LOCATE_parser___parser_prod___AFloatExpr___n_float__eq[] = "parser_prod::AFloatExpr::(parser_nodes::AFloatExpr::n_float=)";
+void parser___parser_prod___AFloatExpr___n_float__eq(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 = 9318;
+  fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___n_float__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:9320 */
+  ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9321 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::AFloatExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AFloatExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 9323;
+  fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___n_annotations__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:9325 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9326 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:9327 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9327);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AFloatExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -40047,7 +49164,7 @@ void parser___parser_prod___AFloatExpr___visit_all(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 = 7333;
+  fra.me.line = 9332;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40058,17 +49175,17 @@ void parser___parser_prod___AFloatExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7333 */
+  /* parser/parser_prod.nit:9332 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7335 */
+  /* parser/parser_prod.nit:9334 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 7335);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 9334);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFloatExpr____n_float(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:7336 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9335 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -40084,27 +49201,27 @@ void parser___parser_prod___AFloatExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7337 */
+    /* parser/parser_prod.nit:9336 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7337);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9336);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACharExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos235]) return;
+  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 = 7342;
+  fra.me.line = 9341;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -40112,20 +49229,20 @@ void parser___parser_prod___ACharExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos235] = 1;
+  init_table[itpos234] = 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, val_t p2, int* init_table){
-  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACharExpr].i;
+  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACharExpr].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[itpos236]) return;
+  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 = 7344;
+  fra.me.line = 9343;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___init_acharexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40137,26 +49254,26 @@ void parser___parser_prod___ACharExpr___init_acharexpr(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:7344 */
+  /* parser/parser_prod.nit:9343 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7349 */
+  /* parser/parser_prod.nit:9348 */
   CALL_parser___parser_prod___ACharExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:7350 */
+  /* parser/parser_prod.nit:9349 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7350);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9349);
   }
   ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7351 */
+  /* parser/parser_prod.nit:9350 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7351);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9350);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7352 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9351 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7353 */
+  /* parser/parser_prod.nit:9352 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40171,18 +49288,18 @@ void parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7354 */
+    /* parser/parser_prod.nit:9353 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7354);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9353);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos236] = 1;
+  init_table[itpos235] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ACharExpr___replace_child[] = "parser_prod::ACharExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ACharExpr___replace_child[] = "parser_prod::ACharExpr::(parser_nodes::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;
@@ -40190,7 +49307,7 @@ 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 = 7358;
+  fra.me.line = 9357;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40202,11 +49319,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:7360 */
+  /* parser/parser_prod.nit:9359 */
   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, 7360);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 9359);
   }
   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]));
@@ -40216,7 +49333,7 @@ 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:7361 */
+    /* parser/parser_prod.nit:9360 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40231,28 +49348,28 @@ 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:7362 */
+      /* parser/parser_prod.nit:9361 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7362);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9361);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7363 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9362 */
       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, 7363);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9362);
       }
-      /* parser/parser_prod.nit:7364 */
+      /* parser/parser_prod.nit:9363 */
       ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7366 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7366);
+      /* parser/parser_prod.nit:9365 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9365);
     }
-    /* parser/parser_prod.nit:7368 */
+    /* parser/parser_prod.nit:9367 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7370 */
+  /* parser/parser_prod.nit:9369 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -40267,7 +49384,7 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7371 */
+    /* parser/parser_prod.nit:9370 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40282,32 +49399,98 @@ 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:7372 */
+      /* parser/parser_prod.nit:9371 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7372);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9371);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7373 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9372 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7373);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9372);
       }
-      /* parser/parser_prod.nit:7374 */
+      /* parser/parser_prod.nit:9373 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7376 */
+      /* parser/parser_prod.nit:9375 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7378 */
+    /* parser/parser_prod.nit:9377 */
     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)";
+static const char LOCATE_parser___parser_prod___ACharExpr___n_char__eq[] = "parser_prod::ACharExpr::(parser_nodes::ACharExpr::n_char=)";
+void parser___parser_prod___ACharExpr___n_char__eq(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 = 9381;
+  fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___n_char__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:9383 */
+  ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9384 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::ACharExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ACharExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 9386;
+  fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___n_annotations__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:9388 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9389 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:9390 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9390);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ACharExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -40315,7 +49498,7 @@ void parser___parser_prod___ACharExpr___visit_all(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 = 7382;
+  fra.me.line = 9395;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40326,17 +49509,17 @@ void parser___parser_prod___ACharExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7382 */
+  /* parser/parser_prod.nit:9395 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7384 */
+  /* parser/parser_prod.nit:9397 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 7384);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 9397);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACharExpr____n_char(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:7385 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9398 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -40352,27 +49535,27 @@ void parser___parser_prod___ACharExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7386 */
+    /* parser/parser_prod.nit:9399 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7386);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9399);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos237]) return;
+  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 = 7391;
+  fra.me.line = 9404;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -40380,20 +49563,20 @@ void parser___parser_prod___AStringExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos237] = 1;
+  init_table[itpos236] = 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, val_t p2, int* init_table){
-  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStringExpr].i;
+  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStringExpr].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[itpos238]) return;
+  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 = 7393;
+  fra.me.line = 9406;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___init_astringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40405,26 +49588,26 @@ void parser___parser_prod___AStringExpr___init_astringexpr(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:7393 */
+  /* parser/parser_prod.nit:9406 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7398 */
+  /* parser/parser_prod.nit:9411 */
   CALL_parser___parser_prod___AStringExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:7399 */
+  /* parser/parser_prod.nit:9412 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7399);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9412);
   }
   ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7400 */
+  /* parser/parser_prod.nit:9413 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7400);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9413);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7401 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9414 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7402 */
+  /* parser/parser_prod.nit:9415 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40439,18 +49622,18 @@ void parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7403 */
+    /* parser/parser_prod.nit:9416 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7403);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9416);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos238] = 1;
+  init_table[itpos237] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AStringExpr___replace_child[] = "parser_prod::AStringExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AStringExpr___replace_child[] = "parser_prod::AStringExpr::(parser_nodes::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;
@@ -40458,7 +49641,7 @@ 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 = 7407;
+  fra.me.line = 9420;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40470,11 +49653,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:7409 */
+  /* parser/parser_prod.nit:9422 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7409);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 9422);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40484,7 +49667,7 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7410 */
+    /* parser/parser_prod.nit:9423 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40499,28 +49682,28 @@ 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:7411 */
+      /* parser/parser_prod.nit:9424 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7411);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9424);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7412 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9425 */
       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, 7412);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9425);
       }
-      /* parser/parser_prod.nit:7413 */
+      /* parser/parser_prod.nit:9426 */
       ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7415 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7415);
+      /* parser/parser_prod.nit:9428 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9428);
     }
-    /* parser/parser_prod.nit:7417 */
+    /* parser/parser_prod.nit:9430 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7419 */
+  /* parser/parser_prod.nit:9432 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -40535,7 +49718,7 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7420 */
+    /* parser/parser_prod.nit:9433 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40550,32 +49733,98 @@ 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:7421 */
+      /* parser/parser_prod.nit:9434 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7421);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9434);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7422 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9435 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7422);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9435);
       }
-      /* parser/parser_prod.nit:7423 */
+      /* parser/parser_prod.nit:9436 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7425 */
+      /* parser/parser_prod.nit:9438 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7427 */
+    /* parser/parser_prod.nit:9440 */
     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)";
+static const char LOCATE_parser___parser_prod___AStringExpr___n_string__eq[] = "parser_prod::AStringExpr::(parser_nodes::AStringFormExpr::n_string=)";
+void parser___parser_prod___AStringExpr___n_string__eq(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 = 9444;
+  fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___n_string__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:9446 */
+  ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9447 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_annotations__eq[] = "parser_prod::AStringExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AStringExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 9449;
+  fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___n_annotations__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:9451 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9452 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:9453 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9453);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AStringExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -40583,7 +49832,7 @@ void parser___parser_prod___AStringExpr___visit_all(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 = 7431;
+  fra.me.line = 9458;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40594,17 +49843,17 @@ void parser___parser_prod___AStringExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7431 */
+  /* parser/parser_prod.nit:9458 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7433 */
+  /* parser/parser_prod.nit:9460 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7433);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 9460);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(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:7434 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9461 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -40620,27 +49869,27 @@ void parser___parser_prod___AStringExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7435 */
+    /* parser/parser_prod.nit:9462 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7435);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9462);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStartStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos239]) return;
+  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 = 7440;
+  fra.me.line = 9467;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -40648,19 +49897,19 @@ void parser___parser_prod___AStartStringExpr___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos239] = 1;
+  init_table[itpos238] = 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;
+  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStartStringExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos240]) return;
+  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 = 7442;
+  fra.me.line = 9469;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___init_astartstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40670,28 +49919,28 @@ void parser___parser_prod___AStartStringExpr___init_astartstringexpr(val_t p0, v
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7442 */
+  /* parser/parser_prod.nit:9469 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7446 */
+  /* parser/parser_prod.nit:9473 */
   CALL_parser___parser_prod___AStartStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7447 */
+  /* parser/parser_prod.nit:9474 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7447);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9474);
   }
   ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7448 */
+  /* parser/parser_prod.nit:9475 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7448);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9475);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos239] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AStartStringExpr___replace_child[] = "parser_prod::AStartStringExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AStartStringExpr___replace_child[] = "parser_prod::AStartStringExpr::(parser_nodes::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;
@@ -40699,7 +49948,7 @@ 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 = 7451;
+  fra.me.line = 9478;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40711,11 +49960,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:7453 */
+  /* parser/parser_prod.nit:9480 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7453);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 9480);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40725,7 +49974,7 @@ void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7454 */
+    /* parser/parser_prod.nit:9481 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40740,39 +49989,61 @@ 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:7455 */
+      /* parser/parser_prod.nit:9482 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7455);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9482);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7456 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9483 */
       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, 7456);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9483);
       }
-      /* parser/parser_prod.nit:7457 */
+      /* parser/parser_prod.nit:9484 */
       ATTR_parser___parser_nodes___AStringFormExpr____n_string(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:9486 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9486);
     }
-    /* parser/parser_prod.nit:7461 */
+    /* parser/parser_prod.nit:9488 */
     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)";
+static const char LOCATE_parser___parser_prod___AStartStringExpr___n_string__eq[] = "parser_prod::AStartStringExpr::(parser_nodes::AStringFormExpr::n_string=)";
+void parser___parser_prod___AStartStringExpr___n_string__eq(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 = 9492;
+  fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___n_string__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:9494 */
+  ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9495 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AStartStringExpr::(parser_nodes::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 = 7465;
+  fra.me.line = 9499;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40781,26 +50052,26 @@ void parser___parser_prod___AStartStringExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7467 */
+  /* parser/parser_prod.nit:9501 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7467);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 9501);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStringFormExpr____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]);
+  CALL_parser___parser_nodes___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;
+  int itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMidStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos241]) return;
+  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 = 7471;
+  fra.me.line = 9505;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -40808,19 +50079,19 @@ void parser___parser_prod___AMidStringExpr___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos241] = 1;
+  init_table[itpos240] = 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;
+  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMidStringExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos242]) return;
+  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 = 7473;
+  fra.me.line = 9507;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___init_amidstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40830,28 +50101,28 @@ void parser___parser_prod___AMidStringExpr___init_amidstringexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7473 */
+  /* parser/parser_prod.nit:9507 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7477 */
+  /* parser/parser_prod.nit:9511 */
   CALL_parser___parser_prod___AMidStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7478 */
+  /* parser/parser_prod.nit:9512 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7478);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9512);
   }
   ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7479 */
+  /* parser/parser_prod.nit:9513 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7479);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9513);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos241] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AMidStringExpr___replace_child[] = "parser_prod::AMidStringExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AMidStringExpr___replace_child[] = "parser_prod::AMidStringExpr::(parser_nodes::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;
@@ -40859,7 +50130,7 @@ 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 = 7482;
+  fra.me.line = 9516;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40871,11 +50142,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:7484 */
+  /* parser/parser_prod.nit:9518 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7484);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 9518);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40885,7 +50156,7 @@ void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7485 */
+    /* parser/parser_prod.nit:9519 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40900,39 +50171,61 @@ 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:7486 */
+      /* parser/parser_prod.nit:9520 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7486);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9520);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7487 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9521 */
       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, 7487);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9521);
       }
-      /* parser/parser_prod.nit:7488 */
+      /* parser/parser_prod.nit:9522 */
       ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7490 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7490);
+      /* parser/parser_prod.nit:9524 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9524);
     }
-    /* parser/parser_prod.nit:7492 */
+    /* parser/parser_prod.nit:9526 */
     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)";
+static const char LOCATE_parser___parser_prod___AMidStringExpr___n_string__eq[] = "parser_prod::AMidStringExpr::(parser_nodes::AStringFormExpr::n_string=)";
+void parser___parser_prod___AMidStringExpr___n_string__eq(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 = 9530;
+  fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___n_string__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:9532 */
+  ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9533 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AMidStringExpr::(parser_nodes::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 = 7496;
+  fra.me.line = 9537;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40941,26 +50234,26 @@ void parser___parser_prod___AMidStringExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7498 */
+  /* parser/parser_prod.nit:9539 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7498);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 9539);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStringFormExpr____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]);
+  CALL_parser___parser_nodes___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;
+  int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEndStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos243]) return;
+  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 = 7502;
+  fra.me.line = 9543;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -40968,19 +50261,19 @@ void parser___parser_prod___AEndStringExpr___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos243] = 1;
+  init_table[itpos242] = 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;
+  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AEndStringExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos244]) return;
+  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 = 7504;
+  fra.me.line = 9545;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___init_aendstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40990,28 +50283,28 @@ void parser___parser_prod___AEndStringExpr___init_aendstringexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7504 */
+  /* parser/parser_prod.nit:9545 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7508 */
+  /* parser/parser_prod.nit:9549 */
   CALL_parser___parser_prod___AEndStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7509 */
+  /* parser/parser_prod.nit:9550 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7509);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9550);
   }
   ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7510 */
+  /* parser/parser_prod.nit:9551 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7510);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9551);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos243] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AEndStringExpr___replace_child[] = "parser_prod::AEndStringExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AEndStringExpr___replace_child[] = "parser_prod::AEndStringExpr::(parser_nodes::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;
@@ -41019,7 +50312,7 @@ 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 = 7513;
+  fra.me.line = 9554;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41031,11 +50324,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:7515 */
+  /* parser/parser_prod.nit:9556 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7515);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 9556);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -41045,7 +50338,7 @@ void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7516 */
+    /* parser/parser_prod.nit:9557 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41060,39 +50353,61 @@ 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:7517 */
+      /* parser/parser_prod.nit:9558 */
       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, 9558);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7518 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9559 */
       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, 7518);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9559);
       }
-      /* parser/parser_prod.nit:7519 */
+      /* parser/parser_prod.nit:9560 */
       ATTR_parser___parser_nodes___AStringFormExpr____n_string(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:9562 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9562);
     }
-    /* parser/parser_prod.nit:7523 */
+    /* parser/parser_prod.nit:9564 */
     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)";
+static const char LOCATE_parser___parser_prod___AEndStringExpr___n_string__eq[] = "parser_prod::AEndStringExpr::(parser_nodes::AStringFormExpr::n_string=)";
+void parser___parser_prod___AEndStringExpr___n_string__eq(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 = 9568;
+  fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___n_string__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:9570 */
+  ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9571 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AEndStringExpr::(parser_nodes::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 = 7527;
+  fra.me.line = 9575;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41101,26 +50416,26 @@ void parser___parser_prod___AEndStringExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7529 */
+  /* parser/parser_prod.nit:9577 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7529);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 9577);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStringFormExpr____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]);
+  CALL_parser___parser_nodes___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;
+  int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperstringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos245]) return;
+  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 = 7533;
+  fra.me.line = 9581;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -41128,20 +50443,20 @@ void parser___parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos245] = 1;
+  init_table[itpos244] = 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, val_t p2, int* init_table){
-  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperstringExpr].i;
+  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperstringExpr].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[itpos246]) return;
+  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 = 7535;
+  fra.me.line = 9583;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -41152,12 +50467,12 @@ void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7540 */
+  /* parser/parser_prod.nit:9588 */
   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));
-  /* parser/parser_prod.nit:7546 */
+  /* parser/parser_prod.nit:9594 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7547 */
+  /* parser/parser_prod.nit:9595 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41172,15 +50487,15 @@ void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7548 */
+    /* parser/parser_prod.nit:9596 */
     REGB0 = TAG_Bool(fra.me.REG[2]==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, 9596);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos246] = 1;
+  init_table[itpos245] = 1;
   return;
 }
   void OC_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -41188,7 +50503,7 @@ 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:7541 */
+    /* parser/parser_prod.nit:9589 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -41202,26 +50517,26 @@ void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, v
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7542 */
+    /* parser/parser_prod.nit:9590 */
     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, 7542);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9590);
     }
-    /* parser/parser_prod.nit:7543 */
+    /* parser/parser_prod.nit:9591 */
     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, 7543);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 9591);
     }
     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:7544 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:9592 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___ASuperstringExpr___replace_child[] = "parser_prod::ASuperstringExpr::(parser_nodes::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;
@@ -41232,7 +50547,7 @@ 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 = 7552;
+  fra.me.line = 9600;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41244,50 +50559,44 @@ 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:7554 */
+  /* parser/parser_prod.nit:9602 */
   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, 7554);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 9602);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:7554 */
+      /* parser/parser_prod.nit:9602 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:7555 */
+      /* parser/parser_prod.nit:9603 */
       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, 7555);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 9603);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:7556 */
+        /* parser/parser_prod.nit:9604 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -41302,52 +50611,52 @@ 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:7557 */
+          /* parser/parser_prod.nit:9605 */
           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, 7557);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9605);
           }
-          /* parser/parser_prod.nit:7558 */
+          /* parser/parser_prod.nit:9606 */
           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, 7558);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 9606);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____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:7559 */
+          /* parser/parser_prod.nit:9607 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7559);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9607);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:7561 */
+          /* parser/parser_prod.nit:9609 */
           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, 7561);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 9609);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____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:7563 */
+        /* parser/parser_prod.nit:9611 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:7566 */
+  /* parser/parser_prod.nit:9614 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -41362,7 +50671,7 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7567 */
+    /* parser/parser_prod.nit:9615 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41377,32 +50686,76 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7568 */
+      /* parser/parser_prod.nit:9616 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7568);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9616);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7569 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9617 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7569);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9617);
       }
-      /* parser/parser_prod.nit:7570 */
+      /* parser/parser_prod.nit:9618 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7572 */
+      /* parser/parser_prod.nit:9620 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7574 */
+    /* parser/parser_prod.nit:9622 */
     goto label1;
   }
   label1: while(0);
   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)";
+static const char LOCATE_parser___parser_prod___ASuperstringExpr___n_annotations__eq[] = "parser_prod::ASuperstringExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___ASuperstringExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 9626;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___n_annotations__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:9628 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9629 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:9630 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9630);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ASuperstringExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -41410,7 +50763,7 @@ void parser___parser_prod___ASuperstringExpr___visit_all(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 = 7578;
+  fra.me.line = 9635;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41421,17 +50774,17 @@ void parser___parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7578 */
+  /* parser/parser_prod.nit:9635 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7580 */
+  /* parser/parser_prod.nit:9637 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7580);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 9637);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(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___ASuperstringExpr___visit_all_1));
-  /* parser/parser_prod.nit:7583 */
+  /* parser/parser_prod.nit:9640 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -41447,14 +50800,14 @@ void parser___parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7584 */
+    /* parser/parser_prod.nit:9641 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7584);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9641);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -41475,20 +50828,20 @@ void parser___parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7581 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:9638 */
+    CALL_parser___parser_nodes___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;
+  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos247]) return;
+  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 = 7589;
+  fra.me.line = 9646;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -41496,20 +50849,20 @@ void parser___parser_prod___AParExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos247] = 1;
+  init_table[itpos246] = 1;
   return;
 }
 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, val_t p4, int* init_table){
-  int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParExpr].i;
+  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos248]) return;
+  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 = 7591;
+  fra.me.line = 9648;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___init_aparexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -41525,52 +50878,52 @@ void parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:7591 */
+  /* parser/parser_prod.nit:9648 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7598 */
+  /* parser/parser_prod.nit:9655 */
   CALL_parser___parser_prod___AParExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:7599 */
+  /* parser/parser_prod.nit:9656 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7599);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9656);
   }
   ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7600 */
+  /* parser/parser_prod.nit:9657 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7600);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9657);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:7601 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:9658 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7601);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9658);
   }
   ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7602 */
+  /* parser/parser_prod.nit:9659 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7602);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9659);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:7603 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:9660 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7603);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9660);
   }
   ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7604 */
+  /* parser/parser_prod.nit:9661 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7604);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9661);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:7605 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:9662 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:7606 */
+  /* parser/parser_prod.nit:9663 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41585,18 +50938,18 @@ void parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7607 */
+    /* parser/parser_prod.nit:9664 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7607);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9664);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos248] = 1;
+  init_table[itpos247] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AParExpr___replace_child[] = "parser_prod::AParExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AParExpr___replace_child[] = "parser_prod::AParExpr::(parser_nodes::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;
@@ -41604,7 +50957,7 @@ void parser___parser_prod___AParExpr___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 = 7611;
+  fra.me.line = 9668;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41616,11 +50969,11 @@ void parser___parser_prod___AParExpr___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:7613 */
+  /* parser/parser_prod.nit:9670 */
   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_opar", LOCATE_parser___parser_prod, 7613);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 9670);
   }
   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]));
@@ -41630,7 +50983,7 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7614 */
+    /* parser/parser_prod.nit:9671 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41645,32 +50998,32 @@ void parser___parser_prod___AParExpr___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:7615 */
+      /* parser/parser_prod.nit:9672 */
       REGB0 = TAG_Bool(fra.me.REG[2]==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, 9672);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7616 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9673 */
       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, 7616);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9673);
       }
-      /* parser/parser_prod.nit:7617 */
+      /* parser/parser_prod.nit:9674 */
       ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7619 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7619);
+      /* parser/parser_prod.nit:9676 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9676);
     }
-    /* parser/parser_prod.nit:7621 */
+    /* parser/parser_prod.nit:9678 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7623 */
+  /* parser/parser_prod.nit:9680 */
   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, 7623);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9680);
   }
   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]));
@@ -41680,7 +51033,7 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7624 */
+    /* parser/parser_prod.nit:9681 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41695,32 +51048,32 @@ void parser___parser_prod___AParExpr___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:7625 */
+      /* parser/parser_prod.nit:9682 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7625);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9682);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7626 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9683 */
       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, 7626);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9683);
       }
-      /* parser/parser_prod.nit:7627 */
+      /* parser/parser_prod.nit:9684 */
       ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7629 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7629);
+      /* parser/parser_prod.nit:9686 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9686);
     }
-    /* parser/parser_prod.nit:7631 */
+    /* parser/parser_prod.nit:9688 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7633 */
+  /* parser/parser_prod.nit:9690 */
   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_cpar", LOCATE_parser___parser_prod, 7633);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 9690);
   }
   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]));
@@ -41730,7 +51083,7 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7634 */
+    /* parser/parser_prod.nit:9691 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41745,28 +51098,28 @@ void parser___parser_prod___AParExpr___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:7635 */
+      /* parser/parser_prod.nit:9692 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7635);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9692);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7636 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9693 */
       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, 7636);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9693);
       }
-      /* parser/parser_prod.nit:7637 */
+      /* parser/parser_prod.nit:9694 */
       ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7639 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7639);
+      /* parser/parser_prod.nit:9696 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9696);
     }
-    /* parser/parser_prod.nit:7641 */
+    /* parser/parser_prod.nit:9698 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7643 */
+  /* parser/parser_prod.nit:9700 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -41781,7 +51134,7 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7644 */
+    /* parser/parser_prod.nit:9701 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41796,32 +51149,142 @@ void parser___parser_prod___AParExpr___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:7645 */
+      /* parser/parser_prod.nit:9702 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7645);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9702);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7646 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9703 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7646);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9703);
       }
-      /* parser/parser_prod.nit:7647 */
+      /* parser/parser_prod.nit:9704 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7649 */
+      /* parser/parser_prod.nit:9706 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7651 */
+    /* parser/parser_prod.nit:9708 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AParExpr___visit_all[] = "parser_prod::AParExpr::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AParExpr___n_opar__eq[] = "parser_prod::AParExpr::(parser_nodes::AParExpr::n_opar=)";
+void parser___parser_prod___AParExpr___n_opar__eq(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 = 9712;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExpr___n_opar__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:9714 */
+  ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9715 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AParExpr___n_expr__eq[] = "parser_prod::AParExpr::(parser_nodes::AProxyExpr::n_expr=)";
+void parser___parser_prod___AParExpr___n_expr__eq(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 = 9717;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExpr___n_expr__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:9719 */
+  ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9720 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AParExpr___n_cpar__eq[] = "parser_prod::AParExpr::(parser_nodes::AParExpr::n_cpar=)";
+void parser___parser_prod___AParExpr___n_cpar__eq(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 = 9722;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExpr___n_cpar__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:9724 */
+  ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9725 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AParExpr___n_annotations__eq[] = "parser_prod::AParExpr::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AParExpr___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 9727;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExpr___n_annotations__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:9729 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9730 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:9731 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9731);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AParExpr___visit_all[] = "parser_prod::AParExpr::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -41829,7 +51292,7 @@ void parser___parser_prod___AParExpr___visit_all(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 = 7655;
+  fra.me.line = 9736;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41840,33 +51303,33 @@ void parser___parser_prod___AParExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7655 */
+  /* parser/parser_prod.nit:9736 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7657 */
+  /* parser/parser_prod.nit:9738 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7657);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 9738);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParExpr____n_opar(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:7658 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9739 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7658);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9739);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AProxyExpr____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:7659 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9740 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7659);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 9740);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParExpr____n_cpar(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:7660 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9741 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -41882,27 +51345,27 @@ void parser___parser_prod___AParExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7661 */
+    /* parser/parser_prod.nit:9742 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7661);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9742);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___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___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;
+  int itpos248 = 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;
+  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 = 7666;
+  fra.me.line = 9747;
   fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -41910,19 +51373,19 @@ void parser___parser_prod___AAsCastExpr___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos249] = 1;
+  init_table[itpos248] = 1;
   return;
 }
 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;
+  int itpos249 = 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[itpos250]) 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 = 7668;
+  fra.me.line = 9749;
   fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___init_aascastexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -41940,80 +51403,80 @@ void parser___parser_prod___AAsCastExpr___init_aascastexpr(val_t p0, val_t p1, v
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:7668 */
+  /* parser/parser_prod.nit:9749 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7676 */
+  /* parser/parser_prod.nit:9757 */
   CALL_parser___parser_prod___AAsCastExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:7677 */
+  /* parser/parser_prod.nit:9758 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7677);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9758);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7678 */
+  /* parser/parser_prod.nit:9759 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7678);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9759);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:7679 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:9760 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7679);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9760);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7680 */
+  /* parser/parser_prod.nit:9761 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7680);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9761);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:7681 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:9762 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7681);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9762);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7682 */
+  /* parser/parser_prod.nit:9763 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7682);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9763);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:7683 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:9764 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7683);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9764);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:7684 */
+  /* parser/parser_prod.nit:9765 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7684);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9765);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:7685 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:9766 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7685);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9766);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:7686 */
+  /* parser/parser_prod.nit:9767 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7686);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9767);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos249] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAsCastExpr___replace_child[] = "parser_prod::AAsCastExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAsCastExpr___replace_child[] = "parser_prod::AAsCastExpr::(parser_nodes::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;
@@ -42021,7 +51484,7 @@ void parser___parser_prod___AAsCastExpr___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 = 7689;
+  fra.me.line = 9770;
   fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -42033,11 +51496,11 @@ 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:7691 */
+  /* parser/parser_prod.nit:9772 */
   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, 7691);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9772);
   }
   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]));
@@ -42047,7 +51510,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7692 */
+    /* parser/parser_prod.nit:9773 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42062,32 +51525,32 @@ 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:7693 */
+      /* parser/parser_prod.nit:9774 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7693);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9774);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7694 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9775 */
       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, 7694);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9775);
       }
-      /* parser/parser_prod.nit:7695 */
+      /* parser/parser_prod.nit:9776 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7697 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7697);
+      /* parser/parser_prod.nit:9778 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9778);
     }
-    /* parser/parser_prod.nit:7699 */
+    /* parser/parser_prod.nit:9780 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7701 */
+  /* parser/parser_prod.nit:9782 */
   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, 7701);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 9782);
   }
   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]));
@@ -42097,7 +51560,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7702 */
+    /* parser/parser_prod.nit:9783 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42112,32 +51575,32 @@ 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:7703 */
+      /* parser/parser_prod.nit:9784 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7703);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9784);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7704 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9785 */
       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, 7704);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9785);
       }
-      /* parser/parser_prod.nit:7705 */
+      /* parser/parser_prod.nit:9786 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7707 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7707);
+      /* parser/parser_prod.nit:9788 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9788);
     }
-    /* parser/parser_prod.nit:7709 */
+    /* parser/parser_prod.nit:9790 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7711 */
+  /* parser/parser_prod.nit:9792 */
   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, 7711);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 9792);
   }
   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]));
@@ -42147,7 +51610,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7712 */
+    /* parser/parser_prod.nit:9793 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42162,32 +51625,32 @@ 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:7713 */
+      /* parser/parser_prod.nit:9794 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7713);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9794);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7714 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9795 */
       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, 7714);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9795);
       }
-      /* parser/parser_prod.nit:7715 */
+      /* parser/parser_prod.nit:9796 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7717 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7717);
+      /* parser/parser_prod.nit:9798 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9798);
     }
-    /* parser/parser_prod.nit:7719 */
+    /* parser/parser_prod.nit:9800 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7721 */
+  /* parser/parser_prod.nit:9802 */
   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, 7721);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 9802);
   }
   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]));
@@ -42197,7 +51660,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7722 */
+    /* parser/parser_prod.nit:9803 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42212,32 +51675,32 @@ 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:7723 */
+      /* parser/parser_prod.nit:9804 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7723);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9804);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7724 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9805 */
       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, 7724);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9805);
       }
-      /* parser/parser_prod.nit:7725 */
+      /* parser/parser_prod.nit:9806 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7727 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7727);
+      /* parser/parser_prod.nit:9808 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9808);
     }
-    /* parser/parser_prod.nit:7729 */
+    /* parser/parser_prod.nit:9810 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7731 */
+  /* parser/parser_prod.nit:9812 */
   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, 7731);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 9812);
   }
   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]));
@@ -42247,7 +51710,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7732 */
+    /* parser/parser_prod.nit:9813 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42262,39 +51725,149 @@ 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:7733 */
+      /* parser/parser_prod.nit:9814 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7733);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9814);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7734 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9815 */
       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, 7734);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9815);
       }
-      /* parser/parser_prod.nit:7735 */
+      /* parser/parser_prod.nit:9816 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7737 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7737);
+      /* parser/parser_prod.nit:9818 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9818);
     }
-    /* parser/parser_prod.nit:7739 */
+    /* parser/parser_prod.nit:9820 */
     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)";
+static const char LOCATE_parser___parser_prod___AAsCastExpr___n_expr__eq[] = "parser_prod::AAsCastExpr::(parser_nodes::AAsCastExpr::n_expr=)";
+void parser___parser_prod___AAsCastExpr___n_expr__eq(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 = 9824;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___n_expr__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:9826 */
+  ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9827 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsCastExpr___n_kwas__eq[] = "parser_prod::AAsCastExpr::(parser_nodes::AAsCastExpr::n_kwas=)";
+void parser___parser_prod___AAsCastExpr___n_kwas__eq(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 = 9829;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___n_kwas__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:9831 */
+  ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9832 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsCastExpr___n_opar__eq[] = "parser_prod::AAsCastExpr::(parser_nodes::AAsCastExpr::n_opar=)";
+void parser___parser_prod___AAsCastExpr___n_opar__eq(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 = 9834;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___n_opar__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:9836 */
+  ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9837 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsCastExpr___n_type__eq[] = "parser_prod::AAsCastExpr::(parser_nodes::AAsCastExpr::n_type=)";
+void parser___parser_prod___AAsCastExpr___n_type__eq(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 = 9839;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___n_type__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:9841 */
+  ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9842 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsCastExpr___n_cpar__eq[] = "parser_prod::AAsCastExpr::(parser_nodes::AAsCastExpr::n_cpar=)";
+void parser___parser_prod___AAsCastExpr___n_cpar__eq(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 = 9844;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___n_cpar__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:9846 */
+  ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9847 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsCastExpr___visit_all[] = "parser_prod::AAsCastExpr::(parser_nodes::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 = 7743;
+  fra.me.line = 9851;
   fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -42304,58 +51877,58 @@ void parser___parser_prod___AAsCastExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7745 */
+  /* parser/parser_prod.nit:9853 */
   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, 7745);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9853);
   }
   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:7746 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:9854 */
   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, 7746);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 9854);
   }
   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:7747 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:9855 */
   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, 7747);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 9855);
   }
   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:7748 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:9856 */
   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, 7748);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 9856);
   }
   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:7749 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:9857 */
   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, 7749);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 9857);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos250 = 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;
+  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 = 7753;
+  fra.me.line = 9861;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -42363,19 +51936,19 @@ void parser___parser_prod___AAsNotnullExpr___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos251] = 1;
+  init_table[itpos250] = 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;
+  int itpos251 = 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;
+  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 = 7755;
+  fra.me.line = 9863;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -42395,93 +51968,93 @@ void parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(val_t p0, val_t
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:7755 */
+  /* parser/parser_prod.nit:9863 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7764 */
+  /* parser/parser_prod.nit:9872 */
   CALL_parser___parser_prod___AAsNotnullExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:7765 */
+  /* parser/parser_prod.nit:9873 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7765);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9873);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7766 */
+  /* parser/parser_prod.nit:9874 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7766);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9874);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7767 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+  /* parser/parser_prod.nit:9875 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7767);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9875);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7768 */
+  /* parser/parser_prod.nit:9876 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7768);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9876);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7769 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+  /* parser/parser_prod.nit:9877 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7769);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9877);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7770 */
+  /* parser/parser_prod.nit:9878 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7770);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9878);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7771 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser_prod.nit:9879 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7771);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9879);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:7772 */
+  /* parser/parser_prod.nit:9880 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7772);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9880);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7773 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser_prod.nit:9881 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7773);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9881);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:7774 */
+  /* parser/parser_prod.nit:9882 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7774);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9882);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7775 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+  /* parser/parser_prod.nit:9883 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7775);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9883);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:7776 */
+  /* parser/parser_prod.nit:9884 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7776);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9884);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos251] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAsNotnullExpr___replace_child[] = "parser_prod::AAsNotnullExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAsNotnullExpr___replace_child[] = "parser_prod::AAsNotnullExpr::(parser_nodes::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;
@@ -42489,7 +52062,7 @@ 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 = 7779;
+  fra.me.line = 9887;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -42501,11 +52074,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:7781 */
+  /* parser/parser_prod.nit:9889 */
   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, 7781);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9889);
   }
   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]));
@@ -42515,7 +52088,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7782 */
+    /* parser/parser_prod.nit:9890 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42530,32 +52103,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:7783 */
+      /* parser/parser_prod.nit:9891 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7783);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9891);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7784 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9892 */
       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, 7784);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9892);
       }
-      /* parser/parser_prod.nit:7785 */
+      /* parser/parser_prod.nit:9893 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7787 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7787);
+      /* parser/parser_prod.nit:9895 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9895);
     }
-    /* parser/parser_prod.nit:7789 */
+    /* parser/parser_prod.nit:9897 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7791 */
+  /* parser/parser_prod.nit:9899 */
   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, 7791);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 9899);
   }
   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]));
@@ -42565,7 +52138,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7792 */
+    /* parser/parser_prod.nit:9900 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42580,32 +52153,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:7793 */
+      /* parser/parser_prod.nit:9901 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7793);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9901);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7794 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9902 */
       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, 7794);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9902);
       }
-      /* parser/parser_prod.nit:7795 */
+      /* parser/parser_prod.nit:9903 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7797 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7797);
+      /* parser/parser_prod.nit:9905 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9905);
     }
-    /* parser/parser_prod.nit:7799 */
+    /* parser/parser_prod.nit:9907 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7801 */
+  /* parser/parser_prod.nit:9909 */
   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, 7801);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 9909);
   }
   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]));
@@ -42615,7 +52188,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7802 */
+    /* parser/parser_prod.nit:9910 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42630,32 +52203,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:7803 */
+      /* parser/parser_prod.nit:9911 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7803);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9911);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7804 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9912 */
       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, 7804);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9912);
       }
-      /* parser/parser_prod.nit:7805 */
+      /* parser/parser_prod.nit:9913 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7807 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7807);
+      /* parser/parser_prod.nit:9915 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9915);
     }
-    /* parser/parser_prod.nit:7809 */
+    /* parser/parser_prod.nit:9917 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7811 */
+  /* parser/parser_prod.nit:9919 */
   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, 7811);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 9919);
   }
   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]));
@@ -42665,7 +52238,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7812 */
+    /* parser/parser_prod.nit:9920 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42680,32 +52253,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:7813 */
+      /* parser/parser_prod.nit:9921 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7813);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9921);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7814 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9922 */
       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, 7814);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9922);
       }
-      /* parser/parser_prod.nit:7815 */
+      /* parser/parser_prod.nit:9923 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7817 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7817);
+      /* parser/parser_prod.nit:9925 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9925);
     }
-    /* parser/parser_prod.nit:7819 */
+    /* parser/parser_prod.nit:9927 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7821 */
+  /* parser/parser_prod.nit:9929 */
   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, 7821);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 9929);
   }
   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]));
@@ -42715,7 +52288,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7822 */
+    /* parser/parser_prod.nit:9930 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42730,32 +52303,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:7823 */
+      /* parser/parser_prod.nit:9931 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7823);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9931);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7824 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9932 */
       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, 7824);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9932);
       }
-      /* parser/parser_prod.nit:7825 */
+      /* parser/parser_prod.nit:9933 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7827 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7827);
+      /* parser/parser_prod.nit:9935 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9935);
     }
-    /* parser/parser_prod.nit:7829 */
+    /* parser/parser_prod.nit:9937 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7831 */
+  /* parser/parser_prod.nit:9939 */
   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, 7831);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 9939);
   }
   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]));
@@ -42765,7 +52338,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7832 */
+    /* parser/parser_prod.nit:9940 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42780,39 +52353,171 @@ 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:7833 */
+      /* parser/parser_prod.nit:9941 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7833);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9941);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7834 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9942 */
       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, 7834);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9942);
       }
-      /* parser/parser_prod.nit:7835 */
+      /* parser/parser_prod.nit:9943 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7837 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7837);
+      /* parser/parser_prod.nit:9945 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9945);
     }
-    /* parser/parser_prod.nit:7839 */
+    /* parser/parser_prod.nit:9947 */
     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)";
+static const char LOCATE_parser___parser_prod___AAsNotnullExpr___n_expr__eq[] = "parser_prod::AAsNotnullExpr::(parser_nodes::AAsNotnullExpr::n_expr=)";
+void parser___parser_prod___AAsNotnullExpr___n_expr__eq(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 = 9951;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___n_expr__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:9953 */
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9954 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwas__eq[] = "parser_prod::AAsNotnullExpr::(parser_nodes::AAsNotnullExpr::n_kwas=)";
+void parser___parser_prod___AAsNotnullExpr___n_kwas__eq(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 = 9956;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___n_kwas__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:9958 */
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9959 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_opar__eq[] = "parser_prod::AAsNotnullExpr::(parser_nodes::AAsNotnullExpr::n_opar=)";
+void parser___parser_prod___AAsNotnullExpr___n_opar__eq(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 = 9961;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___n_opar__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:9963 */
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9964 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwnot__eq[] = "parser_prod::AAsNotnullExpr::(parser_nodes::AAsNotnullExpr::n_kwnot=)";
+void parser___parser_prod___AAsNotnullExpr___n_kwnot__eq(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 = 9966;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___n_kwnot__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:9968 */
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9969 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwnull__eq[] = "parser_prod::AAsNotnullExpr::(parser_nodes::AAsNotnullExpr::n_kwnull=)";
+void parser___parser_prod___AAsNotnullExpr___n_kwnull__eq(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 = 9971;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___n_kwnull__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:9973 */
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9974 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_cpar__eq[] = "parser_prod::AAsNotnullExpr::(parser_nodes::AAsNotnullExpr::n_cpar=)";
+void parser___parser_prod___AAsNotnullExpr___n_cpar__eq(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 = 9976;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___n_cpar__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:9978 */
+  ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9979 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AAsNotnullExpr::(parser_nodes::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 = 7843;
+  fra.me.line = 9983;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -42822,66 +52527,66 @@ void parser___parser_prod___AAsNotnullExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7845 */
+  /* parser/parser_prod.nit:9985 */
   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, 7845);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9985);
   }
   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:7846 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:9986 */
   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, 7846);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 9986);
   }
   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:7847 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:9987 */
   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, 7847);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 9987);
   }
   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:7848 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:9988 */
   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, 7848);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 9988);
   }
   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:7849 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:9989 */
   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, 7849);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 9989);
   }
   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:7850 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:9990 */
   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, 7850);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 9990);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos252 = 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;
+  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 = 7854;
+  fra.me.line = 9994;
   fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -42889,19 +52594,19 @@ void parser___parser_prod___AIssetAttrExpr___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos253] = 1;
+  init_table[itpos252] = 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;
+  int itpos253 = 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;
+  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 = 7856;
+  fra.me.line = 9996;
   fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -42915,54 +52620,54 @@ void parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(val_t p0, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:7856 */
+  /* parser/parser_prod.nit:9996 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7862 */
+  /* parser/parser_prod.nit:10002 */
   CALL_parser___parser_prod___AIssetAttrExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:7863 */
+  /* parser/parser_prod.nit:10003 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7863);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10003);
   }
   ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7864 */
+  /* parser/parser_prod.nit:10004 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7864);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10004);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:7865 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:10005 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7865);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10005);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7866 */
+  /* parser/parser_prod.nit:10006 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7866);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10006);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:7867 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:10007 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7867);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10007);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7868 */
+  /* parser/parser_prod.nit:10008 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7868);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10008);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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[itpos253] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AIssetAttrExpr___replace_child[] = "parser_prod::AIssetAttrExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AIssetAttrExpr___replace_child[] = "parser_prod::AIssetAttrExpr::(parser_nodes::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;
@@ -42970,7 +52675,7 @@ void parser___parser_prod___AIssetAttrExpr___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 = 7871;
+  fra.me.line = 10011;
   fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -42982,11 +52687,11 @@ 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:7873 */
+  /* parser/parser_prod.nit:10013 */
   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, 7873);
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 10013);
   }
   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]));
@@ -42996,7 +52701,7 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7874 */
+    /* parser/parser_prod.nit:10014 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43011,32 +52716,32 @@ 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:7875 */
+      /* parser/parser_prod.nit:10015 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7875);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10015);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7876 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10016 */
       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, 7876);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10016);
       }
-      /* parser/parser_prod.nit:7877 */
+      /* parser/parser_prod.nit:10017 */
       ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7879 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7879);
+      /* parser/parser_prod.nit:10019 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10019);
     }
-    /* parser/parser_prod.nit:7881 */
+    /* parser/parser_prod.nit:10021 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7883 */
+  /* parser/parser_prod.nit:10023 */
   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, 7883);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 10023);
   }
   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]));
@@ -43046,7 +52751,7 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7884 */
+    /* parser/parser_prod.nit:10024 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43061,32 +52766,32 @@ 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:7885 */
+      /* parser/parser_prod.nit:10025 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7885);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10025);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7886 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10026 */
       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, 7886);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10026);
       }
-      /* parser/parser_prod.nit:7887 */
+      /* parser/parser_prod.nit:10027 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7889 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7889);
+      /* parser/parser_prod.nit:10029 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10029);
     }
-    /* parser/parser_prod.nit:7891 */
+    /* parser/parser_prod.nit:10031 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7893 */
+  /* parser/parser_prod.nit:10033 */
   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, 7893);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 10033);
   }
   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]));
@@ -43096,7 +52801,7 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7894 */
+    /* parser/parser_prod.nit:10034 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43111,39 +52816,105 @@ 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:7895 */
+      /* parser/parser_prod.nit:10035 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7895);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10035);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7896 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10036 */
       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, 7896);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10036);
       }
-      /* parser/parser_prod.nit:7897 */
+      /* parser/parser_prod.nit:10037 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7899 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7899);
+      /* parser/parser_prod.nit:10039 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10039);
     }
-    /* parser/parser_prod.nit:7901 */
+    /* parser/parser_prod.nit:10041 */
     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)";
+static const char LOCATE_parser___parser_prod___AIssetAttrExpr___n_kwisset__eq[] = "parser_prod::AIssetAttrExpr::(parser_nodes::AIssetAttrExpr::n_kwisset=)";
+void parser___parser_prod___AIssetAttrExpr___n_kwisset__eq(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 = 10045;
+  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___n_kwisset__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:10047 */
+  ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10048 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr__eq[] = "parser_prod::AIssetAttrExpr::(parser_nodes::AAttrFormExpr::n_expr=)";
+void parser___parser_prod___AIssetAttrExpr___n_expr__eq(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 = 10050;
+  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___n_expr__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:10052 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10053 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_id__eq[] = "parser_prod::AIssetAttrExpr::(parser_nodes::AAttrFormExpr::n_id=)";
+void parser___parser_prod___AIssetAttrExpr___n_id__eq(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 = 10055;
+  fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___n_id__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:10057 */
+  ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10058 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AIssetAttrExpr::(parser_nodes::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 = 7905;
+  fra.me.line = 10062;
   fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -43153,42 +52924,42 @@ void parser___parser_prod___AIssetAttrExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7907 */
+  /* parser/parser_prod.nit:10064 */
   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, 7907);
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 10064);
   }
   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:7908 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:10065 */
   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, 7908);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 10065);
   }
   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:7909 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:10066 */
   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, 7909);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 10066);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos254 = 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;
+  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 = 7913;
+  fra.me.line = 10070;
   fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -43196,19 +52967,19 @@ void parser___parser_prod___ADebugTypeExpr___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos255] = 1;
+  init_table[itpos254] = 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;
+  int itpos255 = 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;
+  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 = 7915;
+  fra.me.line = 10072;
   fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -43224,67 +52995,67 @@ void parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr(val_t p0, val_t
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:7915 */
+  /* parser/parser_prod.nit:10072 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7922 */
+  /* parser/parser_prod.nit:10079 */
   CALL_parser___parser_prod___ADebugTypeExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:7923 */
+  /* parser/parser_prod.nit:10080 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7923);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10080);
   }
   ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7924 */
+  /* parser/parser_prod.nit:10081 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7924);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10081);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:7925 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:10082 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7925);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10082);
   }
   ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7926 */
+  /* parser/parser_prod.nit:10083 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7926);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10083);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:7927 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:10084 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7927);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10084);
   }
   ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7928 */
+  /* parser/parser_prod.nit:10085 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7928);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10085);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:7929 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:10086 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7929);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10086);
   }
   ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:7930 */
+  /* parser/parser_prod.nit:10087 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7930);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10087);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos255] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ADebugTypeExpr___replace_child[] = "parser_prod::ADebugTypeExpr::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ADebugTypeExpr___replace_child[] = "parser_prod::ADebugTypeExpr::(parser_nodes::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;
@@ -43292,7 +53063,7 @@ void parser___parser_prod___ADebugTypeExpr___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 = 7933;
+  fra.me.line = 10090;
   fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -43304,11 +53075,11 @@ void parser___parser_prod___ADebugTypeExpr___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:7935 */
+  /* parser/parser_prod.nit:10092 */
   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, 7935);
+    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_prod, 10092);
   }
   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]));
@@ -43318,7 +53089,7 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7936 */
+    /* parser/parser_prod.nit:10093 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43333,32 +53104,32 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7937 */
+      /* parser/parser_prod.nit:10094 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7937);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10094);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7938 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10095 */
       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, 7938);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10095);
       }
-      /* parser/parser_prod.nit:7939 */
+      /* parser/parser_prod.nit:10096 */
       ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7941 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7941);
+      /* parser/parser_prod.nit:10098 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10098);
     }
-    /* parser/parser_prod.nit:7943 */
+    /* parser/parser_prod.nit:10100 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7945 */
+  /* parser/parser_prod.nit:10102 */
   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, 7945);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 10102);
   }
   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]));
@@ -43368,7 +53139,7 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7946 */
+    /* parser/parser_prod.nit:10103 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43383,32 +53154,32 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7947 */
+      /* parser/parser_prod.nit:10104 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7947);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10104);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7948 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10105 */
       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, 7948);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10105);
       }
-      /* parser/parser_prod.nit:7949 */
+      /* parser/parser_prod.nit:10106 */
       ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7951 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7951);
+      /* parser/parser_prod.nit:10108 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10108);
     }
-    /* parser/parser_prod.nit:7953 */
+    /* parser/parser_prod.nit:10110 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7955 */
+  /* parser/parser_prod.nit:10112 */
   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, 7955);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 10112);
   }
   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]));
@@ -43418,7 +53189,7 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7956 */
+    /* parser/parser_prod.nit:10113 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43433,32 +53204,32 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7957 */
+      /* parser/parser_prod.nit:10114 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7957);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10114);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7958 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10115 */
       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, 7958);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10115);
       }
-      /* parser/parser_prod.nit:7959 */
+      /* parser/parser_prod.nit:10116 */
       ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7961 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7961);
+      /* parser/parser_prod.nit:10118 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10118);
     }
-    /* parser/parser_prod.nit:7963 */
+    /* parser/parser_prod.nit:10120 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7965 */
+  /* parser/parser_prod.nit:10122 */
   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, 7965);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 10122);
   }
   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]));
@@ -43468,7 +53239,7 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7966 */
+    /* parser/parser_prod.nit:10123 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43483,39 +53254,127 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7967 */
+      /* parser/parser_prod.nit:10124 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7967);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10124);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7968 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10125 */
       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, 7968);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10125);
       }
-      /* parser/parser_prod.nit:7969 */
+      /* parser/parser_prod.nit:10126 */
       ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7971 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7971);
+      /* parser/parser_prod.nit:10128 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10128);
     }
-    /* parser/parser_prod.nit:7973 */
+    /* parser/parser_prod.nit:10130 */
     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)";
+static const char LOCATE_parser___parser_prod___ADebugTypeExpr___n_kwdebug__eq[] = "parser_prod::ADebugTypeExpr::(parser_nodes::ADebugTypeExpr::n_kwdebug=)";
+void parser___parser_prod___ADebugTypeExpr___n_kwdebug__eq(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 = 10134;
+  fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___n_kwdebug__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:10136 */
+  ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10137 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwtype__eq[] = "parser_prod::ADebugTypeExpr::(parser_nodes::ADebugTypeExpr::n_kwtype=)";
+void parser___parser_prod___ADebugTypeExpr___n_kwtype__eq(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 = 10139;
+  fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___n_kwtype__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:10141 */
+  ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10142 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr__eq[] = "parser_prod::ADebugTypeExpr::(parser_nodes::ADebugTypeExpr::n_expr=)";
+void parser___parser_prod___ADebugTypeExpr___n_expr__eq(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 = 10144;
+  fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___n_expr__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:10146 */
+  ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10147 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_type__eq[] = "parser_prod::ADebugTypeExpr::(parser_nodes::ADebugTypeExpr::n_type=)";
+void parser___parser_prod___ADebugTypeExpr___n_type__eq(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 = 10149;
+  fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___n_type__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:10151 */
+  ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10152 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ADebugTypeExpr::(parser_nodes::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 = 7977;
+  fra.me.line = 10156;
   fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -43525,50 +53384,50 @@ void parser___parser_prod___ADebugTypeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7979 */
+  /* parser/parser_prod.nit:10158 */
   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, 7979);
+    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_prod, 10158);
   }
   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:7980 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:10159 */
   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, 7980);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 10159);
   }
   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:7981 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:10160 */
   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, 7981);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 10160);
   }
   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:7982 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:10161 */
   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, 7982);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 10161);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos256 = 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;
+  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 = 7986;
+  fra.me.line = 10165;
   fra.me.meth = LOCATE_parser___parser_prod___AListExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -43576,18 +53435,18 @@ void parser___parser_prod___AListExprs___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos257] = 1;
+  init_table[itpos256] = 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;
+  int itpos257 = 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;
+  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 = 7988;
+  fra.me.line = 10167;
   fra.me.meth = LOCATE_parser___parser_prod___AListExprs___init_alistexprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43596,11 +53455,11 @@ void parser___parser_prod___AListExprs___init_alistexprs(val_t p0, val_t p1, int
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7992 */
+  /* parser/parser_prod.nit:10171 */
   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;
+  init_table[itpos257] = 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){
@@ -43608,7 +53467,7 @@ void parser___parser_prod___AListExprs___init_alistexprs(val_t p0, val_t p1, int
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:7993 */
+    /* parser/parser_prod.nit:10172 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -43622,26 +53481,26 @@ void parser___parser_prod___AListExprs___init_alistexprs(val_t p0, val_t p1, int
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7994 */
+    /* parser/parser_prod.nit:10173 */
     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, 7994);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10173);
     }
-    /* parser/parser_prod.nit:7995 */
+    /* parser/parser_prod.nit:10174 */
     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, 7995);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10174);
     }
     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:7996 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:10175 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AListExprs___replace_child[] = "parser_prod::AListExprs::(parser_nodes::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;
@@ -43652,7 +53511,7 @@ void parser___parser_prod___AListExprs___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 = 8000;
+  fra.me.line = 10179;
   fra.me.meth = LOCATE_parser___parser_prod___AListExprs___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -43664,50 +53523,44 @@ void parser___parser_prod___AListExprs___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:8002 */
+  /* parser/parser_prod.nit:10181 */
   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, 8002);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10181);
   }
   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 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:8002 */
+      /* parser/parser_prod.nit:10181 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:8003 */
+      /* parser/parser_prod.nit:10182 */
       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, 8003);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10182);
       }
       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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:8004 */
+        /* parser/parser_prod.nit:10183 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -43722,47 +53575,47 @@ void parser___parser_prod___AListExprs___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:8005 */
+          /* parser/parser_prod.nit:10184 */
           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, 8005);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10184);
           }
-          /* parser/parser_prod.nit:8006 */
+          /* parser/parser_prod.nit:10185 */
           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, 8006);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10185);
           }
           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:8007 */
+          /* parser/parser_prod.nit:10186 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8007);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10186);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:8009 */
+          /* parser/parser_prod.nit:10188 */
           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, 8009);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10188);
           }
           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:8011 */
+        /* parser/parser_prod.nit:10190 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
@@ -43771,14 +53624,14 @@ void parser___parser_prod___AListExprs___replace_child(val_t p0, val_t p1, val_t
   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)";
+static const char LOCATE_parser___parser_prod___AListExprs___visit_all[] = "parser_prod::AListExprs::(parser_nodes::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 = 8016;
+  fra.me.line = 10197;
   fra.me.meth = LOCATE_parser___parser_prod___AListExprs___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43787,11 +53640,11 @@ void parser___parser_prod___AListExprs___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8018 */
+  /* parser/parser_prod.nit:10199 */
   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, 8018);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10199);
   }
   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));
@@ -43814,20 +53667,20 @@ void parser___parser_prod___AListExprs___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8019 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:10200 */
+    CALL_parser___parser_nodes___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;
+  int itpos258 = 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;
+  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 = 8024;
+  fra.me.line = 10205;
   fra.me.meth = LOCATE_parser___parser_prod___AParExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -43835,19 +53688,19 @@ void parser___parser_prod___AParExprs___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos259] = 1;
+  init_table[itpos258] = 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;
+  int itpos259 = 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;
+  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 = 8026;
+  fra.me.line = 10207;
   fra.me.meth = LOCATE_parser___parser_prod___AParExprs___init_aparexprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -43861,39 +53714,39 @@ void parser___parser_prod___AParExprs___init_aparexprs(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8026 */
+  /* parser/parser_prod.nit:10207 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8032 */
+  /* parser/parser_prod.nit:10213 */
   CALL_parser___parser_prod___AParExprs___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:8033 */
+  /* parser/parser_prod.nit:10214 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8033);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10214);
   }
   ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8034 */
+  /* parser/parser_prod.nit:10215 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8034);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10215);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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:8040 */
+  /* parser/parser_prod.nit:10221 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8040);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10221);
   }
   ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8041 */
+  /* parser/parser_prod.nit:10222 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8041);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10222);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos259] = 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){
@@ -43901,7 +53754,7 @@ void parser___parser_prod___AParExprs___init_aparexprs(val_t p0, val_t p1, val_t
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:8035 */
+    /* parser/parser_prod.nit:10216 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -43915,26 +53768,26 @@ void parser___parser_prod___AParExprs___init_aparexprs(val_t p0, val_t p1, val_t
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8036 */
+    /* parser/parser_prod.nit:10217 */
     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, 8036);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10217);
     }
-    /* parser/parser_prod.nit:8037 */
+    /* parser/parser_prod.nit:10218 */
     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, 8037);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10218);
     }
     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:8038 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
+    /* parser/parser_prod.nit:10219 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AParExprs___replace_child[] = "parser_prod::AParExprs::(parser_nodes::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;
@@ -43945,7 +53798,7 @@ void parser___parser_prod___AParExprs___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 = 8044;
+  fra.me.line = 10225;
   fra.me.meth = LOCATE_parser___parser_prod___AParExprs___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -43957,11 +53810,11 @@ void parser___parser_prod___AParExprs___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:8046 */
+  /* parser/parser_prod.nit:10227 */
   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, 8046);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 10227);
   }
   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]));
@@ -43971,7 +53824,7 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8047 */
+    /* parser/parser_prod.nit:10228 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43986,71 +53839,65 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8048 */
+      /* parser/parser_prod.nit:10229 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8048);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10229);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8049 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10230 */
       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, 8049);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10230);
       }
-      /* parser/parser_prod.nit:8050 */
+      /* parser/parser_prod.nit:10231 */
       ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8052 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8052);
+      /* parser/parser_prod.nit:10233 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10233);
     }
-    /* parser/parser_prod.nit:8054 */
+    /* parser/parser_prod.nit:10235 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8056 */
+  /* parser/parser_prod.nit:10237 */
   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, 8056);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10237);
   }
   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 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:8056 */
+      /* parser/parser_prod.nit:10237 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:8057 */
+      /* parser/parser_prod.nit:10238 */
       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, 8057);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10238);
       }
       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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:8058 */
+        /* parser/parser_prod.nit:10239 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -44065,56 +53912,56 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:8059 */
+          /* parser/parser_prod.nit:10240 */
           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, 8059);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10240);
           }
-          /* parser/parser_prod.nit:8060 */
+          /* parser/parser_prod.nit:10241 */
           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, 8060);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10241);
           }
           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:8061 */
+          /* parser/parser_prod.nit:10242 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8061);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10242);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:8063 */
+          /* parser/parser_prod.nit:10244 */
           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, 8063);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10244);
           }
           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:8065 */
+        /* parser/parser_prod.nit:10246 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:8068 */
+  /* parser/parser_prod.nit:10249 */
   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, 8068);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 10249);
   }
   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]));
@@ -44124,7 +53971,7 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8069 */
+    /* parser/parser_prod.nit:10250 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44139,39 +53986,83 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8070 */
+      /* parser/parser_prod.nit:10251 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8070);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10251);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8071 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10252 */
       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, 8071);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10252);
       }
-      /* parser/parser_prod.nit:8072 */
+      /* parser/parser_prod.nit:10253 */
       ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8074 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8074);
+      /* parser/parser_prod.nit:10255 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10255);
     }
-    /* parser/parser_prod.nit:8076 */
+    /* parser/parser_prod.nit:10257 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AParExprs___visit_all[] = "parser_prod::AParExprs::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AParExprs___n_opar__eq[] = "parser_prod::AParExprs::(parser_nodes::AParExprs::n_opar=)";
+void parser___parser_prod___AParExprs___n_opar__eq(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 = 10261;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExprs___n_opar__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:10263 */
+  ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10264 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AParExprs___n_cpar__eq[] = "parser_prod::AParExprs::(parser_nodes::AParExprs::n_cpar=)";
+void parser___parser_prod___AParExprs___n_cpar__eq(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 = 10266;
+  fra.me.meth = LOCATE_parser___parser_prod___AParExprs___n_cpar__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:10268 */
+  ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10269 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AParExprs___visit_all[] = "parser_prod::AParExprs::(parser_nodes::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 = 8080;
+  fra.me.line = 10273;
   fra.me.meth = LOCATE_parser___parser_prod___AParExprs___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -44181,30 +54072,30 @@ void parser___parser_prod___AParExprs___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8082 */
+  /* parser/parser_prod.nit:10275 */
   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, 8082);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 10275);
   }
   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:8083 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:10276 */
   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, 8083);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10276);
   }
   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:8086 */
+  /* parser/parser_prod.nit:10279 */
   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, 8086);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 10279);
   }
   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]);
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -44224,20 +54115,20 @@ void parser___parser_prod___AParExprs___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8084 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:10277 */
+    CALL_parser___parser_nodes___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;
+  int itpos260 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABraExprs].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos261]) return;
+  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 = 8090;
+  fra.me.line = 10283;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -44245,19 +54136,19 @@ void parser___parser_prod___ABraExprs___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos261] = 1;
+  init_table[itpos260] = 1;
   return;
 }
 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;
+  int itpos261 = 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[itpos262]) 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 = 8092;
+  fra.me.line = 10285;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___init_abraexprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -44271,39 +54162,39 @@ void parser___parser_prod___ABraExprs___init_abraexprs(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8092 */
+  /* parser/parser_prod.nit:10285 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8098 */
+  /* parser/parser_prod.nit:10291 */
   CALL_parser___parser_prod___ABraExprs___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:8099 */
+  /* parser/parser_prod.nit:10292 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8099);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10292);
   }
   ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8100 */
+  /* parser/parser_prod.nit:10293 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8100);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10293);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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:8106 */
+  /* parser/parser_prod.nit:10299 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8106);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10299);
   }
   ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8107 */
+  /* parser/parser_prod.nit:10300 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8107);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10300);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos262] = 1;
+  init_table[itpos261] = 1;
   return;
 }
   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){
@@ -44311,7 +54202,7 @@ void parser___parser_prod___ABraExprs___init_abraexprs(val_t p0, val_t p1, val_t
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:8101 */
+    /* parser/parser_prod.nit:10294 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -44325,26 +54216,26 @@ void parser___parser_prod___ABraExprs___init_abraexprs(val_t p0, val_t p1, val_t
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8102 */
+    /* parser/parser_prod.nit:10295 */
     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, 8102);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10295);
     }
-    /* parser/parser_prod.nit:8103 */
+    /* parser/parser_prod.nit:10296 */
     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, 8103);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10296);
     }
     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:8104 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
+    /* parser/parser_prod.nit:10297 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___ABraExprs___replace_child[] = "parser_prod::ABraExprs::(parser_nodes::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;
@@ -44355,7 +54246,7 @@ void parser___parser_prod___ABraExprs___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 = 8110;
+  fra.me.line = 10303;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -44367,11 +54258,11 @@ void parser___parser_prod___ABraExprs___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:8112 */
+  /* parser/parser_prod.nit:10305 */
   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_obra", LOCATE_parser___parser_prod, 8112);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 10305);
   }
   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]));
@@ -44381,7 +54272,7 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8113 */
+    /* parser/parser_prod.nit:10306 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44396,71 +54287,65 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8114 */
+      /* parser/parser_prod.nit:10307 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8114);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10307);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8115 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10308 */
       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, 8115);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10308);
       }
-      /* parser/parser_prod.nit:8116 */
+      /* parser/parser_prod.nit:10309 */
       ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8118 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8118);
+      /* parser/parser_prod.nit:10311 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10311);
     }
-    /* parser/parser_prod.nit:8120 */
+    /* parser/parser_prod.nit:10313 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8122 */
+  /* parser/parser_prod.nit:10315 */
   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, 8122);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10315);
   }
   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 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:8122 */
+      /* parser/parser_prod.nit:10315 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:8123 */
+      /* parser/parser_prod.nit:10316 */
       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, 8123);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10316);
       }
       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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:8124 */
+        /* parser/parser_prod.nit:10317 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -44475,56 +54360,56 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:8125 */
+          /* parser/parser_prod.nit:10318 */
           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, 8125);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10318);
           }
-          /* parser/parser_prod.nit:8126 */
+          /* parser/parser_prod.nit:10319 */
           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, 8126);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10319);
           }
           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:8127 */
+          /* parser/parser_prod.nit:10320 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8127);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10320);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:8129 */
+          /* parser/parser_prod.nit:10322 */
           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, 8129);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10322);
           }
           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:8131 */
+        /* parser/parser_prod.nit:10324 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:8134 */
+  /* parser/parser_prod.nit:10327 */
   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_cbra", LOCATE_parser___parser_prod, 8134);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 10327);
   }
   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]));
@@ -44534,7 +54419,7 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8135 */
+    /* parser/parser_prod.nit:10328 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44549,39 +54434,83 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8136 */
+      /* parser/parser_prod.nit:10329 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8136);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10329);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8137 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10330 */
       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, 8137);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10330);
       }
-      /* parser/parser_prod.nit:8138 */
+      /* parser/parser_prod.nit:10331 */
       ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8140 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8140);
+      /* parser/parser_prod.nit:10333 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10333);
     }
-    /* parser/parser_prod.nit:8142 */
+    /* parser/parser_prod.nit:10335 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___ABraExprs___visit_all[] = "parser_prod::ABraExprs::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___ABraExprs___n_obra__eq[] = "parser_prod::ABraExprs::(parser_nodes::ABraExprs::n_obra=)";
+void parser___parser_prod___ABraExprs___n_obra__eq(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 = 10339;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___n_obra__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:10341 */
+  ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10342 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraExprs___n_cbra__eq[] = "parser_prod::ABraExprs::(parser_nodes::ABraExprs::n_cbra=)";
+void parser___parser_prod___ABraExprs___n_cbra__eq(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 = 10344;
+  fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___n_cbra__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:10346 */
+  ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10347 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ABraExprs___visit_all[] = "parser_prod::ABraExprs::(parser_nodes::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 = 8146;
+  fra.me.line = 10351;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -44591,30 +54520,30 @@ void parser___parser_prod___ABraExprs___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8148 */
+  /* parser/parser_prod.nit:10353 */
   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_obra", LOCATE_parser___parser_prod, 8148);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 10353);
   }
   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:8149 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:10354 */
   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, 8149);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 10354);
   }
   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:8152 */
+  /* parser/parser_prod.nit:10357 */
   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_cbra", LOCATE_parser___parser_prod, 8152);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 10357);
   }
   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]);
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -44634,20 +54563,20 @@ void parser___parser_prod___ABraExprs___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8150 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:10355 */
+    CALL_parser___parser_nodes___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 itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusAssignOp].i;
+  int itpos262 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___APlusAssignOp].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos263]) 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 = 8156;
+  fra.me.line = 10361;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -44655,19 +54584,19 @@ void parser___parser_prod___APlusAssignOp___empty_init(val_t p0, int* init_table
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos263] = 1;
+  init_table[itpos262] = 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 itpos264 = 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; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos264]) 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 = 8158;
+  fra.me.line = 10363;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___init_aplusassignop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -44677,28 +54606,28 @@ void parser___parser_prod___APlusAssignOp___init_aplusassignop(val_t p0, val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8158 */
+  /* parser/parser_prod.nit:10363 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8162 */
+  /* parser/parser_prod.nit:10367 */
   CALL_parser___parser_prod___APlusAssignOp___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8163 */
+  /* parser/parser_prod.nit:10368 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8163);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10368);
   }
   ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8164 */
+  /* parser/parser_prod.nit:10369 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8164);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10369);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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[itpos263] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___APlusAssignOp___replace_child[] = "parser_prod::APlusAssignOp::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___APlusAssignOp___replace_child[] = "parser_prod::APlusAssignOp::(parser_nodes::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;
@@ -44706,7 +54635,7 @@ 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 = 8167;
+  fra.me.line = 10372;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -44718,11 +54647,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:8169 */
+  /* parser/parser_prod.nit:10374 */
   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, 8169);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 10374);
   }
   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]));
@@ -44732,7 +54661,7 @@ void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8170 */
+    /* parser/parser_prod.nit:10375 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44747,39 +54676,61 @@ 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:8171 */
+      /* parser/parser_prod.nit:10376 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8171);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10376);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8172 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10377 */
       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, 8172);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10377);
       }
-      /* parser/parser_prod.nit:8173 */
+      /* parser/parser_prod.nit:10378 */
       ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8175 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8175);
+      /* parser/parser_prod.nit:10380 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10380);
     }
-    /* parser/parser_prod.nit:8177 */
+    /* parser/parser_prod.nit:10382 */
     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)";
+static const char LOCATE_parser___parser_prod___APlusAssignOp___n_pluseq__eq[] = "parser_prod::APlusAssignOp::(parser_nodes::APlusAssignOp::n_pluseq=)";
+void parser___parser_prod___APlusAssignOp___n_pluseq__eq(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 = 10386;
+  fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___n_pluseq__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:10388 */
+  ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10389 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___APlusAssignOp___visit_all[] = "parser_prod::APlusAssignOp::(parser_nodes::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 = 8181;
+  fra.me.line = 10393;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44788,26 +54739,26 @@ void parser___parser_prod___APlusAssignOp___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8183 */
+  /* parser/parser_prod.nit:10395 */
   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, 8183);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 10395);
   }
   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]);
+  CALL_parser___parser_nodes___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 itpos265 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusAssignOp].i;
+  int itpos264 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AMinusAssignOp].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos265]) 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 = 8187;
+  fra.me.line = 10399;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -44815,19 +54766,19 @@ void parser___parser_prod___AMinusAssignOp___empty_init(val_t p0, int* init_tabl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos265] = 1;
+  init_table[itpos264] = 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 itpos266 = 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; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos266]) 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 = 8189;
+  fra.me.line = 10401;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___init_aminusassignop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -44837,28 +54788,28 @@ void parser___parser_prod___AMinusAssignOp___init_aminusassignop(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8189 */
+  /* parser/parser_prod.nit:10401 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8193 */
+  /* parser/parser_prod.nit:10405 */
   CALL_parser___parser_prod___AMinusAssignOp___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8194 */
+  /* parser/parser_prod.nit:10406 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8194);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10406);
   }
   ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8195 */
+  /* parser/parser_prod.nit:10407 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8195);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10407);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos266] = 1;
+  init_table[itpos265] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AMinusAssignOp___replace_child[] = "parser_prod::AMinusAssignOp::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AMinusAssignOp___replace_child[] = "parser_prod::AMinusAssignOp::(parser_nodes::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;
@@ -44866,7 +54817,7 @@ 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 = 8198;
+  fra.me.line = 10410;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -44878,11 +54829,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:8200 */
+  /* parser/parser_prod.nit:10412 */
   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, 8200);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 10412);
   }
   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]));
@@ -44892,7 +54843,7 @@ void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8201 */
+    /* parser/parser_prod.nit:10413 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44907,39 +54858,61 @@ 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:8202 */
+      /* parser/parser_prod.nit:10414 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8202);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10414);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8203 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10415 */
       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, 8203);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10415);
       }
-      /* parser/parser_prod.nit:8204 */
+      /* parser/parser_prod.nit:10416 */
       ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8206 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8206);
+      /* parser/parser_prod.nit:10418 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10418);
     }
-    /* parser/parser_prod.nit:8208 */
+    /* parser/parser_prod.nit:10420 */
     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)";
+static const char LOCATE_parser___parser_prod___AMinusAssignOp___n_minuseq__eq[] = "parser_prod::AMinusAssignOp::(parser_nodes::AMinusAssignOp::n_minuseq=)";
+void parser___parser_prod___AMinusAssignOp___n_minuseq__eq(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 = 10424;
+  fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___n_minuseq__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:10426 */
+  ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10427 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AMinusAssignOp::(parser_nodes::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 = 8212;
+  fra.me.line = 10431;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44948,26 +54921,26 @@ void parser___parser_prod___AMinusAssignOp___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8214 */
+  /* parser/parser_prod.nit:10433 */
   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, 8214);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 10433);
   }
   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]);
+  CALL_parser___parser_nodes___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 itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDef].i;
+  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AClosureDef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos267]) 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 = 8218;
+  fra.me.line = 10437;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -44975,20 +54948,20 @@ void parser___parser_prod___AClosureDef___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos267] = 1;
+  init_table[itpos266] = 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 itpos268 = 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; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos268]) 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 = 8220;
+  fra.me.line = 10439;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___init_aclosuredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -45008,40 +54981,40 @@ 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:8220 */
+  /* parser/parser_prod.nit:10439 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8229 */
+  /* parser/parser_prod.nit:10448 */
   CALL_parser___parser_prod___AClosureDef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:8230 */
+  /* parser/parser_prod.nit:10449 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8230);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10449);
   }
   ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8231 */
+  /* parser/parser_prod.nit:10450 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8231);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10450);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-  /* parser/parser_prod.nit:8232 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+  /* parser/parser_prod.nit:10451 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8232);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10451);
   }
   ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8233 */
+  /* parser/parser_prod.nit:10452 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8233);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10452);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+  CALL_parser___parser_nodes___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:8239 */
+  /* parser/parser_prod.nit:10458 */
   ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:8240 */
+  /* parser/parser_prod.nit:10459 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45056,16 +55029,16 @@ 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:8241 */
+    /* parser/parser_prod.nit:10460 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8241);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10460);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:8243 */
+  /* parser/parser_prod.nit:10462 */
   ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:8244 */
+  /* parser/parser_prod.nit:10463 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45080,16 +55053,16 @@ 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:8245 */
+    /* parser/parser_prod.nit:10464 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8245);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10464);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:8247 */
+  /* parser/parser_prod.nit:10466 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:8248 */
+  /* parser/parser_prod.nit:10467 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45104,15 +55077,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:8249 */
+    /* parser/parser_prod.nit:10468 */
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8249);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10468);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos268] = 1;
+  init_table[itpos267] = 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){
@@ -45120,7 +55093,7 @@ 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:8234 */
+    /* parser/parser_prod.nit:10453 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -45134,26 +55107,26 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8235 */
+    /* parser/parser_prod.nit:10454 */
     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, 8235);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10454);
     }
-    /* parser/parser_prod.nit:8236 */
+    /* parser/parser_prod.nit:10455 */
     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, 8236);
+      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 10455);
     }
     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:8237 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[7]);
+    /* parser/parser_prod.nit:10456 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AClosureDef___replace_child[] = "parser_prod::AClosureDef::(parser_nodes::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;
@@ -45164,7 +55137,7 @@ 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 = 8253;
+  fra.me.line = 10472;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -45176,11 +55149,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:8255 */
+  /* parser/parser_prod.nit:10474 */
   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, 8255);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 10474);
   }
   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]));
@@ -45190,7 +55163,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8256 */
+    /* parser/parser_prod.nit:10475 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45205,32 +55178,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:8257 */
+      /* parser/parser_prod.nit:10476 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8257);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10476);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8258 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10477 */
       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, 8258);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10477);
       }
-      /* parser/parser_prod.nit:8259 */
+      /* parser/parser_prod.nit:10478 */
       ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8261 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8261);
+      /* parser/parser_prod.nit:10480 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10480);
     }
-    /* parser/parser_prod.nit:8263 */
+    /* parser/parser_prod.nit:10482 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8265 */
+  /* parser/parser_prod.nit:10484 */
   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, 8265);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 10484);
   }
   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]));
@@ -45240,7 +55213,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8266 */
+    /* parser/parser_prod.nit:10485 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45255,71 +55228,65 @@ 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:8267 */
+      /* parser/parser_prod.nit:10486 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8267);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10486);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8268 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10487 */
       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, 8268);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10487);
       }
-      /* parser/parser_prod.nit:8269 */
+      /* parser/parser_prod.nit:10488 */
       ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8271 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8271);
+      /* parser/parser_prod.nit:10490 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10490);
     }
-    /* parser/parser_prod.nit:8273 */
+    /* parser/parser_prod.nit:10492 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8275 */
+  /* parser/parser_prod.nit:10494 */
   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, 8275);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 10494);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:8275 */
+      /* parser/parser_prod.nit:10494 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:8276 */
+      /* parser/parser_prod.nit:10495 */
       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, 8276);
+        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 10495);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:8277 */
+        /* parser/parser_prod.nit:10496 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -45334,52 +55301,52 @@ 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:8278 */
+          /* parser/parser_prod.nit:10497 */
           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, 8278);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10497);
           }
-          /* parser/parser_prod.nit:8279 */
+          /* parser/parser_prod.nit:10498 */
           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, 8279);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 10498);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(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:8280 */
+          /* parser/parser_prod.nit:10499 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8280);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10499);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:8282 */
+          /* parser/parser_prod.nit:10501 */
           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, 8282);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 10501);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(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:8284 */
+        /* parser/parser_prod.nit:10503 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:8287 */
+  /* parser/parser_prod.nit:10506 */
   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)) {
@@ -45394,7 +55361,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8288 */
+    /* parser/parser_prod.nit:10507 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45409,28 +55376,28 @@ 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:8289 */
+      /* parser/parser_prod.nit:10508 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8289);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10508);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8290 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10509 */
       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, 8290);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10509);
       }
-      /* parser/parser_prod.nit:8291 */
+      /* parser/parser_prod.nit:10510 */
       ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8293 */
+      /* parser/parser_prod.nit:10512 */
       ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:8295 */
+    /* parser/parser_prod.nit:10514 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8297 */
+  /* parser/parser_prod.nit:10516 */
   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)) {
@@ -45445,7 +55412,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8298 */
+    /* parser/parser_prod.nit:10517 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45460,28 +55427,28 @@ 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:8299 */
+      /* parser/parser_prod.nit:10518 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8299);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10518);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8300 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10519 */
       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, 8300);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10519);
       }
-      /* parser/parser_prod.nit:8301 */
+      /* parser/parser_prod.nit:10520 */
       ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8303 */
+      /* parser/parser_prod.nit:10522 */
       ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:8305 */
+    /* parser/parser_prod.nit:10524 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8307 */
+  /* parser/parser_prod.nit:10526 */
   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)) {
@@ -45496,7 +55463,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8308 */
+    /* parser/parser_prod.nit:10527 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45511,32 +55478,208 @@ 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:8309 */
+      /* parser/parser_prod.nit:10528 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8309);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10528);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8310 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10529 */
       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, 8310);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10529);
       }
-      /* parser/parser_prod.nit:8311 */
+      /* parser/parser_prod.nit:10530 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8313 */
+      /* parser/parser_prod.nit:10532 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:8315 */
+    /* parser/parser_prod.nit:10534 */
     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)";
+static const char LOCATE_parser___parser_prod___AClosureDef___n_bang__eq[] = "parser_prod::AClosureDef::(parser_nodes::AClosureDef::n_bang=)";
+void parser___parser_prod___AClosureDef___n_bang__eq(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 = 10538;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___n_bang__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:10540 */
+  ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10541 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_id__eq[] = "parser_prod::AClosureDef::(parser_nodes::AClosureDef::n_id=)";
+void parser___parser_prod___AClosureDef___n_id__eq(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 = 10543;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___n_id__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:10545 */
+  ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10546 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_kwdo__eq[] = "parser_prod::AClosureDef::(parser_nodes::AClosureDef::n_kwdo=)";
+void parser___parser_prod___AClosureDef___n_kwdo__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 10548;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___n_kwdo__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:10550 */
+  ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10551 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:10552 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10552);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_expr__eq[] = "parser_prod::AClosureDef::(parser_nodes::AClosureDef::n_expr=)";
+void parser___parser_prod___AClosureDef___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 10555;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___n_expr__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:10557 */
+  ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10558 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:10559 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10559);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_label__eq[] = "parser_prod::AClosureDef::(parser_nodes::ALabelable::n_label=)";
+void parser___parser_prod___AClosureDef___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 10562;
+  fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___n_label__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:10564 */
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10565 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:10566 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10566);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AClosureDef::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -45544,7 +55687,7 @@ void parser___parser_prod___AClosureDef___visit_all(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 = 8319;
+  fra.me.line = 10571;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -45555,33 +55698,33 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8319 */
+  /* parser/parser_prod.nit:10571 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8321 */
+  /* parser/parser_prod.nit:10573 */
   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, 8321);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 10573);
   }
   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:8322 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:10574 */
   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, 8322);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 10574);
   }
   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:8323 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:10575 */
   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, 8323);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 10575);
   }
   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:8326 */
+  /* parser/parser_prod.nit:10578 */
   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)) {
@@ -45597,16 +55740,16 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8327 */
+    /* parser/parser_prod.nit:10579 */
     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, 8327);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10579);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8329 */
+  /* parser/parser_prod.nit:10581 */
   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)) {
@@ -45622,16 +55765,16 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8330 */
+    /* parser/parser_prod.nit:10582 */
     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, 8330);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10582);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8332 */
+  /* parser/parser_prod.nit:10584 */
   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)) {
@@ -45647,14 +55790,14 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8333 */
+    /* parser/parser_prod.nit:10585 */
     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, 8333);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10585);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -45675,20 +55818,20 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8324 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:10576 */
+    CALL_parser___parser_nodes___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 itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASimpleClosureId].i;
+  int itpos268 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASimpleClosureId].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos269]) 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 = 8338;
+  fra.me.line = 10590;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -45696,19 +55839,19 @@ void parser___parser_prod___ASimpleClosureId___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos269] = 1;
+  init_table[itpos268] = 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 itpos270 = 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; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos270]) 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 = 8340;
+  fra.me.line = 10592;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___init_asimpleclosureid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -45718,28 +55861,28 @@ void parser___parser_prod___ASimpleClosureId___init_asimpleclosureid(val_t p0, v
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8340 */
+  /* parser/parser_prod.nit:10592 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8344 */
+  /* parser/parser_prod.nit:10596 */
   CALL_parser___parser_prod___ASimpleClosureId___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8345 */
+  /* parser/parser_prod.nit:10597 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8345);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10597);
   }
   ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8346 */
+  /* parser/parser_prod.nit:10598 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8346);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10598);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos270] = 1;
+  init_table[itpos269] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASimpleClosureId___replace_child[] = "parser_prod::ASimpleClosureId::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ASimpleClosureId___replace_child[] = "parser_prod::ASimpleClosureId::(parser_nodes::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;
@@ -45747,7 +55890,7 @@ 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 = 8349;
+  fra.me.line = 10601;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -45759,11 +55902,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:8351 */
+  /* parser/parser_prod.nit:10603 */
   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, 8351);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 10603);
   }
   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]));
@@ -45773,7 +55916,189 @@ void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8352 */
+    /* parser/parser_prod.nit:10604 */
+    REGB0 = TAG_Bool(fra.me.REG[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:10605 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10605);
+      }
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10606 */
+      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, 10606);
+      }
+      /* parser/parser_prod.nit:10607 */
+      ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:10609 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10609);
+    }
+    /* parser/parser_prod.nit:10611 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ASimpleClosureId___n_id__eq[] = "parser_prod::ASimpleClosureId::(parser_nodes::ASimpleClosureId::n_id=)";
+void parser___parser_prod___ASimpleClosureId___n_id__eq(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 = 10615;
+  fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___n_id__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:10617 */
+  ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10618 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ASimpleClosureId___visit_all[] = "parser_prod::ASimpleClosureId::(parser_nodes::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 = 10622;
+  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:10624 */
+  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, 10624);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
+  CALL_parser___parser_nodes___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 itpos270 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ABreakClosureId].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 10628;
+  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[itpos270] = 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 itpos271 = 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[itpos271]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 10630;
+  fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___init_abreakclosureid;
+  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:10630 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:10634 */
+  CALL_parser___parser_prod___ABreakClosureId___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:10635 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10635);
+  }
+  ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10636 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10636);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos271] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ABreakClosureId___replace_child[] = "parser_prod::ABreakClosureId::(parser_nodes::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;
+  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 = 10639;
+  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;
+  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:10641 */
+  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, 10641);
+  }
+  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]));
+  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:10642 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45788,40 +56113,39 @@ 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:8353 */
+      /* parser/parser_prod.nit:10643 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8353);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10643);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8354 */
-      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*/;
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10644 */
+      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, 8354);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10644);
       }
-      /* parser/parser_prod.nit:8355 */
-      ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:10645 */
+      ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8357 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8357);
+      /* parser/parser_prod.nit:10647 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10647);
     }
-    /* parser/parser_prod.nit:8359 */
+    /* parser/parser_prod.nit:10649 */
     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){
+static const char LOCATE_parser___parser_prod___ABreakClosureId___n_kwbreak__eq[] = "parser_prod::ABreakClosureId::(parser_nodes::ABreakClosureId::n_kwbreak=)";
+void parser___parser_prod___ABreakClosureId___n_kwbreak__eq(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 = 8363;
-  fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___visit_all;
+  fra.me.line = 10653;
+  fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___n_kwbreak__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
@@ -45829,158 +56153,21 @@ void parser___parser_prod___ASimpleClosureId___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8365 */
-  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, 8365);
-  }
-  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 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[itpos271]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8369;
-  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;
+  /* parser/parser_prod.nit:10655 */
+  ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10656 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  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 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[itpos272]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8371;
-  fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___init_abreakclosureid;
-  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:8371 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8375 */
-  CALL_parser___parser_prod___ABreakClosureId___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8376 */
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8376);
-  }
-  ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8377 */
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8377);
-  }
-  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;
-  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;
-  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 = 8380;
-  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;
-  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:8382 */
-  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, 8382);
-  }
-  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]));
-  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___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8385);
-      }
-      /* parser/parser_prod.nit:8386 */
-      ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* parser/parser_prod.nit:8388 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8388);
-    }
-    /* parser/parser_prod.nit:8390 */
-    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)";
+static const char LOCATE_parser___parser_prod___ABreakClosureId___visit_all[] = "parser_prod::ABreakClosureId::(parser_nodes::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 = 8394;
+  fra.me.line = 10660;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -45989,26 +56176,26 @@ void parser___parser_prod___ABreakClosureId___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8396 */
+  /* parser/parser_prod.nit:10662 */
   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, 8396);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 10662);
   }
   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]);
+  CALL_parser___parser_nodes___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 itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuleName].i;
+  int itpos272 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuleName].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos273]) 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 = 8400;
+  fra.me.line = 10666;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -46016,20 +56203,20 @@ void parser___parser_prod___AModuleName___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos273] = 1;
+  init_table[itpos272] = 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 itpos274 = 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; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos274]) 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 = 8402;
+  fra.me.line = 10668;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___init_amodulename;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -46043,13 +56230,13 @@ void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8402 */
+  /* parser/parser_prod.nit:10668 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8408 */
+  /* parser/parser_prod.nit:10674 */
   CALL_parser___parser_prod___AModuleName___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:8409 */
+  /* parser/parser_prod.nit:10675 */
   ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8410 */
+  /* parser/parser_prod.nit:10676 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46064,29 +56251,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:8411 */
+    /* parser/parser_prod.nit:10677 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8411);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10677);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    CALL_parser___parser_nodes___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:8418 */
+  /* parser/parser_prod.nit:10684 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8418);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10684);
   }
   ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8419 */
+  /* parser/parser_prod.nit:10685 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8419);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10685);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos274] = 1;
+  init_table[itpos273] = 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){
@@ -46094,7 +56281,7 @@ 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:8413 */
+    /* parser/parser_prod.nit:10679 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -46108,26 +56295,26 @@ void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, v
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8414 */
+    /* parser/parser_prod.nit:10680 */
     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, 8414);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10680);
     }
-    /* parser/parser_prod.nit:8415 */
+    /* parser/parser_prod.nit:10681 */
     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, 8415);
+      nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 10681);
     }
     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:8416 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
+    /* parser/parser_prod.nit:10682 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AModuleName___replace_child[] = "parser_prod::AModuleName::(parser_nodes::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;
@@ -46138,7 +56325,7 @@ 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 = 8422;
+  fra.me.line = 10688;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46150,7 +56337,7 @@ 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:8424 */
+  /* parser/parser_prod.nit:10690 */
   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)) {
@@ -46165,7 +56352,7 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8425 */
+    /* parser/parser_prod.nit:10691 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -46180,71 +56367,65 @@ 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:8426 */
+      /* parser/parser_prod.nit:10692 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8426);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10692);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8427 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10693 */
       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, 8427);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10693);
       }
-      /* parser/parser_prod.nit:8428 */
+      /* parser/parser_prod.nit:10694 */
       ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8430 */
+      /* parser/parser_prod.nit:10696 */
       ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:8432 */
+    /* parser/parser_prod.nit:10698 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8434 */
+  /* parser/parser_prod.nit:10700 */
   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, 8434);
+    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 10700);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:8434 */
+      /* parser/parser_prod.nit:10700 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:8435 */
+      /* parser/parser_prod.nit:10701 */
       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, 8435);
+        nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 10701);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:8436 */
+        /* parser/parser_prod.nit:10702 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -46259,56 +56440,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:8437 */
+          /* parser/parser_prod.nit:10703 */
           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, 8437);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10703);
           }
-          /* parser/parser_prod.nit:8438 */
+          /* parser/parser_prod.nit:10704 */
           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, 8438);
+            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 10704);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(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:8439 */
+          /* parser/parser_prod.nit:10705 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8439);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10705);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:8441 */
+          /* parser/parser_prod.nit:10707 */
           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, 8441);
+            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 10707);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(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:8443 */
+        /* parser/parser_prod.nit:10709 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:8446 */
+  /* parser/parser_prod.nit:10712 */
   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, 8446);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 10712);
   }
   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]));
@@ -46318,7 +56499,7 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8447 */
+    /* parser/parser_prod.nit:10713 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -46333,32 +56514,98 @@ 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:8448 */
+      /* parser/parser_prod.nit:10714 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8448);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10714);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8449 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10715 */
       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, 8449);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10715);
       }
-      /* parser/parser_prod.nit:8450 */
+      /* parser/parser_prod.nit:10716 */
       ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8452 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8452);
+      /* parser/parser_prod.nit:10718 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10718);
     }
-    /* parser/parser_prod.nit:8454 */
+    /* parser/parser_prod.nit:10720 */
     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)";
+static const char LOCATE_parser___parser_prod___AModuleName___n_quad__eq[] = "parser_prod::AModuleName::(parser_nodes::AModuleName::n_quad=)";
+void parser___parser_prod___AModuleName___n_quad__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 10724;
+  fra.me.meth = LOCATE_parser___parser_prod___AModuleName___n_quad__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:10726 */
+  ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10727 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:10728 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10728);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_id__eq[] = "parser_prod::AModuleName::(parser_nodes::AModuleName::n_id=)";
+void parser___parser_prod___AModuleName___n_id__eq(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 = 10731;
+  fra.me.meth = LOCATE_parser___parser_prod___AModuleName___n_id__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:10733 */
+  ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10734 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AModuleName::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -46366,7 +56613,7 @@ void parser___parser_prod___AModuleName___visit_all(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 = 8458;
+  fra.me.line = 10738;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46377,9 +56624,9 @@ void parser___parser_prod___AModuleName___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8458 */
+  /* parser/parser_prod.nit:10738 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8460 */
+  /* parser/parser_prod.nit:10740 */
   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)) {
@@ -46395,31 +56642,31 @@ void parser___parser_prod___AModuleName___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8461 */
+    /* parser/parser_prod.nit:10741 */
     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, 8461);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10741);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8463 */
+  /* parser/parser_prod.nit:10743 */
   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, 8463);
+    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 10743);
   }
   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:8466 */
+  /* parser/parser_prod.nit:10746 */
   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, 8466);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 10746);
   }
   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]);
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -46439,20 +56686,20 @@ void parser___parser_prod___AModuleName___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8464 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:10744 */
+    CALL_parser___parser_nodes___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 itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCalls].i;
+  int itpos274 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCalls].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos275]) 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 = 8470;
+  fra.me.line = 10750;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -46460,19 +56707,19 @@ void parser___parser_prod___AExternCalls___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos275] = 1;
+  init_table[itpos274] = 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 itpos276 = 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; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos276]) 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 = 8472;
+  fra.me.line = 10752;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___init_aexterncalls;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46484,26 +56731,26 @@ void parser___parser_prod___AExternCalls___init_aexterncalls(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:8472 */
+  /* parser/parser_prod.nit:10752 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8477 */
+  /* parser/parser_prod.nit:10757 */
   CALL_parser___parser_prod___AExternCalls___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:8478 */
+  /* parser/parser_prod.nit:10758 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8478);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10758);
   }
   ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8479 */
+  /* parser/parser_prod.nit:10759 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8479);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10759);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  CALL_parser___parser_nodes___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[itpos276] = 1;
+  init_table[itpos275] = 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){
@@ -46511,7 +56758,7 @@ 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:8480 */
+    /* parser/parser_prod.nit:10760 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -46525,26 +56772,26 @@ void parser___parser_prod___AExternCalls___init_aexterncalls(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8481 */
+    /* parser/parser_prod.nit:10761 */
     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, 8481);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10761);
     }
-    /* parser/parser_prod.nit:8482 */
+    /* parser/parser_prod.nit:10762 */
     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, 8482);
+      nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 10762);
     }
     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:8483 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[3]);
+    /* parser/parser_prod.nit:10763 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AExternCalls___replace_child[] = "parser_prod::AExternCalls::(parser_nodes::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;
@@ -46555,7 +56802,7 @@ 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 = 8487;
+  fra.me.line = 10767;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46567,11 +56814,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:8489 */
+  /* parser/parser_prod.nit:10769 */
   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, 8489);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 10769);
   }
   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]));
@@ -46581,7 +56828,7 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8490 */
+    /* parser/parser_prod.nit:10770 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -46596,71 +56843,65 @@ 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:8491 */
+      /* parser/parser_prod.nit:10771 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8491);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10771);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8492 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10772 */
       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, 8492);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10772);
       }
-      /* parser/parser_prod.nit:8493 */
+      /* parser/parser_prod.nit:10773 */
       ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8495 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8495);
+      /* parser/parser_prod.nit:10775 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10775);
     }
-    /* parser/parser_prod.nit:8497 */
+    /* parser/parser_prod.nit:10777 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8499 */
+  /* parser/parser_prod.nit:10779 */
   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, 8499);
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 10779);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:8499 */
+      /* parser/parser_prod.nit:10779 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:8500 */
+      /* parser/parser_prod.nit:10780 */
       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, 8500);
+        nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 10780);
       }
       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___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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:8501 */
+        /* parser/parser_prod.nit:10781 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -46675,47 +56916,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:8502 */
+          /* parser/parser_prod.nit:10782 */
           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, 8502);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10782);
           }
-          /* parser/parser_prod.nit:8503 */
+          /* parser/parser_prod.nit:10783 */
           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, 8503);
+            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 10783);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(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:8504 */
+          /* parser/parser_prod.nit:10784 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8504);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10784);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:8506 */
+          /* parser/parser_prod.nit:10786 */
           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, 8506);
+            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 10786);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(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:8508 */
+        /* parser/parser_prod.nit:10788 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
@@ -46724,14 +56965,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)";
+static const char LOCATE_parser___parser_prod___AExternCalls___n_kwimport__eq[] = "parser_prod::AExternCalls::(parser_nodes::AExternCalls::n_kwimport=)";
+void parser___parser_prod___AExternCalls___n_kwimport__eq(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 = 10793;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___n_kwimport__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:10795 */
+  ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10796 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AExternCalls___visit_all[] = "parser_prod::AExternCalls::(parser_nodes::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 = 8513;
+  fra.me.line = 10800;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -46741,19 +57004,19 @@ void parser___parser_prod___AExternCalls___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8515 */
+  /* parser/parser_prod.nit:10802 */
   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, 8515);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 10802);
   }
   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:8516 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:10803 */
   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, 8516);
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 10803);
   }
   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));
@@ -46776,20 +57039,20 @@ void parser___parser_prod___AExternCalls___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8517 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:10804 */
+    CALL_parser___parser_nodes___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 itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCall].i;
+  int itpos276 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos277]) 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 = 8522;
+  fra.me.line = 10809;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -46797,37 +57060,37 @@ void parser___parser_prod___AExternCall___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos277] = 1;
+  init_table[itpos276] = 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 itpos278 = 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[itpos278]) 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 = 8524;
+  fra.me.line = 10811;
   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:8526 */
+  /* parser/parser_prod.nit:10813 */
   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[itpos278] = 1;
+  init_table[itpos277] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AExternCall___replace_child[] = "parser_prod::AExternCall::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AExternCall___replace_child[] = "parser_prod::AExternCall::(parser_nodes::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 = 8529;
+  fra.me.line = 10816;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -46841,13 +57104,13 @@ 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)";
+static const char LOCATE_parser___parser_prod___AExternCall___visit_all[] = "parser_prod::AExternCall::(parser_nodes::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 = 8533;
+  fra.me.line = 10822;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -46861,13 +57124,13 @@ void parser___parser_prod___AExternCall___visit_all(val_t p0, val_t p1){
 }
 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 itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExternCall].i;
+  int itpos278 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos279]) 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 = 8538;
+  fra.me.line = 10827;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -46875,19 +57138,19 @@ void parser___parser_prod___ASuperExternCall___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos279] = 1;
+  init_table[itpos278] = 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 itpos280 = 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; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos280]) 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 = 8540;
+  fra.me.line = 10829;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___init_asuperexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -46897,28 +57160,28 @@ void parser___parser_prod___ASuperExternCall___init_asuperexterncall(val_t p0, v
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8540 */
+  /* parser/parser_prod.nit:10829 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8544 */
+  /* parser/parser_prod.nit:10833 */
   CALL_parser___parser_prod___ASuperExternCall___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8545 */
+  /* parser/parser_prod.nit:10834 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8545);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10834);
   }
   ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8546 */
+  /* parser/parser_prod.nit:10835 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8546);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10835);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos280] = 1;
+  init_table[itpos279] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASuperExternCall___replace_child[] = "parser_prod::ASuperExternCall::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ASuperExternCall___replace_child[] = "parser_prod::ASuperExternCall::(parser_nodes::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;
@@ -46926,7 +57189,7 @@ 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 = 8549;
+  fra.me.line = 10838;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46938,11 +57201,11 @@ 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:8551 */
+  /* parser/parser_prod.nit:10840 */
   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, 8551);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 10840);
   }
   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]));
@@ -46952,7 +57215,7 @@ void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8552 */
+    /* parser/parser_prod.nit:10841 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -46967,39 +57230,61 @@ 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:8553 */
+      /* parser/parser_prod.nit:10842 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8553);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10842);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8554 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10843 */
       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, 8554);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10843);
       }
-      /* parser/parser_prod.nit:8555 */
+      /* parser/parser_prod.nit:10844 */
       ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8557 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8557);
+      /* parser/parser_prod.nit:10846 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10846);
     }
-    /* parser/parser_prod.nit:8559 */
+    /* parser/parser_prod.nit:10848 */
     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)";
+static const char LOCATE_parser___parser_prod___ASuperExternCall___n_kwsuper__eq[] = "parser_prod::ASuperExternCall::(parser_nodes::ASuperExternCall::n_kwsuper=)";
+void parser___parser_prod___ASuperExternCall___n_kwsuper__eq(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 = 10852;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___n_kwsuper__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:10854 */
+  ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10855 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ASuperExternCall___visit_all[] = "parser_prod::ASuperExternCall::(parser_nodes::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 = 8563;
+  fra.me.line = 10859;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -47008,26 +57293,26 @@ void parser___parser_prod___ASuperExternCall___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8565 */
+  /* parser/parser_prod.nit:10861 */
   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, 8565);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 10861);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos280 = 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;
+  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 = 8569;
+  fra.me.line = 10865;
   fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -47035,19 +57320,19 @@ void parser___parser_prod___ALocalPropExternCall___empty_init(val_t p0, int* ini
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos281] = 1;
+  init_table[itpos280] = 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;
+  int itpos281 = 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;
+  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 = 8571;
+  fra.me.line = 10867;
   fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -47057,28 +57342,28 @@ void parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8571 */
+  /* parser/parser_prod.nit:10867 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8575 */
+  /* parser/parser_prod.nit:10871 */
   CALL_parser___parser_prod___ALocalPropExternCall___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8576 */
+  /* parser/parser_prod.nit:10872 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8576);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10872);
   }
   ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8577 */
+  /* parser/parser_prod.nit:10873 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8577);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10873);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos281] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ALocalPropExternCall___replace_child[] = "parser_prod::ALocalPropExternCall::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ALocalPropExternCall___replace_child[] = "parser_prod::ALocalPropExternCall::(parser_nodes::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;
@@ -47086,7 +57371,7 @@ void parser___parser_prod___ALocalPropExternCall___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 = 8580;
+  fra.me.line = 10876;
   fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -47098,11 +57383,11 @@ 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:8582 */
+  /* parser/parser_prod.nit:10878 */
   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, 8582);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 10878);
   }
   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]));
@@ -47112,7 +57397,7 @@ void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8583 */
+    /* parser/parser_prod.nit:10879 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -47127,39 +57412,61 @@ 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:8584 */
+      /* parser/parser_prod.nit:10880 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8584);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10880);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8585 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10881 */
       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, 8585);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10881);
       }
-      /* parser/parser_prod.nit:8586 */
+      /* parser/parser_prod.nit:10882 */
       ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8588 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8588);
+      /* parser/parser_prod.nit:10884 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10884);
     }
-    /* parser/parser_prod.nit:8590 */
+    /* parser/parser_prod.nit:10886 */
     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)";
+static const char LOCATE_parser___parser_prod___ALocalPropExternCall___n_methid__eq[] = "parser_prod::ALocalPropExternCall::(parser_nodes::ALocalPropExternCall::n_methid=)";
+void parser___parser_prod___ALocalPropExternCall___n_methid__eq(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 = 10890;
+  fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___n_methid__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:10892 */
+  ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10893 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::ALocalPropExternCall::(parser_nodes::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 = 8594;
+  fra.me.line = 10897;
   fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -47168,26 +57475,26 @@ void parser___parser_prod___ALocalPropExternCall___visit_all(val_t p0, val_t p1)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8596 */
+  /* parser/parser_prod.nit:10899 */
   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, 8596);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 10899);
   }
   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]);
+  CALL_parser___parser_nodes___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;
+  int itpos282 = 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;
+  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 = 8600;
+  fra.me.line = 10903;
   fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -47195,20 +57502,20 @@ void parser___parser_prod___AFullPropExternCall___empty_init(val_t p0, int* init
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos283] = 1;
+  init_table[itpos282] = 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;
+  int itpos283 = 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;
+  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 = 8602;
+  fra.me.line = 10905;
   fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -47222,26 +57529,26 @@ void parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8602 */
+  /* parser/parser_prod.nit:10905 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8608 */
+  /* parser/parser_prod.nit:10911 */
   CALL_parser___parser_prod___AFullPropExternCall___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:8609 */
+  /* parser/parser_prod.nit:10912 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8609);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10912);
   }
   ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8610 */
+  /* parser/parser_prod.nit:10913 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8610);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10913);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8611 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:10914 */
   ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8612 */
+  /* parser/parser_prod.nit:10915 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -47256,31 +57563,31 @@ void parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8613 */
+    /* parser/parser_prod.nit:10916 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8613);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10916);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:8615 */
+  /* parser/parser_prod.nit:10918 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8615);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10918);
   }
   ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8616 */
+  /* parser/parser_prod.nit:10919 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8616);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10919);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___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;
+  init_table[itpos283] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AFullPropExternCall___replace_child[] = "parser_prod::AFullPropExternCall::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AFullPropExternCall___replace_child[] = "parser_prod::AFullPropExternCall::(parser_nodes::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;
@@ -47288,7 +57595,7 @@ void parser___parser_prod___AFullPropExternCall___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 = 8619;
+  fra.me.line = 10922;
   fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -47300,11 +57607,11 @@ 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:8621 */
+  /* parser/parser_prod.nit:10924 */
   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, 8621);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 10924);
   }
   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]));
@@ -47314,7 +57621,7 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8622 */
+    /* parser/parser_prod.nit:10925 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -47329,28 +57636,28 @@ 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:8623 */
+      /* parser/parser_prod.nit:10926 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8623);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10926);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8624 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10927 */
       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, 8624);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10927);
       }
-      /* parser/parser_prod.nit:8625 */
+      /* parser/parser_prod.nit:10928 */
       ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8627 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8627);
+      /* parser/parser_prod.nit:10930 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10930);
     }
-    /* parser/parser_prod.nit:8629 */
+    /* parser/parser_prod.nit:10932 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8631 */
+  /* parser/parser_prod.nit:10934 */
   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)) {
@@ -47365,7 +57672,7 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8632 */
+    /* parser/parser_prod.nit:10935 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -47380,32 +57687,32 @@ 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:8633 */
+      /* parser/parser_prod.nit:10936 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8633);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10936);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8634 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10937 */
       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, 8634);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10937);
       }
-      /* parser/parser_prod.nit:8635 */
+      /* parser/parser_prod.nit:10938 */
       ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8637 */
+      /* parser/parser_prod.nit:10940 */
       ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:8639 */
+    /* parser/parser_prod.nit:10942 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8641 */
+  /* parser/parser_prod.nit:10944 */
   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, 8641);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 10944);
   }
   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]));
@@ -47415,7 +57722,7 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8642 */
+    /* parser/parser_prod.nit:10945 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -47430,32 +57737,120 @@ 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:8643 */
+      /* parser/parser_prod.nit:10946 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8643);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10946);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8644 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:10947 */
       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, 8644);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 10947);
       }
-      /* parser/parser_prod.nit:8645 */
+      /* parser/parser_prod.nit:10948 */
       ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8647 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8647);
+      /* parser/parser_prod.nit:10950 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 10950);
     }
-    /* parser/parser_prod.nit:8649 */
+    /* parser/parser_prod.nit:10952 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AFullPropExternCall___visit_all[] = "parser_prod::AFullPropExternCall::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AFullPropExternCall___n_classid__eq[] = "parser_prod::AFullPropExternCall::(parser_nodes::AFullPropExternCall::n_classid=)";
+void parser___parser_prod___AFullPropExternCall___n_classid__eq(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 = 10956;
+  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___n_classid__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:10958 */
+  ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10959 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___n_quad__eq[] = "parser_prod::AFullPropExternCall::(parser_nodes::AFullPropExternCall::n_quad=)";
+void parser___parser_prod___AFullPropExternCall___n_quad__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 10961;
+  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___n_quad__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:10963 */
+  ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10964 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:10965 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10965);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___n_methid__eq[] = "parser_prod::AFullPropExternCall::(parser_nodes::AFullPropExternCall::n_methid=)";
+void parser___parser_prod___AFullPropExternCall___n_methid__eq(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 = 10968;
+  fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___n_methid__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:10970 */
+  ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:10971 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AFullPropExternCall::(parser_nodes::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;
@@ -47463,7 +57858,7 @@ void parser___parser_prod___AFullPropExternCall___visit_all(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 = 8653;
+  fra.me.line = 10975;
   fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -47474,17 +57869,17 @@ void parser___parser_prod___AFullPropExternCall___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8653 */
+  /* parser/parser_prod.nit:10975 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8655 */
+  /* parser/parser_prod.nit:10977 */
   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_classid", LOCATE_parser___parser_prod, 8655);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 10977);
   }
   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:8656 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:10978 */
   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)) {
@@ -47500,35 +57895,35 @@ void parser___parser_prod___AFullPropExternCall___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8657 */
+    /* parser/parser_prod.nit:10979 */
     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, 8657);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10979);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8659 */
+  /* parser/parser_prod.nit:10981 */
   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, 8659);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 10981);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos284 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInitPropExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos285]) return;
+  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 = 8663;
+  fra.me.line = 10985;
   fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -47536,19 +57931,19 @@ void parser___parser_prod___AInitPropExternCall___empty_init(val_t p0, int* init
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos285] = 1;
+  init_table[itpos284] = 1;
   return;
 }
 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;
+  int itpos285 = 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[itpos286]) 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 = 8665;
+  fra.me.line = 10987;
   fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -47558,28 +57953,28 @@ void parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8665 */
+  /* parser/parser_prod.nit:10987 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8669 */
+  /* parser/parser_prod.nit:10991 */
   CALL_parser___parser_prod___AInitPropExternCall___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8670 */
+  /* parser/parser_prod.nit:10992 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8670);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 10992);
   }
   ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8671 */
+  /* parser/parser_prod.nit:10993 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8671);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 10993);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos286] = 1;
+  init_table[itpos285] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AInitPropExternCall___replace_child[] = "parser_prod::AInitPropExternCall::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AInitPropExternCall___replace_child[] = "parser_prod::AInitPropExternCall::(parser_nodes::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;
@@ -47587,7 +57982,7 @@ void parser___parser_prod___AInitPropExternCall___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 = 8674;
+  fra.me.line = 10996;
   fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -47599,11 +57994,11 @@ 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:8676 */
+  /* parser/parser_prod.nit:10998 */
   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_classid", LOCATE_parser___parser_prod, 8676);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 10998);
   }
   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]));
@@ -47613,7 +58008,7 @@ void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8677 */
+    /* parser/parser_prod.nit:10999 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -47628,39 +58023,61 @@ 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:8678 */
+      /* parser/parser_prod.nit:11000 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8678);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11000);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8679 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11001 */
       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, 8679);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11001);
       }
-      /* parser/parser_prod.nit:8680 */
+      /* parser/parser_prod.nit:11002 */
       ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8682 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8682);
+      /* parser/parser_prod.nit:11004 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11004);
     }
-    /* parser/parser_prod.nit:8684 */
+    /* parser/parser_prod.nit:11006 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AInitPropExternCall___visit_all[] = "parser_prod::AInitPropExternCall::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AInitPropExternCall___n_classid__eq[] = "parser_prod::AInitPropExternCall::(parser_nodes::AInitPropExternCall::n_classid=)";
+void parser___parser_prod___AInitPropExternCall___n_classid__eq(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 = 11010;
+  fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___n_classid__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:11012 */
+  ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11013 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AInitPropExternCall___visit_all[] = "parser_prod::AInitPropExternCall::(parser_nodes::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 = 8688;
+  fra.me.line = 11017;
   fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -47669,26 +58086,26 @@ void parser___parser_prod___AInitPropExternCall___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8690 */
+  /* parser/parser_prod.nit:11019 */
   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_classid", LOCATE_parser___parser_prod, 8690);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 11019);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACastAsExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos287]) 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 = 8694;
+  fra.me.line = 11023;
   fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -47696,19 +58113,19 @@ void parser___parser_prod___ACastAsExternCall___empty_init(val_t p0, int* init_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos287] = 1;
+  init_table[itpos286] = 1;
   return;
 }
 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;
+  int itpos287 = 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 tmp;
-  if (init_table[itpos288]) 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 = 8696;
+  fra.me.line = 11025;
   fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___init_acastasexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -47722,54 +58139,54 @@ void parser___parser_prod___ACastAsExternCall___init_acastasexterncall(val_t p0,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8696 */
+  /* parser/parser_prod.nit:11025 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8702 */
+  /* parser/parser_prod.nit:11031 */
   CALL_parser___parser_prod___ACastAsExternCall___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:8703 */
+  /* parser/parser_prod.nit:11032 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8703);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11032);
   }
   ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8704 */
+  /* parser/parser_prod.nit:11033 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8704);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11033);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8705 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:11034 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8705);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11034);
   }
   ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8706 */
+  /* parser/parser_prod.nit:11035 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8706);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11035);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8707 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:11036 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8707);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11036);
   }
   ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8708 */
+  /* parser/parser_prod.nit:11037 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8708);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11037);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos288] = 1;
+  init_table[itpos287] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ACastAsExternCall___replace_child[] = "parser_prod::ACastAsExternCall::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ACastAsExternCall___replace_child[] = "parser_prod::ACastAsExternCall::(parser_nodes::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;
@@ -47777,7 +58194,7 @@ void parser___parser_prod___ACastAsExternCall___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 = 8711;
+  fra.me.line = 11040;
   fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -47789,11 +58206,11 @@ 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:8713 */
+  /* parser/parser_prod.nit:11042 */
   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_from_type", LOCATE_parser___parser_prod, 8713);
+    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 11042);
   }
   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]));
@@ -47803,7 +58220,7 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8714 */
+    /* parser/parser_prod.nit:11043 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -47818,32 +58235,32 @@ 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:8715 */
+      /* parser/parser_prod.nit:11044 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8715);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11044);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8716 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11045 */
       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, 8716);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11045);
       }
-      /* parser/parser_prod.nit:8717 */
+      /* parser/parser_prod.nit:11046 */
       ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8719 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8719);
+      /* parser/parser_prod.nit:11048 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11048);
     }
-    /* parser/parser_prod.nit:8721 */
+    /* parser/parser_prod.nit:11050 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8723 */
+  /* parser/parser_prod.nit:11052 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8723);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 11052);
   }
   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]));
@@ -47853,7 +58270,7 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8724 */
+    /* parser/parser_prod.nit:11053 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -47868,32 +58285,32 @@ 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:8725 */
+      /* parser/parser_prod.nit:11054 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8725);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11054);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8726 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11055 */
       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, 8726);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11055);
       }
-      /* parser/parser_prod.nit:8727 */
+      /* parser/parser_prod.nit:11056 */
       ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8729 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8729);
+      /* parser/parser_prod.nit:11058 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11058);
     }
-    /* parser/parser_prod.nit:8731 */
+    /* parser/parser_prod.nit:11060 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8733 */
+  /* parser/parser_prod.nit:11062 */
   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_to_type", LOCATE_parser___parser_prod, 8733);
+    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 11062);
   }
   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]));
@@ -47903,7 +58320,7 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8734 */
+    /* parser/parser_prod.nit:11063 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -47918,39 +58335,105 @@ 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:8735 */
+      /* parser/parser_prod.nit:11064 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8735);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11064);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8736 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11065 */
       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, 8736);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11065);
       }
-      /* parser/parser_prod.nit:8737 */
+      /* parser/parser_prod.nit:11066 */
       ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8739 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8739);
+      /* parser/parser_prod.nit:11068 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11068);
     }
-    /* parser/parser_prod.nit:8741 */
+    /* parser/parser_prod.nit:11070 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___ACastAsExternCall___visit_all[] = "parser_prod::ACastAsExternCall::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___ACastAsExternCall___n_from_type__eq[] = "parser_prod::ACastAsExternCall::(parser_nodes::ACastAsExternCall::n_from_type=)";
+void parser___parser_prod___ACastAsExternCall___n_from_type__eq(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 = 11074;
+  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___n_from_type__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:11076 */
+  ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11077 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACastAsExternCall___n_kwas__eq[] = "parser_prod::ACastAsExternCall::(parser_nodes::ACastAsExternCall::n_kwas=)";
+void parser___parser_prod___ACastAsExternCall___n_kwas__eq(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 = 11079;
+  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___n_kwas__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:11081 */
+  ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11082 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACastAsExternCall___n_to_type__eq[] = "parser_prod::ACastAsExternCall::(parser_nodes::ACastAsExternCall::n_to_type=)";
+void parser___parser_prod___ACastAsExternCall___n_to_type__eq(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 = 11084;
+  fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___n_to_type__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:11086 */
+  ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11087 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ACastAsExternCall___visit_all[] = "parser_prod::ACastAsExternCall::(parser_nodes::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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8745;
+  fra.me.line = 11091;
   fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -47960,42 +58443,42 @@ void parser___parser_prod___ACastAsExternCall___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8747 */
+  /* parser/parser_prod.nit:11093 */
   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_from_type", LOCATE_parser___parser_prod, 8747);
+    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 11093);
   }
   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:8748 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:11094 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8748);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 11094);
   }
   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:8749 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:11095 */
   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_to_type", LOCATE_parser___parser_prod, 8749);
+    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 11095);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos288 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNullableExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos289]) 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 = 8753;
+  fra.me.line = 11099;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -48003,19 +58486,19 @@ void parser___parser_prod___AAsNullableExternCall___empty_init(val_t p0, int* in
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos289] = 1;
+  init_table[itpos288] = 1;
   return;
 }
 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;
+  int itpos289 = 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[itpos290]) 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 = 8755;
+  fra.me.line = 11101;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -48029,54 +58512,54 @@ void parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8755 */
+  /* parser/parser_prod.nit:11101 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8761 */
+  /* parser/parser_prod.nit:11107 */
   CALL_parser___parser_prod___AAsNullableExternCall___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:8762 */
+  /* parser/parser_prod.nit:11108 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8762);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11108);
   }
   ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8763 */
+  /* parser/parser_prod.nit:11109 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8763);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11109);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8764 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:11110 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8764);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11110);
   }
   ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8765 */
+  /* parser/parser_prod.nit:11111 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8765);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11111);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8766 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:11112 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8766);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11112);
   }
   ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8767 */
+  /* parser/parser_prod.nit:11113 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8767);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11113);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos290] = 1;
+  init_table[itpos289] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAsNullableExternCall___replace_child[] = "parser_prod::AAsNullableExternCall::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAsNullableExternCall___replace_child[] = "parser_prod::AAsNullableExternCall::(parser_nodes::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;
@@ -48084,7 +58567,7 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, 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 = 8770;
+  fra.me.line = 11116;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -48096,11 +58579,11 @@ 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:8772 */
+  /* parser/parser_prod.nit:11118 */
   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, 8772);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 11118);
   }
   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]));
@@ -48110,7 +58593,7 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8773 */
+    /* parser/parser_prod.nit:11119 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -48125,32 +58608,32 @@ 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:8774 */
+      /* parser/parser_prod.nit:11120 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8774);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11120);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8775 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11121 */
       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, 8775);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11121);
       }
-      /* parser/parser_prod.nit:8776 */
+      /* parser/parser_prod.nit:11122 */
       ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8778 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8778);
+      /* parser/parser_prod.nit:11124 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11124);
     }
-    /* parser/parser_prod.nit:8780 */
+    /* parser/parser_prod.nit:11126 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8782 */
+  /* parser/parser_prod.nit:11128 */
   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, 8782);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 11128);
   }
   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]));
@@ -48160,7 +58643,7 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8783 */
+    /* parser/parser_prod.nit:11129 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -48175,32 +58658,32 @@ 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:8784 */
+      /* parser/parser_prod.nit:11130 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8784);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11130);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8785 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11131 */
       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, 8785);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11131);
       }
-      /* parser/parser_prod.nit:8786 */
+      /* parser/parser_prod.nit:11132 */
       ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8788 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8788);
+      /* parser/parser_prod.nit:11134 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11134);
     }
-    /* parser/parser_prod.nit:8790 */
+    /* parser/parser_prod.nit:11136 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8792 */
+  /* parser/parser_prod.nit:11138 */
   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, 8792);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 11138);
   }
   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]));
@@ -48210,7 +58693,7 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8793 */
+    /* parser/parser_prod.nit:11139 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -48225,39 +58708,105 @@ 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:8794 */
+      /* parser/parser_prod.nit:11140 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8794);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11140);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8795 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11141 */
       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, 8795);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11141);
       }
-      /* parser/parser_prod.nit:8796 */
+      /* parser/parser_prod.nit:11142 */
       ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8798 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8798);
+      /* parser/parser_prod.nit:11144 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11144);
     }
-    /* parser/parser_prod.nit:8800 */
+    /* parser/parser_prod.nit:11146 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAsNullableExternCall___visit_all[] = "parser_prod::AAsNullableExternCall::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AAsNullableExternCall___n_type__eq[] = "parser_prod::AAsNullableExternCall::(parser_nodes::AAsNullableExternCall::n_type=)";
+void parser___parser_prod___AAsNullableExternCall___n_type__eq(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 = 11150;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___n_type__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:11152 */
+  ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11153 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsNullableExternCall___n_kwas__eq[] = "parser_prod::AAsNullableExternCall::(parser_nodes::AAsNullableExternCall::n_kwas=)";
+void parser___parser_prod___AAsNullableExternCall___n_kwas__eq(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 = 11155;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___n_kwas__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:11157 */
+  ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11158 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsNullableExternCall___n_kwnullable__eq[] = "parser_prod::AAsNullableExternCall::(parser_nodes::AAsNullableExternCall::n_kwnullable=)";
+void parser___parser_prod___AAsNullableExternCall___n_kwnullable__eq(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 = 11160;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___n_kwnullable__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:11162 */
+  ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11163 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsNullableExternCall___visit_all[] = "parser_prod::AAsNullableExternCall::(parser_nodes::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 = 8804;
+  fra.me.line = 11167;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -48267,42 +58816,42 @@ void parser___parser_prod___AAsNullableExternCall___visit_all(val_t p0, val_t p1
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8806 */
+  /* parser/parser_prod.nit:11169 */
   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, 8806);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 11169);
   }
   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:8807 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:11170 */
   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, 8807);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 11170);
   }
   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:8808 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:11171 */
   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, 8808);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 11171);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos290 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAsNotNullableExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos291]) 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 = 8812;
+  fra.me.line = 11175;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -48310,19 +58859,19 @@ void parser___parser_prod___AAsNotNullableExternCall___empty_init(val_t p0, int*
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos291] = 1;
+  init_table[itpos290] = 1;
   return;
 }
 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;
+  int itpos291 = 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[itpos292]) 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 = 8814;
+  fra.me.line = 11177;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -48338,67 +58887,67 @@ void parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableextern
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:8814 */
+  /* parser/parser_prod.nit:11177 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8821 */
+  /* parser/parser_prod.nit:11184 */
   CALL_parser___parser_prod___AAsNotNullableExternCall___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:8822 */
+  /* parser/parser_prod.nit:11185 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8822);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11185);
   }
   ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8823 */
+  /* parser/parser_prod.nit:11186 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8823);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11186);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:8824 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:11187 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8824);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11187);
   }
   ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8825 */
+  /* parser/parser_prod.nit:11188 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8825);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11188);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:8826 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:11189 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8826);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11189);
   }
   ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8827 */
+  /* parser/parser_prod.nit:11190 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8827);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11190);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:8828 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:11191 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8828);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11191);
   }
   ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:8829 */
+  /* parser/parser_prod.nit:11192 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8829);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11192);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos292] = 1;
+  init_table[itpos291] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAsNotNullableExternCall___replace_child[] = "parser_prod::AAsNotNullableExternCall::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAsNotNullableExternCall___replace_child[] = "parser_prod::AAsNotNullableExternCall::(parser_nodes::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;
@@ -48406,7 +58955,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, 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 = 8832;
+  fra.me.line = 11195;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -48418,11 +58967,11 @@ 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:8834 */
+  /* parser/parser_prod.nit:11197 */
   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, 8834);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 11197);
   }
   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]));
@@ -48432,7 +58981,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8835 */
+    /* parser/parser_prod.nit:11198 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -48447,32 +58996,32 @@ 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:8836 */
+      /* parser/parser_prod.nit:11199 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8836);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11199);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8837 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11200 */
       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, 8837);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11200);
       }
-      /* parser/parser_prod.nit:8838 */
+      /* parser/parser_prod.nit:11201 */
       ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8840 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8840);
+      /* parser/parser_prod.nit:11203 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11203);
     }
-    /* parser/parser_prod.nit:8842 */
+    /* parser/parser_prod.nit:11205 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8844 */
+  /* parser/parser_prod.nit:11207 */
   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, 8844);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 11207);
   }
   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]));
@@ -48482,7 +59031,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8845 */
+    /* parser/parser_prod.nit:11208 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -48497,32 +59046,32 @@ 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:8846 */
+      /* parser/parser_prod.nit:11209 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8846);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11209);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8847 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11210 */
       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, 8847);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11210);
       }
-      /* parser/parser_prod.nit:8848 */
+      /* parser/parser_prod.nit:11211 */
       ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8850 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8850);
+      /* parser/parser_prod.nit:11213 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11213);
     }
-    /* parser/parser_prod.nit:8852 */
+    /* parser/parser_prod.nit:11215 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8854 */
+  /* parser/parser_prod.nit:11217 */
   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, 8854);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 11217);
   }
   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]));
@@ -48532,7 +59081,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8855 */
+    /* parser/parser_prod.nit:11218 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -48547,32 +59096,32 @@ 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:8856 */
+      /* parser/parser_prod.nit:11219 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8856);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11219);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8857 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11220 */
       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, 8857);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11220);
       }
-      /* parser/parser_prod.nit:8858 */
+      /* parser/parser_prod.nit:11221 */
       ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8860 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8860);
+      /* parser/parser_prod.nit:11223 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11223);
     }
-    /* parser/parser_prod.nit:8862 */
+    /* parser/parser_prod.nit:11225 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8864 */
+  /* parser/parser_prod.nit:11227 */
   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, 8864);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 11227);
   }
   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]));
@@ -48582,7 +59131,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8865 */
+    /* parser/parser_prod.nit:11228 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -48597,39 +59146,127 @@ 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:8866 */
+      /* parser/parser_prod.nit:11229 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8866);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11229);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8867 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11230 */
       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, 8867);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11230);
       }
-      /* parser/parser_prod.nit:8868 */
+      /* parser/parser_prod.nit:11231 */
       ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8870 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8870);
+      /* parser/parser_prod.nit:11233 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11233);
     }
-    /* parser/parser_prod.nit:8872 */
+    /* parser/parser_prod.nit:11235 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAsNotNullableExternCall___visit_all[] = "parser_prod::AAsNotNullableExternCall::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AAsNotNullableExternCall___n_type__eq[] = "parser_prod::AAsNotNullableExternCall::(parser_nodes::AAsNotNullableExternCall::n_type=)";
+void parser___parser_prod___AAsNotNullableExternCall___n_type__eq(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 = 11239;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___n_type__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:11241 */
+  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11242 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsNotNullableExternCall___n_kwas__eq[] = "parser_prod::AAsNotNullableExternCall::(parser_nodes::AAsNotNullableExternCall::n_kwas=)";
+void parser___parser_prod___AAsNotNullableExternCall___n_kwas__eq(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 = 11244;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___n_kwas__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:11246 */
+  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11247 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsNotNullableExternCall___n_kwnot__eq[] = "parser_prod::AAsNotNullableExternCall::(parser_nodes::AAsNotNullableExternCall::n_kwnot=)";
+void parser___parser_prod___AAsNotNullableExternCall___n_kwnot__eq(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 = 11249;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___n_kwnot__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:11251 */
+  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11252 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsNotNullableExternCall___n_kwnullable__eq[] = "parser_prod::AAsNotNullableExternCall::(parser_nodes::AAsNotNullableExternCall::n_kwnullable=)";
+void parser___parser_prod___AAsNotNullableExternCall___n_kwnullable__eq(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 = 11254;
+  fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___n_kwnullable__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:11256 */
+  ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11257 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAsNotNullableExternCall___visit_all[] = "parser_prod::AAsNotNullableExternCall::(parser_nodes::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 = 8876;
+  fra.me.line = 11261;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -48639,50 +59276,50 @@ void parser___parser_prod___AAsNotNullableExternCall___visit_all(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8878 */
+  /* parser/parser_prod.nit:11263 */
   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, 8878);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 11263);
   }
   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:8879 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:11264 */
   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, 8879);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 11264);
   }
   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:8880 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:11265 */
   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, 8880);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 11265);
   }
   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:8881 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:11266 */
   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, 8881);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 11266);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos292 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AInLanguage].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos293]) 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 = 8885;
+  fra.me.line = 11270;
   fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -48690,19 +59327,19 @@ void parser___parser_prod___AInLanguage___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos293] = 1;
+  init_table[itpos292] = 1;
   return;
 }
 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;
+  int itpos293 = 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[itpos294]) 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 = 8887;
+  fra.me.line = 11272;
   fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___init_ainlanguage;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -48714,41 +59351,41 @@ void parser___parser_prod___AInLanguage___init_ainlanguage(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:8887 */
+  /* parser/parser_prod.nit:11272 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8892 */
+  /* parser/parser_prod.nit:11277 */
   CALL_parser___parser_prod___AInLanguage___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:8893 */
+  /* parser/parser_prod.nit:11278 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8893);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11278);
   }
   ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8894 */
+  /* parser/parser_prod.nit:11279 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8894);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11279);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:8895 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:11280 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8895);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11280);
   }
   ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8896 */
+  /* parser/parser_prod.nit:11281 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8896);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11281);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos294] = 1;
+  init_table[itpos293] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AInLanguage___replace_child[] = "parser_prod::AInLanguage::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AInLanguage___replace_child[] = "parser_prod::AInLanguage::(parser_nodes::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;
@@ -48756,7 +59393,7 @@ void parser___parser_prod___AInLanguage___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 = 8899;
+  fra.me.line = 11284;
   fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -48768,11 +59405,11 @@ void parser___parser_prod___AInLanguage___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:8901 */
+  /* parser/parser_prod.nit:11286 */
   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_kwin", LOCATE_parser___parser_prod, 8901);
+    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_prod, 11286);
   }
   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]));
@@ -48782,7 +59419,7 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8902 */
+    /* parser/parser_prod.nit:11287 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -48797,32 +59434,32 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8903 */
+      /* parser/parser_prod.nit:11288 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8903);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11288);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8904 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11289 */
       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, 8904);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11289);
       }
-      /* parser/parser_prod.nit:8905 */
+      /* parser/parser_prod.nit:11290 */
       ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8907 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8907);
+      /* parser/parser_prod.nit:11292 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11292);
     }
-    /* parser/parser_prod.nit:8909 */
+    /* parser/parser_prod.nit:11294 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8911 */
+  /* parser/parser_prod.nit:11296 */
   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_string", LOCATE_parser___parser_prod, 8911);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 11296);
   }
   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]));
@@ -48832,7 +59469,7 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8912 */
+    /* parser/parser_prod.nit:11297 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -48847,39 +59484,83 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8913 */
+      /* parser/parser_prod.nit:11298 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8913);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11298);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8914 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11299 */
       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, 8914);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11299);
       }
-      /* parser/parser_prod.nit:8915 */
+      /* parser/parser_prod.nit:11300 */
       ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8917 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8917);
+      /* parser/parser_prod.nit:11302 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11302);
     }
-    /* parser/parser_prod.nit:8919 */
+    /* parser/parser_prod.nit:11304 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AInLanguage___visit_all[] = "parser_prod::AInLanguage::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AInLanguage___n_kwin__eq[] = "parser_prod::AInLanguage::(parser_nodes::AInLanguage::n_kwin=)";
+void parser___parser_prod___AInLanguage___n_kwin__eq(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 = 11308;
+  fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___n_kwin__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:11310 */
+  ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11311 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AInLanguage___n_string__eq[] = "parser_prod::AInLanguage::(parser_nodes::AInLanguage::n_string=)";
+void parser___parser_prod___AInLanguage___n_string__eq(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 = 11313;
+  fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___n_string__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:11315 */
+  ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11316 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AInLanguage___visit_all[] = "parser_prod::AInLanguage::(parser_nodes::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 = 8923;
+  fra.me.line = 11320;
   fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -48889,34 +59570,34 @@ void parser___parser_prod___AInLanguage___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8925 */
+  /* parser/parser_prod.nit:11322 */
   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_kwin", LOCATE_parser___parser_prod, 8925);
+    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_prod, 11322);
   }
   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:8926 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:11323 */
   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_string", LOCATE_parser___parser_prod, 8926);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 11323);
   }
   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]);
+  CALL_parser___parser_nodes___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___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;
+  int itpos294 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternCodeBlock].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos295]) 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 = 8930;
+  fra.me.line = 11327;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -48924,20 +59605,20 @@ void parser___parser_prod___AExternCodeBlock___empty_init(val_t p0, int* init_ta
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos295] = 1;
+  init_table[itpos294] = 1;
   return;
 }
 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;
+  int itpos295 = 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[itpos296]) 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 = 8932;
+  fra.me.line = 11329;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -48949,13 +59630,13 @@ void parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(val_t p0, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8932 */
+  /* parser/parser_prod.nit:11329 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8937 */
+  /* parser/parser_prod.nit:11334 */
   CALL_parser___parser_prod___AExternCodeBlock___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:8938 */
+  /* parser/parser_prod.nit:11335 */
   ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8939 */
+  /* parser/parser_prod.nit:11336 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -48970,31 +59651,31 @@ void parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(val_t p0, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8940 */
+    /* parser/parser_prod.nit:11337 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8940);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11337);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8942 */
+  /* parser/parser_prod.nit:11339 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8942);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11339);
   }
   ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8943 */
+  /* parser/parser_prod.nit:11340 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8943);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11340);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos296] = 1;
+  init_table[itpos295] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AExternCodeBlock___replace_child[] = "parser_prod::AExternCodeBlock::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AExternCodeBlock___replace_child[] = "parser_prod::AExternCodeBlock::(parser_nodes::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;
@@ -49002,7 +59683,7 @@ void parser___parser_prod___AExternCodeBlock___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 = 8946;
+  fra.me.line = 11343;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49014,7 +59695,7 @@ void parser___parser_prod___AExternCodeBlock___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:8948 */
+  /* parser/parser_prod.nit:11345 */
   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)) {
@@ -49029,7 +59710,7 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8949 */
+    /* parser/parser_prod.nit:11346 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -49044,32 +59725,32 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8950 */
+      /* parser/parser_prod.nit:11347 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8950);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11347);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8951 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11348 */
       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, 8951);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11348);
       }
-      /* parser/parser_prod.nit:8952 */
+      /* parser/parser_prod.nit:11349 */
       ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8954 */
+      /* parser/parser_prod.nit:11351 */
       ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:8956 */
+    /* parser/parser_prod.nit:11353 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8958 */
+  /* parser/parser_prod.nit:11355 */
   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_extern_code_segment", LOCATE_parser___parser_prod, 8958);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_prod, 11355);
   }
   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]));
@@ -49079,7 +59760,7 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8959 */
+    /* parser/parser_prod.nit:11356 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -49094,32 +59775,98 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8960 */
+      /* parser/parser_prod.nit:11357 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8960);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11357);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8961 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11358 */
       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, 8961);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11358);
       }
-      /* parser/parser_prod.nit:8962 */
+      /* parser/parser_prod.nit:11359 */
       ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8964 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8964);
+      /* parser/parser_prod.nit:11361 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11361);
     }
-    /* parser/parser_prod.nit:8966 */
+    /* parser/parser_prod.nit:11363 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AExternCodeBlock___visit_all[] = "parser_prod::AExternCodeBlock::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AExternCodeBlock___n_in_language__eq[] = "parser_prod::AExternCodeBlock::(parser_nodes::AExternCodeBlock::n_in_language=)";
+void parser___parser_prod___AExternCodeBlock___n_in_language__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 11367;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___n_in_language__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:11369 */
+  ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11370 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:11371 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11371);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AExternCodeBlock___n_extern_code_segment__eq[] = "parser_prod::AExternCodeBlock::(parser_nodes::AExternCodeBlock::n_extern_code_segment=)";
+void parser___parser_prod___AExternCodeBlock___n_extern_code_segment__eq(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 = 11374;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___n_extern_code_segment__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:11376 */
+  ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11377 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AExternCodeBlock___visit_all[] = "parser_prod::AExternCodeBlock::(parser_nodes::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;
@@ -49127,7 +59874,7 @@ void parser___parser_prod___AExternCodeBlock___visit_all(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 = 8970;
+  fra.me.line = 11381;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49138,9 +59885,9 @@ void parser___parser_prod___AExternCodeBlock___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8970 */
+  /* parser/parser_prod.nit:11381 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8972 */
+  /* parser/parser_prod.nit:11383 */
   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)) {
@@ -49156,35 +59903,35 @@ void parser___parser_prod___AExternCodeBlock___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8973 */
+    /* parser/parser_prod.nit:11384 */
     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, 8973);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11384);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8975 */
+  /* parser/parser_prod.nit:11386 */
   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_extern_code_segment", LOCATE_parser___parser_prod, 8975);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_prod, 11386);
   }
   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]);
+  CALL_parser___parser_nodes___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___AQualified___empty_init[] = "parser_prod::AQualified::empty_init";
 void parser___parser_prod___AQualified___empty_init(val_t p0, int* init_table){
-  int itpos297 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AQualified].i;
+  int itpos296 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AQualified].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos297]) 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 = 8979;
+  fra.me.line = 11390;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -49192,20 +59939,20 @@ void parser___parser_prod___AQualified___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos297] = 1;
+  init_table[itpos296] = 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 itpos298 = 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; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos298]) 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 = 8981;
+  fra.me.line = 11392;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___init_aqualified;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -49216,12 +59963,12 @@ void parser___parser_prod___AQualified___init_aqualified(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:8986 */
+  /* parser/parser_prod.nit:11397 */
   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:8992 */
+  /* parser/parser_prod.nit:11403 */
   ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8993 */
+  /* parser/parser_prod.nit:11404 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -49236,15 +59983,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:8994 */
+    /* parser/parser_prod.nit:11405 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8994);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11405);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos298] = 1;
+  init_table[itpos297] = 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){
@@ -49252,7 +59999,7 @@ 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:8987 */
+    /* parser/parser_prod.nit:11398 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -49266,26 +60013,26 @@ void parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8988 */
+    /* parser/parser_prod.nit:11399 */
     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, 8988);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11399);
     }
-    /* parser/parser_prod.nit:8989 */
+    /* parser/parser_prod.nit:11400 */
     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, 8989);
+      nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11400);
     }
     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:8990 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:11401 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___AQualified___replace_child[] = "parser_prod::AQualified::(parser_nodes::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;
@@ -49296,7 +60043,7 @@ 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 = 8998;
+  fra.me.line = 11409;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49308,50 +60055,44 @@ 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:9000 */
+  /* parser/parser_prod.nit:11411 */
   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, 9000);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11411);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:9000 */
+      /* parser/parser_prod.nit:11411 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:9001 */
+      /* parser/parser_prod.nit:11412 */
       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, 9001);
+        nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11412);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:9002 */
+        /* parser/parser_prod.nit:11413 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -49366,52 +60107,52 @@ 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:9003 */
+          /* parser/parser_prod.nit:11414 */
           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, 9003);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11414);
           }
-          /* parser/parser_prod.nit:9004 */
+          /* parser/parser_prod.nit:11415 */
           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, 9004);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11415);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(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:9005 */
+          /* parser/parser_prod.nit:11416 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9005);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11416);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:9007 */
+          /* parser/parser_prod.nit:11418 */
           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, 9007);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11418);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(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:9009 */
+        /* parser/parser_prod.nit:11420 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:9012 */
+  /* parser/parser_prod.nit:11423 */
   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)) {
@@ -49426,7 +60167,7 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9013 */
+    /* parser/parser_prod.nit:11424 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -49441,32 +60182,76 @@ 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:9014 */
+      /* parser/parser_prod.nit:11425 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9014);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11425);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9015 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11426 */
       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, 9015);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11426);
       }
-      /* parser/parser_prod.nit:9016 */
+      /* parser/parser_prod.nit:11427 */
       ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9018 */
+      /* parser/parser_prod.nit:11429 */
       ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:9020 */
+    /* parser/parser_prod.nit:11431 */
     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)";
+static const char LOCATE_parser___parser_prod___AQualified___n_classid__eq[] = "parser_prod::AQualified::(parser_nodes::AQualified::n_classid=)";
+void parser___parser_prod___AQualified___n_classid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 11435;
+  fra.me.meth = LOCATE_parser___parser_prod___AQualified___n_classid__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:11437 */
+  ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11438 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:11439 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11439);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___visit_all[] = "parser_prod::AQualified::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -49474,7 +60259,7 @@ void parser___parser_prod___AQualified___visit_all(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 = 9024;
+  fra.me.line = 11444;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49485,17 +60270,17 @@ void parser___parser_prod___AQualified___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9024 */
+  /* parser/parser_prod.nit:11444 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9026 */
+  /* parser/parser_prod.nit:11446 */
   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, 9026);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11446);
   }
   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:9029 */
+  /* parser/parser_prod.nit:11449 */
   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)) {
@@ -49511,14 +60296,14 @@ void parser___parser_prod___AQualified___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9030 */
+    /* parser/parser_prod.nit:11450 */
     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, 9030);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11450);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -49539,20 +60324,20 @@ void parser___parser_prod___AQualified___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:9027 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:11447 */
+    CALL_parser___parser_nodes___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 itpos299 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoc].i;
+  int itpos298 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADoc].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos299]) 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 = 9035;
+  fra.me.line = 11455;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -49560,18 +60345,18 @@ void parser___parser_prod___ADoc___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos299] = 1;
+  init_table[itpos298] = 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 itpos300 = 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; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos300]) 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 = 9037;
+  fra.me.line = 11457;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___init_adoc;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -49580,11 +60365,11 @@ void parser___parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9041 */
+  /* parser/parser_prod.nit:11461 */
   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[itpos300] = 1;
+  init_table[itpos299] = 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){
@@ -49592,7 +60377,7 @@ 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:9042 */
+    /* parser/parser_prod.nit:11462 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -49606,26 +60391,26 @@ void parser___parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:9043 */
+    /* parser/parser_prod.nit:11463 */
     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, 9043);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11463);
     }
-    /* parser/parser_prod.nit:9044 */
+    /* parser/parser_prod.nit:11464 */
     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, 9044);
+      nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 11464);
     }
     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:9045 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:11465 */
+    CALL_parser___parser_nodes___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)";
+static const char LOCATE_parser___parser_prod___ADoc___replace_child[] = "parser_prod::ADoc::(parser_nodes::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;
@@ -49636,7 +60421,7 @@ 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 = 9049;
+  fra.me.line = 11469;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49648,50 +60433,44 @@ 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:9051 */
+  /* parser/parser_prod.nit:11471 */
   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, 9051);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 11471);
   }
   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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:9051 */
+      /* parser/parser_prod.nit:11471 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:9052 */
+      /* parser/parser_prod.nit:11472 */
       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, 9052);
+        nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 11472);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:9053 */
+        /* parser/parser_prod.nit:11473 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -49706,47 +60485,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:9054 */
+          /* parser/parser_prod.nit:11474 */
           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, 9054);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11474);
           }
-          /* parser/parser_prod.nit:9055 */
+          /* parser/parser_prod.nit:11475 */
           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, 9055);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 11475);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(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:9056 */
+          /* parser/parser_prod.nit:11476 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9056);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11476);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:9058 */
+          /* parser/parser_prod.nit:11478 */
           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, 9058);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 11478);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(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:9060 */
+        /* parser/parser_prod.nit:11480 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
@@ -49755,14 +60534,14 @@ 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)";
+static const char LOCATE_parser___parser_prod___ADoc___visit_all[] = "parser_prod::ADoc::(parser_nodes::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 = 9065;
+  fra.me.line = 11487;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -49771,11 +60550,11 @@ void parser___parser_prod___ADoc___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9067 */
+  /* parser/parser_prod.nit:11489 */
   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, 9067);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 11489);
   }
   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));
@@ -49798,20 +60577,20 @@ void parser___parser_prod___ADoc___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:9068 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:11490 */
+    CALL_parser___parser_nodes___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___AAnnotations___empty_init[] = "parser_prod::AAnnotations::empty_init";
 void parser___parser_prod___AAnnotations___empty_init(val_t p0, int* init_table){
-  int itpos301 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotations].i;
+  int itpos300 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotations].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos301]) 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 = 9073;
+  fra.me.line = 11495;
   fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -49819,20 +60598,20 @@ void parser___parser_prod___AAnnotations___empty_init(val_t p0, int* init_table)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos301] = 1;
+  init_table[itpos300] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___AAnnotations___init_aannotations[] = "parser_prod::AAnnotations::init_aannotations";
 void parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos302 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotations].i;
+  int itpos301 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotations].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[itpos302]) return;
+  if (init_table[itpos301]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9075;
+  fra.me.line = 11497;
   fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___init_aannotations;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -49847,11 +60626,11 @@ void parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1,
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:9082 */
+  /* parser/parser_prod.nit:11504 */
   CALL_parser___parser_prod___AAnnotations___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:9083 */
+  /* parser/parser_prod.nit:11505 */
   ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9084 */
+  /* parser/parser_prod.nit:11506 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -49866,16 +60645,16 @@ void parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9085 */
+    /* parser/parser_prod.nit:11507 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9085);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11507);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:9087 */
+  /* parser/parser_prod.nit:11509 */
   ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:9088 */
+  /* parser/parser_prod.nit:11510 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -49890,17 +60669,17 @@ void parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9089 */
+    /* parser/parser_prod.nit:11511 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9089);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11511);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser___parser_nodes___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___AAnnotations___init_aannotations_1));
-  /* parser/parser_prod.nit:9096 */
+  /* parser/parser_prod.nit:11518 */
   ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:9097 */
+  /* parser/parser_prod.nit:11519 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -49915,15 +60694,15 @@ void parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9098 */
+    /* parser/parser_prod.nit:11520 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9098);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11520);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos302] = 1;
+  init_table[itpos301] = 1;
   return;
 }
   void OC_parser___parser_prod___AAnnotations___init_aannotations_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -49931,7 +60710,7 @@ void parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:9091 */
+    /* parser/parser_prod.nit:11513 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -49945,26 +60724,26 @@ void parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:9092 */
+    /* parser/parser_prod.nit:11514 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AAnnotation, ID_parser___parser_nodes___AAnnotation)) /*cast AAnnotation*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9092);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11514);
     }
-    /* parser/parser_prod.nit:9093 */
+    /* parser/parser_prod.nit:11515 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9093);
+      nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 11515);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AAnnotations____n_items(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:9094 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    /* parser/parser_prod.nit:11516 */
+    CALL_parser___parser_nodes___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___AAnnotations___replace_child[] = "parser_prod::AAnnotations::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAnnotations___replace_child[] = "parser_prod::AAnnotations::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___AAnnotations___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;
@@ -49975,7 +60754,7 @@ void parser___parser_prod___AAnnotations___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 = 9102;
+  fra.me.line = 11524;
   fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49987,7 +60766,7 @@ void parser___parser_prod___AAnnotations___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:9104 */
+  /* parser/parser_prod.nit:11526 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -50002,7 +60781,7 @@ void parser___parser_prod___AAnnotations___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9105 */
+    /* parser/parser_prod.nit:11527 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -50017,28 +60796,28 @@ void parser___parser_prod___AAnnotations___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9106 */
+      /* parser/parser_prod.nit:11528 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9106);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11528);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9107 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11529 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAt, ID_parser___parser_nodes___TAt)) /*cast TAt*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9107);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11529);
       }
-      /* parser/parser_prod.nit:9108 */
+      /* parser/parser_prod.nit:11530 */
       ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9110 */
+      /* parser/parser_prod.nit:11532 */
       ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:9112 */
+    /* parser/parser_prod.nit:11534 */
     goto label1;
   }
-  /* parser/parser_prod.nit:9114 */
+  /* parser/parser_prod.nit:11536 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -50053,7 +60832,7 @@ void parser___parser_prod___AAnnotations___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9115 */
+    /* parser/parser_prod.nit:11537 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -50068,71 +60847,65 @@ void parser___parser_prod___AAnnotations___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9116 */
+      /* parser/parser_prod.nit:11538 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9116);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11538);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9117 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11539 */
       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, 9117);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11539);
       }
-      /* parser/parser_prod.nit:9118 */
+      /* parser/parser_prod.nit:11540 */
       ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9120 */
+      /* parser/parser_prod.nit:11542 */
       ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:9122 */
+    /* parser/parser_prod.nit:11544 */
     goto label1;
   }
-  /* parser/parser_prod.nit:9124 */
+  /* parser/parser_prod.nit:11546 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9124);
+    nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 11546);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(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 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:9124 */
+      /* parser/parser_prod.nit:11546 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:9125 */
+      /* parser/parser_prod.nit:11547 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9125);
+        nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 11547);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:9126 */
+        /* parser/parser_prod.nit:11548 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -50147,52 +60920,52 @@ void parser___parser_prod___AAnnotations___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:9127 */
+          /* parser/parser_prod.nit:11549 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotation, ID_parser___parser_nodes___AAnnotation)) /*cast AAnnotation*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9127);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11549);
           }
-          /* parser/parser_prod.nit:9128 */
+          /* parser/parser_prod.nit:11550 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9128);
+            nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 11550);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(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:9129 */
+          /* parser/parser_prod.nit:11551 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9129);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11551);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:9131 */
+          /* parser/parser_prod.nit:11553 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9131);
+            nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 11553);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(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:9133 */
+        /* parser/parser_prod.nit:11555 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:9136 */
+  /* parser/parser_prod.nit:11558 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -50207,7 +60980,7 @@ void parser___parser_prod___AAnnotations___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9137 */
+    /* parser/parser_prod.nit:11559 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -50222,32 +60995,164 @@ void parser___parser_prod___AAnnotations___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9138 */
+      /* parser/parser_prod.nit:11560 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9138);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11560);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9139 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11561 */
       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, 9139);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11561);
       }
-      /* parser/parser_prod.nit:9140 */
+      /* parser/parser_prod.nit:11562 */
       ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9142 */
+      /* parser/parser_prod.nit:11564 */
       ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:9144 */
+    /* parser/parser_prod.nit:11566 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAnnotations___visit_all[] = "parser_prod::AAnnotations::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AAnnotations___n_at__eq[] = "parser_prod::AAnnotations::(parser_nodes::AAnnotations::n_at=)";
+void parser___parser_prod___AAnnotations___n_at__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 11570;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___n_at__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:11572 */
+  ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11573 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:11574 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11574);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAnnotations___n_opar__eq[] = "parser_prod::AAnnotations::(parser_nodes::AAnnotations::n_opar=)";
+void parser___parser_prod___AAnnotations___n_opar__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 11577;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___n_opar__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:11579 */
+  ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11580 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:11581 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11581);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAnnotations___n_cpar__eq[] = "parser_prod::AAnnotations::(parser_nodes::AAnnotations::n_cpar=)";
+void parser___parser_prod___AAnnotations___n_cpar__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 11584;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___n_cpar__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:11586 */
+  ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11587 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:11588 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11588);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAnnotations___visit_all[] = "parser_prod::AAnnotations::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AAnnotations___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -50255,7 +61160,7 @@ void parser___parser_prod___AAnnotations___visit_all(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 = 9148;
+  fra.me.line = 11593;
   fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -50266,9 +61171,9 @@ void parser___parser_prod___AAnnotations___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9148 */
+  /* parser/parser_prod.nit:11593 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9150 */
+  /* parser/parser_prod.nit:11595 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -50284,16 +61189,16 @@ void parser___parser_prod___AAnnotations___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9151 */
+    /* parser/parser_prod.nit:11596 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAt, ID_parser___parser_nodes___TAt)) /*cast TAt*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9151);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11596);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:9153 */
+  /* parser/parser_prod.nit:11598 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -50309,24 +61214,24 @@ void parser___parser_prod___AAnnotations___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9154 */
+    /* parser/parser_prod.nit:11599 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____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, 9154);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11599);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:9156 */
+  /* parser/parser_prod.nit:11601 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9156);
+    nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 11601);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(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___AAnnotations___visit_all_1));
-  /* parser/parser_prod.nit:9159 */
+  /* parser/parser_prod.nit:11604 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -50342,14 +61247,14 @@ void parser___parser_prod___AAnnotations___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9160 */
+    /* parser/parser_prod.nit:11605 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[2]);
     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("Cast failed", NULL, LOCATE_parser___parser_prod, 9160);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11605);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -50370,20 +61275,20 @@ void parser___parser_prod___AAnnotations___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:9157 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:11602 */
+    CALL_parser___parser_nodes___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___AAnnotation___empty_init[] = "parser_prod::AAnnotation::empty_init";
 void parser___parser_prod___AAnnotation___empty_init(val_t p0, int* init_table){
-  int itpos303 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotation].i;
+  int itpos302 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotation].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos303]) return;
+  if (init_table[itpos302]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9165;
+  fra.me.line = 11610;
   fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -50391,20 +61296,20 @@ void parser___parser_prod___AAnnotation___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos303] = 1;
+  init_table[itpos302] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___AAnnotation___init_aannotation[] = "parser_prod::AAnnotation::init_aannotation";
 void parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
-  int itpos304 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotation].i;
+  int itpos303 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotation].i;
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos304]) return;
+  if (init_table[itpos303]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9167;
+  fra.me.line = 11612;
   fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___init_aannotation;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -50422,26 +61327,26 @@ void parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, v
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:9167 */
+  /* parser/parser_prod.nit:11612 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9175 */
+  /* parser/parser_prod.nit:11620 */
   CALL_parser___parser_prod___AAnnotation___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:9176 */
+  /* parser/parser_prod.nit:11621 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9176);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11621);
   }
   ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9177 */
+  /* parser/parser_prod.nit:11622 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9177);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11622);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:9178 */
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:11623 */
   ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:9179 */
+  /* parser/parser_prod.nit:11624 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -50456,17 +61361,17 @@ void parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9180 */
+    /* parser/parser_prod.nit:11625 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9180);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11625);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
   }
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AAnnotation___init_aannotation_1));
-  /* parser/parser_prod.nit:9187 */
+  /* parser/parser_prod.nit:11632 */
   ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:9188 */
+  /* parser/parser_prod.nit:11633 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -50481,16 +61386,16 @@ void parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9189 */
+    /* parser/parser_prod.nit:11634 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9189);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11634);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
   }
-  /* parser/parser_prod.nit:9191 */
+  /* parser/parser_prod.nit:11636 */
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:9192 */
+  /* parser/parser_prod.nit:11637 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -50505,15 +61410,15 @@ void parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9193 */
+    /* parser/parser_prod.nit:11638 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9193);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11638);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos304] = 1;
+  init_table[itpos303] = 1;
   return;
 }
   void OC_parser___parser_prod___AAnnotation___init_aannotation_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -50521,7 +61426,7 @@ void parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, v
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:9182 */
+    /* parser/parser_prod.nit:11627 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -50535,26 +61440,26 @@ void parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, v
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:9183 */
+    /* parser/parser_prod.nit:11628 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AAtArg, ID_parser___parser_nodes___AAtArg)) /*cast AAtArg*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9183);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11628);
     }
-    /* parser/parser_prod.nit:9184 */
+    /* parser/parser_prod.nit:11629 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(closctx->REG[6])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9184);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 11629);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AAnnotation____n_args(closctx->REG[6]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:9185 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[6]);
+    /* parser/parser_prod.nit:11630 */
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[6]);
     stack_frame_head = fra.me.prev;
     return;
   }
-static const char LOCATE_parser___parser_prod___AAnnotation___replace_child[] = "parser_prod::AAnnotation::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAnnotation___replace_child[] = "parser_prod::AAnnotation::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___AAnnotation___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;
@@ -50565,7 +61470,7 @@ void parser___parser_prod___AAnnotation___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 = 9197;
+  fra.me.line = 11642;
   fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -50577,11 +61482,11 @@ void parser___parser_prod___AAnnotation___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:9199 */
+  /* parser/parser_prod.nit:11644 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_atid", LOCATE_parser___parser_prod, 9199);
+    nit_abort("Uninitialized attribute %s", "_n_atid", LOCATE_parser___parser_prod, 11644);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -50591,7 +61496,7 @@ void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9200 */
+    /* parser/parser_prod.nit:11645 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -50606,28 +61511,28 @@ void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9201 */
+      /* parser/parser_prod.nit:11646 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9201);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11646);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9202 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11647 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast AAtid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9202);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11647);
       }
-      /* parser/parser_prod.nit:9203 */
+      /* parser/parser_prod.nit:11648 */
       ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9205 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9205);
+      /* parser/parser_prod.nit:11650 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11650);
     }
-    /* parser/parser_prod.nit:9207 */
+    /* parser/parser_prod.nit:11652 */
     goto label1;
   }
-  /* parser/parser_prod.nit:9209 */
+  /* parser/parser_prod.nit:11654 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -50642,7 +61547,7 @@ void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9210 */
+    /* parser/parser_prod.nit:11655 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -50657,71 +61562,65 @@ void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9211 */
+      /* parser/parser_prod.nit:11656 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9211);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11656);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9212 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11657 */
       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, 9212);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11657);
       }
-      /* parser/parser_prod.nit:9213 */
+      /* parser/parser_prod.nit:11658 */
       ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9215 */
+      /* parser/parser_prod.nit:11660 */
       ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:9217 */
+    /* parser/parser_prod.nit:11662 */
     goto label1;
   }
-  /* parser/parser_prod.nit:9219 */
+  /* parser/parser_prod.nit:11664 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9219);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 11664);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____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:355 */
+  /* ../lib/standard/kernel.nit:404 */
   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 */
+    /* ../lib/standard/kernel.nit:242 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/kernel.nit:355 */
+    /* ../lib/standard/kernel.nit:404 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:9219 */
+      /* parser/parser_prod.nit:11664 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:9220 */
+      /* parser/parser_prod.nit:11665 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9220);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 11665);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_args(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]));
+      REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
       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;
-        }
+        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:9221 */
+        /* parser/parser_prod.nit:11666 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -50736,52 +61635,52 @@ void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:9222 */
+          /* parser/parser_prod.nit:11667 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAtArg, ID_parser___parser_nodes___AAtArg)) /*cast AAtArg*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9222);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11667);
           }
-          /* parser/parser_prod.nit:9223 */
+          /* parser/parser_prod.nit:11668 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9223);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 11668);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_args(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:9224 */
+          /* parser/parser_prod.nit:11669 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9224);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11669);
           }
-          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+          CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:9226 */
+          /* parser/parser_prod.nit:11671 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9226);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 11671);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_args(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:9228 */
+        /* parser/parser_prod.nit:11673 */
         goto label1;
       }
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB2 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:238 */
+      /* ../lib/standard/kernel.nit:245 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/kernel.nit:357 */
+      /* ../lib/standard/kernel.nit:406 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/kernel.nit:355 */
+      /* ../lib/standard/kernel.nit:404 */
       goto label2;
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:9231 */
+  /* parser/parser_prod.nit:11676 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -50796,7 +61695,7 @@ void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9232 */
+    /* parser/parser_prod.nit:11677 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -50811,28 +61710,28 @@ void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9233 */
+      /* parser/parser_prod.nit:11678 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9233);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11678);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9234 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11679 */
       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, 9234);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11679);
       }
-      /* parser/parser_prod.nit:9235 */
+      /* parser/parser_prod.nit:11680 */
       ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9237 */
+      /* parser/parser_prod.nit:11682 */
       ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:9239 */
+    /* parser/parser_prod.nit:11684 */
     goto label1;
   }
-  /* parser/parser_prod.nit:9241 */
+  /* parser/parser_prod.nit:11686 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -50847,7 +61746,7 @@ void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9242 */
+    /* parser/parser_prod.nit:11687 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -50862,32 +61761,186 @@ void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9243 */
+      /* parser/parser_prod.nit:11688 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9243);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11688);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9244 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11689 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9244);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11689);
       }
-      /* parser/parser_prod.nit:9245 */
+      /* parser/parser_prod.nit:11690 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9247 */
+      /* parser/parser_prod.nit:11692 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:9249 */
+    /* parser/parser_prod.nit:11694 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAnnotation___visit_all[] = "parser_prod::AAnnotation::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AAnnotation___n_atid__eq[] = "parser_prod::AAnnotation::(parser_nodes::AAnnotation::n_atid=)";
+void parser___parser_prod___AAnnotation___n_atid__eq(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 = 11698;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___n_atid__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:11700 */
+  ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11701 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAnnotation___n_opar__eq[] = "parser_prod::AAnnotation::(parser_nodes::AAnnotation::n_opar=)";
+void parser___parser_prod___AAnnotation___n_opar__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 11703;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___n_opar__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:11705 */
+  ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11706 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:11707 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11707);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAnnotation___n_cpar__eq[] = "parser_prod::AAnnotation::(parser_nodes::AAnnotation::n_cpar=)";
+void parser___parser_prod___AAnnotation___n_cpar__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 11710;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___n_cpar__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:11712 */
+  ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11713 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:11714 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11714);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAnnotation___n_annotations__eq[] = "parser_prod::AAnnotation::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AAnnotation___n_annotations__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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 = 11717;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___n_annotations__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:11719 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11720 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      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:11721 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11721);
+    }
+    CALL_parser___parser_nodes___ANode___parent__eq(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___AAnnotation___visit_all[] = "parser_prod::AAnnotation::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AAnnotation___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -50895,7 +61948,7 @@ void parser___parser_prod___AAnnotation___visit_all(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 = 9253;
+  fra.me.line = 11726;
   fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -50906,17 +61959,17 @@ void parser___parser_prod___AAnnotation___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9253 */
+  /* parser/parser_prod.nit:11726 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9255 */
+  /* parser/parser_prod.nit:11728 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_atid", LOCATE_parser___parser_prod, 9255);
+    nit_abort("Uninitialized attribute %s", "_n_atid", LOCATE_parser___parser_prod, 11728);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_atid(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:9256 */
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:11729 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -50932,24 +61985,24 @@ void parser___parser_prod___AAnnotation___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9257 */
+    /* parser/parser_prod.nit:11730 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____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, 9257);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11730);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:9259 */
+  /* parser/parser_prod.nit:11732 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9259);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 11732);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_args(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___AAnnotation___visit_all_1));
-  /* parser/parser_prod.nit:9262 */
+  /* parser/parser_prod.nit:11735 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -50965,16 +62018,16 @@ void parser___parser_prod___AAnnotation___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9263 */
+    /* parser/parser_prod.nit:11736 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____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, 9263);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11736);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:9265 */
+  /* parser/parser_prod.nit:11738 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -50990,14 +62043,14 @@ void parser___parser_prod___AAnnotation___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9266 */
+    /* parser/parser_prod.nit:11739 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9266);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11739);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -51018,20 +62071,20 @@ void parser___parser_prod___AAnnotation___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:9260 */
-    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:11733 */
+    CALL_parser___parser_nodes___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___ATypeAtArg___empty_init[] = "parser_prod::ATypeAtArg::empty_init";
 void parser___parser_prod___ATypeAtArg___empty_init(val_t p0, int* init_table){
-  int itpos305 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypeAtArg].i;
+  int itpos304 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypeAtArg].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos305]) return;
+  if (init_table[itpos304]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9271;
+  fra.me.line = 11744;
   fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -51039,19 +62092,19 @@ void parser___parser_prod___ATypeAtArg___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos305] = 1;
+  init_table[itpos304] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___ATypeAtArg___init_atypeatarg[] = "parser_prod::ATypeAtArg::init_atypeatarg";
 void parser___parser_prod___ATypeAtArg___init_atypeatarg(val_t p0, val_t p1, int* init_table){
-  int itpos306 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypeAtArg].i;
+  int itpos305 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypeAtArg].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos306]) return;
+  if (init_table[itpos305]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9273;
+  fra.me.line = 11746;
   fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___init_atypeatarg;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -51061,28 +62114,28 @@ void parser___parser_prod___ATypeAtArg___init_atypeatarg(val_t p0, val_t p1, int
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9273 */
+  /* parser/parser_prod.nit:11746 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9277 */
+  /* parser/parser_prod.nit:11750 */
   CALL_parser___parser_prod___ATypeAtArg___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:9278 */
+  /* parser/parser_prod.nit:11751 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9278);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11751);
   }
   ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9279 */
+  /* parser/parser_prod.nit:11752 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9279);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11752);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos306] = 1;
+  init_table[itpos305] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ATypeAtArg___replace_child[] = "parser_prod::ATypeAtArg::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___ATypeAtArg___replace_child[] = "parser_prod::ATypeAtArg::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___ATypeAtArg___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;
@@ -51090,7 +62143,7 @@ void parser___parser_prod___ATypeAtArg___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 = 9282;
+  fra.me.line = 11755;
   fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -51102,11 +62155,11 @@ void parser___parser_prod___ATypeAtArg___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:9284 */
+  /* parser/parser_prod.nit:11757 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 9284);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 11757);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -51116,7 +62169,189 @@ void parser___parser_prod___ATypeAtArg___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9285 */
+    /* parser/parser_prod.nit:11758 */
+    REGB0 = TAG_Bool(fra.me.REG[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:11759 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11759);
+      }
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11760 */
+      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, 11760);
+      }
+      /* parser/parser_prod.nit:11761 */
+      ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:11763 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11763);
+    }
+    /* parser/parser_prod.nit:11765 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ATypeAtArg___n_type__eq[] = "parser_prod::ATypeAtArg::(parser_nodes::ATypeAtArg::n_type=)";
+void parser___parser_prod___ATypeAtArg___n_type__eq(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 = 11769;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___n_type__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:11771 */
+  ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11772 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___ATypeAtArg___visit_all[] = "parser_prod::ATypeAtArg::(parser_nodes::ANode::visit_all)";
+void parser___parser_prod___ATypeAtArg___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 = 11776;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___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:11778 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 11778);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0]);
+  CALL_parser___parser_nodes___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___AExprAtArg___empty_init[] = "parser_prod::AExprAtArg::empty_init";
+void parser___parser_prod___AExprAtArg___empty_init(val_t p0, int* init_table){
+  int itpos306 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExprAtArg].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos306]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 11782;
+  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___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[itpos306] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AExprAtArg___init_aexpratarg[] = "parser_prod::AExprAtArg::init_aexpratarg";
+void parser___parser_prod___AExprAtArg___init_aexpratarg(val_t p0, val_t p1, int* init_table){
+  int itpos307 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExprAtArg].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos307]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 11784;
+  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___init_aexpratarg;
+  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:11784 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:11788 */
+  CALL_parser___parser_prod___AExprAtArg___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:11789 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11789);
+  }
+  ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11790 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11790);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos307] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AExprAtArg___replace_child[] = "parser_prod::AExprAtArg::(parser_nodes::ANode::replace_child)";
+void parser___parser_prod___AExprAtArg___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 = 11793;
+  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___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:11795 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 11795);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExprAtArg____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:11796 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -51131,40 +62366,39 @@ void parser___parser_prod___ATypeAtArg___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9286 */
+      /* parser/parser_prod.nit:11797 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9286);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11797);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9287 */
-      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*/;
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11798 */
+      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, 9287);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11798);
       }
-      /* parser/parser_prod.nit:9288 */
-      ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:11799 */
+      ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9290 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9290);
+      /* parser/parser_prod.nit:11801 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11801);
     }
-    /* parser/parser_prod.nit:9292 */
+    /* parser/parser_prod.nit:11803 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___ATypeAtArg___visit_all[] = "parser_prod::ATypeAtArg::(parser_prod::ANode::visit_all)";
-void parser___parser_prod___ATypeAtArg___visit_all(val_t p0, val_t p1){
+static const char LOCATE_parser___parser_prod___AExprAtArg___n_expr__eq[] = "parser_prod::AExprAtArg::(parser_nodes::AExprAtArg::n_expr=)";
+void parser___parser_prod___AExprAtArg___n_expr__eq(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 = 9296;
-  fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___visit_all;
+  fra.me.line = 11807;
+  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___n_expr__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
@@ -51172,158 +62406,21 @@ void parser___parser_prod___ATypeAtArg___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9298 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 9298);
-  }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ATypeAtArg____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___AExprAtArg___empty_init[] = "parser_prod::AExprAtArg::empty_init";
-void parser___parser_prod___AExprAtArg___empty_init(val_t p0, int* init_table){
-  int itpos307 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExprAtArg].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos307]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9302;
-  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___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[itpos307] = 1;
-  return;
-}
-static const char LOCATE_parser___parser_prod___AExprAtArg___init_aexpratarg[] = "parser_prod::AExprAtArg::init_aexpratarg";
-void parser___parser_prod___AExprAtArg___init_aexpratarg(val_t p0, val_t p1, int* init_table){
-  int itpos308 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExprAtArg].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos308]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9304;
-  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___init_aexpratarg;
-  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:9304 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9308 */
-  CALL_parser___parser_prod___AExprAtArg___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:9309 */
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9309);
-  }
-  ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9310 */
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9310);
-  }
-  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[itpos308] = 1;
-  return;
-}
-static const char LOCATE_parser___parser_prod___AExprAtArg___replace_child[] = "parser_prod::AExprAtArg::(parser_prod::ANode::replace_child)";
-void parser___parser_prod___AExprAtArg___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 = 9313;
-  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___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:9315 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9315);
-  }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AExprAtArg____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:9316 */
-    REGB0 = TAG_Bool(fra.me.REG[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:9317 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9317);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9318 */
-      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, 9318);
-      }
-      /* parser/parser_prod.nit:9319 */
-      ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* parser/parser_prod.nit:9321 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9321);
-    }
-    /* parser/parser_prod.nit:9323 */
-    goto label1;
-  }
-  label1: while(0);
+  /* parser/parser_prod.nit:11809 */
+  ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11810 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AExprAtArg___visit_all[] = "parser_prod::AExprAtArg::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AExprAtArg___visit_all[] = "parser_prod::AExprAtArg::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AExprAtArg___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 = 9327;
+  fra.me.line = 11814;
   fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51332,26 +62429,26 @@ void parser___parser_prod___AExprAtArg___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9329 */
+  /* parser/parser_prod.nit:11816 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9329);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 11816);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExprAtArg____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]);
+  CALL_parser___parser_nodes___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___AAtAtArg___empty_init[] = "parser_prod::AAtAtArg::empty_init";
 void parser___parser_prod___AAtAtArg___empty_init(val_t p0, int* init_table){
-  int itpos309 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAtAtArg].i;
+  int itpos308 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAtAtArg].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos309]) return;
+  if (init_table[itpos308]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9333;
+  fra.me.line = 11820;
   fra.me.meth = LOCATE_parser___parser_prod___AAtAtArg___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -51359,19 +62456,19 @@ void parser___parser_prod___AAtAtArg___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos309] = 1;
+  init_table[itpos308] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___AAtAtArg___init_aatatarg[] = "parser_prod::AAtAtArg::init_aatatarg";
 void parser___parser_prod___AAtAtArg___init_aatatarg(val_t p0, val_t p1, int* init_table){
-  int itpos310 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAtAtArg].i;
+  int itpos309 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAtAtArg].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos310]) return;
+  if (init_table[itpos309]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9335;
+  fra.me.line = 11822;
   fra.me.meth = LOCATE_parser___parser_prod___AAtAtArg___init_aatatarg;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -51381,28 +62478,28 @@ void parser___parser_prod___AAtAtArg___init_aatatarg(val_t p0, val_t p1, int* in
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9335 */
+  /* parser/parser_prod.nit:11822 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9339 */
+  /* parser/parser_prod.nit:11826 */
   CALL_parser___parser_prod___AAtAtArg___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:9340 */
+  /* parser/parser_prod.nit:11827 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9340);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11827);
   }
   ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9341 */
+  /* parser/parser_prod.nit:11828 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9341);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11828);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos310] = 1;
+  init_table[itpos309] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAtAtArg___replace_child[] = "parser_prod::AAtAtArg::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AAtAtArg___replace_child[] = "parser_prod::AAtAtArg::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___AAtAtArg___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;
@@ -51410,7 +62507,7 @@ void parser___parser_prod___AAtAtArg___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 = 9344;
+  fra.me.line = 11831;
   fra.me.meth = LOCATE_parser___parser_prod___AAtAtArg___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -51422,7 +62519,7 @@ void parser___parser_prod___AAtAtArg___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:9346 */
+  /* parser/parser_prod.nit:11833 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -51437,7 +62534,7 @@ void parser___parser_prod___AAtAtArg___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9347 */
+    /* parser/parser_prod.nit:11834 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -51452,38 +62549,65 @@ void parser___parser_prod___AAtAtArg___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:9348 */
+      /* parser/parser_prod.nit:11835 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9348);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11835);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9349 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11836 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9349);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11836);
       }
-      /* parser/parser_prod.nit:9350 */
+      /* parser/parser_prod.nit:11837 */
       ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9352 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9352);
+      /* parser/parser_prod.nit:11839 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11839);
     }
-    /* parser/parser_prod.nit:9354 */
+    /* parser/parser_prod.nit:11841 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AAtAtArg___visit_all[] = "parser_prod::AAtAtArg::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AAtAtArg___n_annotations__eq[] = "parser_prod::AAtAtArg::(parser_nodes::Prod::n_annotations=)";
+void parser___parser_prod___AAtAtArg___n_annotations__eq(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 = 11845;
+  fra.me.meth = LOCATE_parser___parser_prod___AAtAtArg___n_annotations__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:11847 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11848 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11848);
+  }
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AAtAtArg___visit_all[] = "parser_prod::AAtAtArg::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AAtAtArg___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 = 9358;
+  fra.me.line = 11852;
   fra.me.meth = LOCATE_parser___parser_prod___AAtAtArg___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51492,21 +62616,21 @@ void parser___parser_prod___AAtAtArg___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9360 */
+  /* parser/parser_prod.nit:11854 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser___parser_nodes___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___AIdAtid___empty_init[] = "parser_prod::AIdAtid::empty_init";
 void parser___parser_prod___AIdAtid___empty_init(val_t p0, int* init_table){
-  int itpos311 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdAtid].i;
+  int itpos310 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdAtid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos311]) return;
+  if (init_table[itpos310]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9364;
+  fra.me.line = 11858;
   fra.me.meth = LOCATE_parser___parser_prod___AIdAtid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -51514,19 +62638,19 @@ void parser___parser_prod___AIdAtid___empty_init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos311] = 1;
+  init_table[itpos310] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___AIdAtid___init_aidatid[] = "parser_prod::AIdAtid::init_aidatid";
 void parser___parser_prod___AIdAtid___init_aidatid(val_t p0, val_t p1, int* init_table){
-  int itpos312 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdAtid].i;
+  int itpos311 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdAtid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos312]) return;
+  if (init_table[itpos311]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9366;
+  fra.me.line = 11860;
   fra.me.meth = LOCATE_parser___parser_prod___AIdAtid___init_aidatid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -51536,28 +62660,28 @@ void parser___parser_prod___AIdAtid___init_aidatid(val_t p0, val_t p1, int* init
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9366 */
+  /* parser/parser_prod.nit:11860 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9370 */
+  /* parser/parser_prod.nit:11864 */
   CALL_parser___parser_prod___AIdAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:9371 */
+  /* parser/parser_prod.nit:11865 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9371);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11865);
   }
   ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9372 */
+  /* parser/parser_prod.nit:11866 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9372);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11866);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos312] = 1;
+  init_table[itpos311] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AIdAtid___replace_child[] = "parser_prod::AIdAtid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AIdAtid___replace_child[] = "parser_prod::AIdAtid::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___AIdAtid___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;
@@ -51565,7 +62689,7 @@ void parser___parser_prod___AIdAtid___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 = 9375;
+  fra.me.line = 11869;
   fra.me.meth = LOCATE_parser___parser_prod___AIdAtid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -51577,11 +62701,11 @@ void parser___parser_prod___AIdAtid___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:9377 */
+  /* parser/parser_prod.nit:11871 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9377);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11871);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -51591,7 +62715,7 @@ void parser___parser_prod___AIdAtid___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9378 */
+    /* parser/parser_prod.nit:11872 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -51606,39 +62730,61 @@ void parser___parser_prod___AIdAtid___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:9379 */
+      /* parser/parser_prod.nit:11873 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9379);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11873);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9380 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11874 */
       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, 9380);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11874);
       }
-      /* parser/parser_prod.nit:9381 */
+      /* parser/parser_prod.nit:11875 */
       ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9383 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9383);
+      /* parser/parser_prod.nit:11877 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11877);
     }
-    /* parser/parser_prod.nit:9385 */
+    /* parser/parser_prod.nit:11879 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AIdAtid___visit_all[] = "parser_prod::AIdAtid::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AIdAtid___n_id__eq[] = "parser_prod::AIdAtid::(parser_nodes::AAtid::n_id=)";
+void parser___parser_prod___AIdAtid___n_id__eq(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 = 11883;
+  fra.me.meth = LOCATE_parser___parser_prod___AIdAtid___n_id__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:11885 */
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11886 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AIdAtid___visit_all[] = "parser_prod::AIdAtid::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AIdAtid___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 = 9389;
+  fra.me.line = 11890;
   fra.me.meth = LOCATE_parser___parser_prod___AIdAtid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51647,26 +62793,26 @@ void parser___parser_prod___AIdAtid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9391 */
+  /* parser/parser_prod.nit:11892 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9391);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11892);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____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]);
+  CALL_parser___parser_nodes___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___AKwexternAtid___empty_init[] = "parser_prod::AKwexternAtid::empty_init";
 void parser___parser_prod___AKwexternAtid___empty_init(val_t p0, int* init_table){
-  int itpos313 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwexternAtid].i;
+  int itpos312 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwexternAtid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos313]) return;
+  if (init_table[itpos312]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9395;
+  fra.me.line = 11896;
   fra.me.meth = LOCATE_parser___parser_prod___AKwexternAtid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -51674,19 +62820,19 @@ void parser___parser_prod___AKwexternAtid___empty_init(val_t p0, int* init_table
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos313] = 1;
+  init_table[itpos312] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___AKwexternAtid___init_akwexternatid[] = "parser_prod::AKwexternAtid::init_akwexternatid";
 void parser___parser_prod___AKwexternAtid___init_akwexternatid(val_t p0, val_t p1, int* init_table){
-  int itpos314 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwexternAtid].i;
+  int itpos313 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwexternAtid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos314]) return;
+  if (init_table[itpos313]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9397;
+  fra.me.line = 11898;
   fra.me.meth = LOCATE_parser___parser_prod___AKwexternAtid___init_akwexternatid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -51696,28 +62842,28 @@ void parser___parser_prod___AKwexternAtid___init_akwexternatid(val_t p0, val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9397 */
+  /* parser/parser_prod.nit:11898 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9401 */
+  /* parser/parser_prod.nit:11902 */
   CALL_parser___parser_prod___AKwexternAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:9402 */
+  /* parser/parser_prod.nit:11903 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9402);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11903);
   }
   ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9403 */
+  /* parser/parser_prod.nit:11904 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9403);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11904);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos314] = 1;
+  init_table[itpos313] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwexternAtid___replace_child[] = "parser_prod::AKwexternAtid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AKwexternAtid___replace_child[] = "parser_prod::AKwexternAtid::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___AKwexternAtid___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;
@@ -51725,7 +62871,7 @@ void parser___parser_prod___AKwexternAtid___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 = 9406;
+  fra.me.line = 11907;
   fra.me.meth = LOCATE_parser___parser_prod___AKwexternAtid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -51737,11 +62883,11 @@ void parser___parser_prod___AKwexternAtid___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:9408 */
+  /* parser/parser_prod.nit:11909 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9408);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11909);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -51751,7 +62897,7 @@ void parser___parser_prod___AKwexternAtid___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9409 */
+    /* parser/parser_prod.nit:11910 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -51766,39 +62912,61 @@ void parser___parser_prod___AKwexternAtid___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9410 */
+      /* parser/parser_prod.nit:11911 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9410);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11911);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9411 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11912 */
       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, 9411);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11912);
       }
-      /* parser/parser_prod.nit:9412 */
+      /* parser/parser_prod.nit:11913 */
       ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9414 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9414);
+      /* parser/parser_prod.nit:11915 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11915);
     }
-    /* parser/parser_prod.nit:9416 */
+    /* parser/parser_prod.nit:11917 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwexternAtid___visit_all[] = "parser_prod::AKwexternAtid::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AKwexternAtid___n_id__eq[] = "parser_prod::AKwexternAtid::(parser_nodes::AAtid::n_id=)";
+void parser___parser_prod___AKwexternAtid___n_id__eq(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 = 11921;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwexternAtid___n_id__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:11923 */
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11924 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AKwexternAtid___visit_all[] = "parser_prod::AKwexternAtid::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AKwexternAtid___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 = 9420;
+  fra.me.line = 11928;
   fra.me.meth = LOCATE_parser___parser_prod___AKwexternAtid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51807,26 +62975,26 @@ void parser___parser_prod___AKwexternAtid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9422 */
+  /* parser/parser_prod.nit:11930 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9422);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11930);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____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]);
+  CALL_parser___parser_nodes___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___AKwinternAtid___empty_init[] = "parser_prod::AKwinternAtid::empty_init";
 void parser___parser_prod___AKwinternAtid___empty_init(val_t p0, int* init_table){
-  int itpos315 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwinternAtid].i;
+  int itpos314 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwinternAtid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos315]) return;
+  if (init_table[itpos314]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9426;
+  fra.me.line = 11934;
   fra.me.meth = LOCATE_parser___parser_prod___AKwinternAtid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -51834,19 +63002,19 @@ void parser___parser_prod___AKwinternAtid___empty_init(val_t p0, int* init_table
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos315] = 1;
+  init_table[itpos314] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___AKwinternAtid___init_akwinternatid[] = "parser_prod::AKwinternAtid::init_akwinternatid";
 void parser___parser_prod___AKwinternAtid___init_akwinternatid(val_t p0, val_t p1, int* init_table){
-  int itpos316 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwinternAtid].i;
+  int itpos315 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwinternAtid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos316]) return;
+  if (init_table[itpos315]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9428;
+  fra.me.line = 11936;
   fra.me.meth = LOCATE_parser___parser_prod___AKwinternAtid___init_akwinternatid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -51856,28 +63024,28 @@ void parser___parser_prod___AKwinternAtid___init_akwinternatid(val_t p0, val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9428 */
+  /* parser/parser_prod.nit:11936 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9432 */
+  /* parser/parser_prod.nit:11940 */
   CALL_parser___parser_prod___AKwinternAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:9433 */
+  /* parser/parser_prod.nit:11941 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9433);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11941);
   }
   ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9434 */
+  /* parser/parser_prod.nit:11942 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9434);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11942);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos316] = 1;
+  init_table[itpos315] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwinternAtid___replace_child[] = "parser_prod::AKwinternAtid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AKwinternAtid___replace_child[] = "parser_prod::AKwinternAtid::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___AKwinternAtid___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;
@@ -51885,7 +63053,7 @@ void parser___parser_prod___AKwinternAtid___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 = 9437;
+  fra.me.line = 11945;
   fra.me.meth = LOCATE_parser___parser_prod___AKwinternAtid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -51897,11 +63065,11 @@ void parser___parser_prod___AKwinternAtid___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:9439 */
+  /* parser/parser_prod.nit:11947 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9439);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11947);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -51911,7 +63079,7 @@ void parser___parser_prod___AKwinternAtid___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9440 */
+    /* parser/parser_prod.nit:11948 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -51926,39 +63094,61 @@ void parser___parser_prod___AKwinternAtid___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9441 */
+      /* parser/parser_prod.nit:11949 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9441);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11949);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9442 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11950 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwintern, ID_parser___parser_nodes___TKwintern)) /*cast TKwintern*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9442);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11950);
       }
-      /* parser/parser_prod.nit:9443 */
+      /* parser/parser_prod.nit:11951 */
       ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9445 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9445);
+      /* parser/parser_prod.nit:11953 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11953);
     }
-    /* parser/parser_prod.nit:9447 */
+    /* parser/parser_prod.nit:11955 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwinternAtid___visit_all[] = "parser_prod::AKwinternAtid::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AKwinternAtid___n_id__eq[] = "parser_prod::AKwinternAtid::(parser_nodes::AAtid::n_id=)";
+void parser___parser_prod___AKwinternAtid___n_id__eq(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 = 11959;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwinternAtid___n_id__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:11961 */
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:11962 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AKwinternAtid___visit_all[] = "parser_prod::AKwinternAtid::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AKwinternAtid___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 = 9451;
+  fra.me.line = 11966;
   fra.me.meth = LOCATE_parser___parser_prod___AKwinternAtid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51967,26 +63157,26 @@ void parser___parser_prod___AKwinternAtid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9453 */
+  /* parser/parser_prod.nit:11968 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9453);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11968);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____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]);
+  CALL_parser___parser_nodes___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___AKwreadableAtid___empty_init[] = "parser_prod::AKwreadableAtid::empty_init";
 void parser___parser_prod___AKwreadableAtid___empty_init(val_t p0, int* init_table){
-  int itpos317 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwreadableAtid].i;
+  int itpos316 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwreadableAtid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos317]) return;
+  if (init_table[itpos316]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9457;
+  fra.me.line = 11972;
   fra.me.meth = LOCATE_parser___parser_prod___AKwreadableAtid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -51994,19 +63184,19 @@ void parser___parser_prod___AKwreadableAtid___empty_init(val_t p0, int* init_tab
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos317] = 1;
+  init_table[itpos316] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___AKwreadableAtid___init_akwreadableatid[] = "parser_prod::AKwreadableAtid::init_akwreadableatid";
 void parser___parser_prod___AKwreadableAtid___init_akwreadableatid(val_t p0, val_t p1, int* init_table){
-  int itpos318 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwreadableAtid].i;
+  int itpos317 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwreadableAtid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos318]) return;
+  if (init_table[itpos317]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9459;
+  fra.me.line = 11974;
   fra.me.meth = LOCATE_parser___parser_prod___AKwreadableAtid___init_akwreadableatid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -52016,28 +63206,28 @@ void parser___parser_prod___AKwreadableAtid___init_akwreadableatid(val_t p0, val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9459 */
+  /* parser/parser_prod.nit:11974 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9463 */
+  /* parser/parser_prod.nit:11978 */
   CALL_parser___parser_prod___AKwreadableAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:9464 */
+  /* parser/parser_prod.nit:11979 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9464);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 11979);
   }
   ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9465 */
+  /* parser/parser_prod.nit:11980 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9465);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11980);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos318] = 1;
+  init_table[itpos317] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwreadableAtid___replace_child[] = "parser_prod::AKwreadableAtid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AKwreadableAtid___replace_child[] = "parser_prod::AKwreadableAtid::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___AKwreadableAtid___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;
@@ -52045,7 +63235,7 @@ void parser___parser_prod___AKwreadableAtid___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 = 9468;
+  fra.me.line = 11983;
   fra.me.meth = LOCATE_parser___parser_prod___AKwreadableAtid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -52057,11 +63247,11 @@ void parser___parser_prod___AKwreadableAtid___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:9470 */
+  /* parser/parser_prod.nit:11985 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9470);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 11985);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -52071,7 +63261,7 @@ void parser___parser_prod___AKwreadableAtid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9471 */
+    /* parser/parser_prod.nit:11986 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -52086,39 +63276,61 @@ void parser___parser_prod___AKwreadableAtid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9472 */
+      /* parser/parser_prod.nit:11987 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9472);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 11987);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9473 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:11988 */
       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, 9473);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 11988);
       }
-      /* parser/parser_prod.nit:9474 */
+      /* parser/parser_prod.nit:11989 */
       ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9476 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9476);
+      /* parser/parser_prod.nit:11991 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 11991);
     }
-    /* parser/parser_prod.nit:9478 */
+    /* parser/parser_prod.nit:11993 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwreadableAtid___visit_all[] = "parser_prod::AKwreadableAtid::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AKwreadableAtid___n_id__eq[] = "parser_prod::AKwreadableAtid::(parser_nodes::AAtid::n_id=)";
+void parser___parser_prod___AKwreadableAtid___n_id__eq(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 = 11997;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwreadableAtid___n_id__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:11999 */
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:12000 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AKwreadableAtid___visit_all[] = "parser_prod::AKwreadableAtid::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AKwreadableAtid___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 = 9482;
+  fra.me.line = 12004;
   fra.me.meth = LOCATE_parser___parser_prod___AKwreadableAtid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -52127,26 +63339,26 @@ void parser___parser_prod___AKwreadableAtid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9484 */
+  /* parser/parser_prod.nit:12006 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9484);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 12006);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____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]);
+  CALL_parser___parser_nodes___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___AKwwritableAtid___empty_init[] = "parser_prod::AKwwritableAtid::empty_init";
 void parser___parser_prod___AKwwritableAtid___empty_init(val_t p0, int* init_table){
-  int itpos319 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwwritableAtid].i;
+  int itpos318 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwwritableAtid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos319]) return;
+  if (init_table[itpos318]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9488;
+  fra.me.line = 12010;
   fra.me.meth = LOCATE_parser___parser_prod___AKwwritableAtid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -52154,19 +63366,19 @@ void parser___parser_prod___AKwwritableAtid___empty_init(val_t p0, int* init_tab
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos319] = 1;
+  init_table[itpos318] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___AKwwritableAtid___init_akwwritableatid[] = "parser_prod::AKwwritableAtid::init_akwwritableatid";
 void parser___parser_prod___AKwwritableAtid___init_akwwritableatid(val_t p0, val_t p1, int* init_table){
-  int itpos320 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwwritableAtid].i;
+  int itpos319 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwwritableAtid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos320]) return;
+  if (init_table[itpos319]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9490;
+  fra.me.line = 12012;
   fra.me.meth = LOCATE_parser___parser_prod___AKwwritableAtid___init_akwwritableatid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -52176,28 +63388,28 @@ void parser___parser_prod___AKwwritableAtid___init_akwwritableatid(val_t p0, val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9490 */
+  /* parser/parser_prod.nit:12012 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9494 */
+  /* parser/parser_prod.nit:12016 */
   CALL_parser___parser_prod___AKwwritableAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:9495 */
+  /* parser/parser_prod.nit:12017 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9495);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 12017);
   }
   ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9496 */
+  /* parser/parser_prod.nit:12018 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9496);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 12018);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos320] = 1;
+  init_table[itpos319] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwwritableAtid___replace_child[] = "parser_prod::AKwwritableAtid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AKwwritableAtid___replace_child[] = "parser_prod::AKwwritableAtid::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___AKwwritableAtid___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;
@@ -52205,7 +63417,7 @@ void parser___parser_prod___AKwwritableAtid___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 = 9499;
+  fra.me.line = 12021;
   fra.me.meth = LOCATE_parser___parser_prod___AKwwritableAtid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -52217,11 +63429,11 @@ void parser___parser_prod___AKwwritableAtid___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:9501 */
+  /* parser/parser_prod.nit:12023 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9501);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 12023);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -52231,7 +63443,7 @@ void parser___parser_prod___AKwwritableAtid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9502 */
+    /* parser/parser_prod.nit:12024 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -52246,39 +63458,61 @@ void parser___parser_prod___AKwwritableAtid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9503 */
+      /* parser/parser_prod.nit:12025 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9503);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 12025);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9504 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:12026 */
       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, 9504);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 12026);
       }
-      /* parser/parser_prod.nit:9505 */
+      /* parser/parser_prod.nit:12027 */
       ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9507 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9507);
+      /* parser/parser_prod.nit:12029 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 12029);
     }
-    /* parser/parser_prod.nit:9509 */
+    /* parser/parser_prod.nit:12031 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwwritableAtid___visit_all[] = "parser_prod::AKwwritableAtid::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AKwwritableAtid___n_id__eq[] = "parser_prod::AKwwritableAtid::(parser_nodes::AAtid::n_id=)";
+void parser___parser_prod___AKwwritableAtid___n_id__eq(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 = 12035;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwwritableAtid___n_id__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:12037 */
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:12038 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AKwwritableAtid___visit_all[] = "parser_prod::AKwwritableAtid::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AKwwritableAtid___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 = 9513;
+  fra.me.line = 12042;
   fra.me.meth = LOCATE_parser___parser_prod___AKwwritableAtid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -52287,26 +63521,26 @@ void parser___parser_prod___AKwwritableAtid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9515 */
+  /* parser/parser_prod.nit:12044 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9515);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 12044);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____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]);
+  CALL_parser___parser_nodes___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___AKwimportAtid___empty_init[] = "parser_prod::AKwimportAtid::empty_init";
 void parser___parser_prod___AKwimportAtid___empty_init(val_t p0, int* init_table){
-  int itpos321 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwimportAtid].i;
+  int itpos320 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwimportAtid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos321]) return;
+  if (init_table[itpos320]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9519;
+  fra.me.line = 12048;
   fra.me.meth = LOCATE_parser___parser_prod___AKwimportAtid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -52314,19 +63548,19 @@ void parser___parser_prod___AKwimportAtid___empty_init(val_t p0, int* init_table
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos321] = 1;
+  init_table[itpos320] = 1;
   return;
 }
 static const char LOCATE_parser___parser_prod___AKwimportAtid___init_akwimportatid[] = "parser_prod::AKwimportAtid::init_akwimportatid";
 void parser___parser_prod___AKwimportAtid___init_akwimportatid(val_t p0, val_t p1, int* init_table){
-  int itpos322 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwimportAtid].i;
+  int itpos321 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwimportAtid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos322]) return;
+  if (init_table[itpos321]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 9521;
+  fra.me.line = 12050;
   fra.me.meth = LOCATE_parser___parser_prod___AKwimportAtid___init_akwimportatid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -52336,28 +63570,28 @@ void parser___parser_prod___AKwimportAtid___init_akwimportatid(val_t p0, val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9521 */
+  /* parser/parser_prod.nit:12050 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9525 */
+  /* parser/parser_prod.nit:12054 */
   CALL_parser___parser_prod___AKwimportAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:9526 */
+  /* parser/parser_prod.nit:12055 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9526);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 12055);
   }
   ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:9527 */
+  /* parser/parser_prod.nit:12056 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9527);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 12056);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos322] = 1;
+  init_table[itpos321] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwimportAtid___replace_child[] = "parser_prod::AKwimportAtid::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___AKwimportAtid___replace_child[] = "parser_prod::AKwimportAtid::(parser_nodes::ANode::replace_child)";
 void parser___parser_prod___AKwimportAtid___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;
@@ -52365,7 +63599,7 @@ void parser___parser_prod___AKwimportAtid___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 = 9530;
+  fra.me.line = 12059;
   fra.me.meth = LOCATE_parser___parser_prod___AKwimportAtid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -52377,11 +63611,11 @@ void parser___parser_prod___AKwimportAtid___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:9532 */
+  /* parser/parser_prod.nit:12061 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9532);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 12061);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -52391,7 +63625,7 @@ void parser___parser_prod___AKwimportAtid___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9533 */
+    /* parser/parser_prod.nit:12062 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -52406,39 +63640,61 @@ void parser___parser_prod___AKwimportAtid___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:9534 */
+      /* parser/parser_prod.nit:12063 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9534);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 12063);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9535 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:12064 */
       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, 9535);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 12064);
       }
-      /* parser/parser_prod.nit:9536 */
+      /* parser/parser_prod.nit:12065 */
       ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:9538 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9538);
+      /* parser/parser_prod.nit:12067 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 12067);
     }
-    /* parser/parser_prod.nit:9540 */
+    /* parser/parser_prod.nit:12069 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AKwimportAtid___visit_all[] = "parser_prod::AKwimportAtid::(parser_prod::ANode::visit_all)";
+static const char LOCATE_parser___parser_prod___AKwimportAtid___n_id__eq[] = "parser_prod::AKwimportAtid::(parser_nodes::AAtid::n_id=)";
+void parser___parser_prod___AKwimportAtid___n_id__eq(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 = 12073;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwimportAtid___n_id__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:12075 */
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:12076 */
+  CALL_parser___parser_nodes___ANode___parent__eq(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___AKwimportAtid___visit_all[] = "parser_prod::AKwimportAtid::(parser_nodes::ANode::visit_all)";
 void parser___parser_prod___AKwimportAtid___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 = 9544;
+  fra.me.line = 12080;
   fra.me.meth = LOCATE_parser___parser_prod___AKwimportAtid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -52447,18 +63703,18 @@ void parser___parser_prod___AKwimportAtid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9546 */
+  /* parser/parser_prod.nit:12082 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9546);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 12082);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____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]);
+  CALL_parser___parser_nodes___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___Start___replace_child[] = "parser_prod::Start::(parser_prod::ANode::replace_child)";
+static const char LOCATE_parser___parser_prod___Start___replace_child[] = "parser_prod::Start::(parser_nodes::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;
@@ -52466,7 +63722,7 @@ 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 = 9551;
+  fra.me.line = 12087;
   fra.me.meth = LOCATE_parser___parser_prod___Start___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -52478,7 +63734,7 @@ 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:9553 */
+  /* parser/parser_prod.nit:12089 */
   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)) {
@@ -52493,7 +63749,7 @@ void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9554 */
+    /* parser/parser_prod.nit:12090 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -52508,31 +63764,31 @@ 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:9556 */
+      /* parser/parser_prod.nit:12092 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9556);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 12092);
       }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:9557 */
+      CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:12093 */
       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, 9557);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 12093);
       }
-      /* parser/parser_prod.nit:9558 */
+      /* parser/parser_prod.nit:12094 */
       ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[2];
     }
-    /* parser/parser_prod.nit:9560 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-    /* parser/parser_prod.nit:9561 */
+    /* parser/parser_prod.nit:12096 */
+    CALL_parser___parser_nodes___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+    /* parser/parser_prod.nit:12097 */
     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)";
+static const char LOCATE_parser___parser_prod___Start___visit_all[] = "parser_prod::Start::(parser_nodes::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[3];} fra;
   val_t REGB0;
@@ -52540,7 +63796,7 @@ void parser___parser_prod___Start___visit_all(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 = 9565;
+  fra.me.line = 12101;
   fra.me.meth = LOCATE_parser___parser_prod___Start___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -52551,9 +63807,9 @@ void parser___parser_prod___Start___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:9565 */
+  /* parser/parser_prod.nit:12101 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:9567 */
+  /* parser/parser_prod.nit:12103 */
   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)) {
@@ -52569,23 +63825,23 @@ void parser___parser_prod___Start___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:9568 */
+    /* parser/parser_prod.nit:12104 */
     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, 9568);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 12104);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:9570 */
+  /* parser/parser_prod.nit:12106 */
   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, 9570);
+    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser___parser_prod, 12106);
   }
   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]);
+  CALL_parser___parser_nodes___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }